Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
afe4ea2
chore: v1.1.0 hygiene pass — strip template artifacts, sync/remove ow…
chaksaray Jul 5, 2026
7cd568b
chore: v1.1.0 behavioral_vector retag, populate example_patterns
chaksaray Jul 5, 2026
ee3473a
feat: add AVE schema v1.1.0 — renames, removal, new fields, draft/act…
chaksaray Jul 5, 2026
84b87e6
feat: bump all 51 records to schema_version 1.1.0
chaksaray Jul 6, 2026
f2c7de7
feat: draft provenance_vector, trifecta_profile, mitigation for all 5…
chaksaray Jul 6, 2026
31ae7ad
fix: correct AVE-2026-00041 mitigation drift found in Section 6.2 spo…
chaksaray Jul 6, 2026
d78008a
fix: correct AVE-2026-00042 mitigation drift found in Section 6.2 spo…
chaksaray Jul 9, 2026
ebe824e
docs: research benchmark — CRITICAL/HIGH attack class gaps, 2026-07-10
chaksaray Jul 9, 2026
2127422
docs: record Phase 4 issue links in the 2026-07-10 benchmark report
chaksaray Jul 9, 2026
4d0df90
docs: sync issue template field names to v1.1.0 renames
chaksaray Jul 9, 2026
d2ade45
docs: sync CONTRIBUTING.md to v1.1.0 schema and field names
chaksaray Jul 9, 2026
f795a8e
docs: sweep remaining v1.0.0/pre-rename references repo-wide
chaksaray Jul 9, 2026
387bc36
docs: PRD for the critical/high attack class batch (issues #32-#36)
chaksaray Jul 9, 2026
a925448
docs: resolve Decision 1 (detection_layer: content for #32/#33)
chaksaray Jul 9, 2026
b1b1c0c
feat: AVE-2026-00052 -- MCP tool implementation command injection
chaksaray Jul 10, 2026
4ea604e
docs: update PRD status for #32 implementation
chaksaray Jul 10, 2026
54d1015
feat: AVE-2026-00053 -- MCP resource path traversal
chaksaray Jul 10, 2026
333aad3
docs: update PRD status for #33 implementation (AVE-2026-00053)
chaksaray Jul 10, 2026
7498926
feat: AVE-2026-00054 -- code-execution sandbox escape
chaksaray Jul 10, 2026
d2a981e
docs: update PRD status for #36 implementation (AVE-2026-00054)
chaksaray Jul 10, 2026
13fb125
feat: AVE-2026-00055 -- MCP STDIO launch configuration injection
chaksaray Jul 10, 2026
b0e5cd6
feat: AVE-2026-00056 -- zero-click exfiltration via rendered content …
chaksaray Jul 10, 2026
11c9d3d
docs: mark critical/high attack class batch complete (5/5 records)
chaksaray Jul 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/01_ave_submission.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ assignees: ''
attack_class:
severity: (estimate — CRITICAL / HIGH / MEDIUM / LOW)
owasp_mcp: [MCPxx]
owasp_mapping: [ASIxx] (if applicable)
mitre_atlas_mapping: [AML.Txxxx] (if applicable)
owasp_asi: [ASIxx] (if applicable)
mitre_atlas: [AML.Txxxx] (if applicable)
detection_layer: content | server_card | registry_metadata | runtime | transport
detection_stage: static_detection | runtime_observed
evidence_basis_engines: [pattern | yara | semgrep | llm | sandbox]
Expand Down
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/03_schema_change.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: Schema change proposal
about: Propose a change to ave-record-1.0.0.schema.json
about: Propose a change to ave-record-1.1.0.schema.json
title: "[SCHEMA] <brief description>"
labels: schema
assignees: ''
Expand All @@ -21,7 +21,7 @@ assignees: ''

## Migration path for existing records

<!-- How will the 48 existing records be updated? Can this be done with an automated script? -->
<!-- How will the 51 existing records be updated? Can this be done with an automated script? -->

## Impact on consumers

Expand Down
6 changes: 3 additions & 3 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
### For new AVE record submissions

- [ ] Linked issue confirms the id and that this is a new class, not a variant
- [ ] Record validates against `schema/ave-record-1.0.0.schema.json`
- [ ] Record validates against `schema/ave-record-1.1.0.schema.json`
- [ ] All 15 required fields are present and non-empty
- [ ] `behavioral_fingerprint` is one clear sentence describing what the component DOES
- [ ] `indicators_of_compromise` has at least one entry a defender can actually search for
Expand All @@ -51,8 +51,8 @@
### For schema changes

- [ ] Issue opened first with 30-day comment period completed (structural changes only)
- [ ] `schema/ave-record-1.0.0.schema.json` updated
- [ ] New versioned schema file added (e.g. `schema/ave-record-1.1.0.schema.json`)
- [ ] `schema/ave-record.schema.json` (alias) updated to mirror the new canonical
- [ ] New versioned schema file added (e.g. `schema/ave-record-1.2.0.schema.json`) — prior versioned files stay frozen, never edited
- [ ] CHANGELOG.md updated
- [ ] Migration path for existing records documented

Expand Down
3 changes: 2 additions & 1 deletion ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ the rules that implement detection, and the validation tooling.
records/ AVE record JSON files — the standard's data
schema/ JSON schema the records validate against
ave-record.schema.json alias — always points to current
ave-record-1.0.0.schema.json versioned canonical — permanent
ave-record-1.1.0.schema.json versioned canonical — current, permanent
ave-record-1.0.0.schema.json versioned canonical — frozen, permanent
rules/ Detection rule implementations
├── pattern/ Regex pattern rules (Python)
├── yara/ YARA rules (.yar)
Expand Down
26 changes: 17 additions & 9 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ Single source of truth for how work happens in this repo.
bawbel/ave — the behavioral classification standard for agentic AI components.
An independent standard that bawbel-scanner implements. NOT a feature of the scanner.

- Records: 51 published (schema_version 1.0.0)
- Schema: schema/ave-record-1.0.0.schema.json
- Records: 51 published (schema_version 1.1.0)
- Schema: schema/ave-record-1.1.0.schema.json
- Scoring: OWASP AIVSS v0.8
- Registry: ave.bawbel.io
- Public API: api.piranha.bawbel.io
Expand Down Expand Up @@ -43,19 +43,27 @@ The record declares the BASELINE; the scanner assigns the ACTUAL value.

---

## Record schema v1.0.0
## Record schema v1.1.0

Every record validates against schema/ave-record-1.0.0.schema.json.
Every record validates against schema/ave-record-1.1.0.schema.json.

**15 required fields:**
**15 required fields** (once `status` is `active` or `deprecated`):
ave_id · schema_version · status · published
title · description · attack_class · severity · behavioral_fingerprint
aivss · owasp_mcp
indicators_of_compromise · remediation
references · researcher

**Draft submit-required core** (`status: "draft"` only needs these 8):
ave_id · schema_version · status · title · description · attack_class ·
behavioral_fingerprint · references

**Optional framework fields** (add when applicable, omit rather than force):
owasp_mapping · mitre_atlas_mapping · nist_ai_rmf_mapping
owasp_asi · mitre_atlas · nist_ai_rmf

**Optional runtime/mitigation classification fields** (vendor-neutral only —
no enforcement-tool config ever belongs here):
provenance_vector · trifecta_profile · mitigation · example_patterns

**Optional scanner evidence declarations** (declare defaults the scanner uses):
evidence_kind_default · detection_stage · detection_layer
Expand Down Expand Up @@ -92,7 +100,7 @@ Every function in validation scripts gets a What/Why/How comment.
```python
# What: validates one AVE record against the JSON schema
# Why: a malformed record breaks every downstream scanner that loads it
# How: jsonschema.validate against schema/ave-record-1.0.0.schema.json
# How: jsonschema.validate against schema/ave-record-1.1.0.schema.json
def validate_record(record: dict) -> tuple[bool, list[str]]:
...
```
Expand Down Expand Up @@ -129,14 +137,14 @@ python scripts/check_fixtures.py # every rule has +/- fixtures

## Hard rules

1. Every record validates against schema/ave-record-1.0.0.schema.json.
1. Every record validates against schema/ave-record-1.1.0.schema.json.
2. confidence NEVER appears in an AVE record — it is per-detection.
3. Behavioral fingerprints over signatures — describe what it DOES.
4. Every record has at least one rule and a positive + negative fixture.
5. ave_id is immutable once published. Never renumber. Deprecate, never delete.
6. severity and aivss.aivss_score must agree (CRITICAL implies >= 9.0).
7. All names from LANGUAGE.md.
8. owasp_mcp is required. owasp_mapping, mitre_atlas_mapping, nist_ai_rmf_mapping
8. owasp_mcp is required. owasp_asi, mitre_atlas, nist_ai_rmf
are optional — add when they apply, omit rather than force a poor fit.
9. references must have at least one citable primary source.
10. Never commit records/INDEX.md — it is removed. The README is the index.
Expand Down
15 changes: 8 additions & 7 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ contribution makes AI agents safer for everyone.
before writing JSON. The maintainer will confirm the next available id.

4. **Read the schema** at
[`schema/ave-record-1.0.0.schema.json`](schema/ave-record-1.0.0.schema.json)
[`schema/ave-record-1.1.0.schema.json`](schema/ave-record-1.1.0.schema.json)
for field definitions, types, and required/optional status. The schema
reference page is at [ave.bawbel.io/schema.html](https://ave.bawbel.io/schema.html).

Expand Down Expand Up @@ -80,8 +80,8 @@ Key rules:
- `behavioral_fingerprint` describes what the component *does*, not a string
it contains. "Component fetches remote content and executes it as
instructions" not "contains the word fetch."
- `owasp_mcp` is required with at least one entry. `owasp_mapping`,
`mitre_atlas_mapping`, and `nist_ai_rmf_mapping` are optional — add
- `owasp_mcp` is required with at least one entry. `owasp_asi`,
`mitre_atlas`, and `nist_ai_rmf` are optional — add
them when they apply, omit rather than force a poor fit.
- `indicators_of_compromise` must have at least one entry that a defender
can actually search for in a real file.
Expand Down Expand Up @@ -129,7 +129,7 @@ const Ajv = require('ajv/dist/2020');
const addFormats = require('ajv-formats');
const ajv = new Ajv({ strict: false });
addFormats(ajv);
const schema = require('./schema/ave-record-1.0.0.schema.json');
const schema = require('./schema/ave-record-1.1.0.schema.json');
const record = require('./records/AVE-2026-NNNNN.json');
const ok = ajv.validate(schema, record);
if (!ok) { console.error(ajv.errors); process.exit(1); }
Expand Down Expand Up @@ -180,8 +180,9 @@ changed validation rules): open an issue first. These require a schema
version bump, a migration path for existing records, and a 30-day comment
period before merging.

Current schema: **v1.0.0**.
Canonical file: `schema/ave-record-1.0.0.schema.json`.
Current schema: **v1.1.0**.
Canonical file: `schema/ave-record-1.1.0.schema.json`.
(`schema/ave-record-1.0.0.schema.json` remains, permanently, as the frozen v1.0.0 canonical.)

---

Expand All @@ -197,7 +198,7 @@ git commit -m "fix: AVE-2026-NNNNN -- <what changed>"
```

AIVSS score changes require written rationale for each AARF factor that
changes. Framework mapping additions (`owasp_mapping`, `mitre_atlas_mapping`)
changes. Framework mapping additions (`owasp_asi`, `mitre_atlas`)
are welcome without prior issue if the mapping is clear.

`ave_id` values are immutable. Never renumber a record. If a record is wrong
Expand Down
4 changes: 2 additions & 2 deletions LANGUAGE.md
Original file line number Diff line number Diff line change
Expand Up @@ -168,5 +168,5 @@ PiranhaDB, confidence, evidence_stage — defined in scanner LANGUAGE.md.
| rule_definition | rule |
| CVE record | AVE record — AVE is not CVE |
| confidence (in a record) | confidence_baseline |
| owasp (field name) | owasp_mapping |
| mitre_atlas (field name) | mitre_atlas_mapping |
| owasp (field name) | owasp_asi |
| mitre_atlas_mapping (field name) | mitre_atlas |
10 changes: 5 additions & 5 deletions PRODUCT.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ an identity.

| | |
|---|---|
| Records published | 51 (schema_version 1.0.0) |
| Schema version | 1.0.0 (canonical, published) |
| Records published | 51 (schema_version 1.1.0) |
| Schema version | 1.1.0 (canonical, published) |
| Registry | ave.bawbel.io (live) |
| Threat intel API | api.piranha.bawbel.io |
| Site repo | github.com/bawbel/ave-site |
Expand All @@ -57,9 +57,9 @@ an identity.
|---|---|---|
| OWASP AIVSS v0.8 | `aivss` object | required in every record |
| OWASP MCP Top 10 | `owasp_mcp` | required, MCP01-MCP10 |
| OWASP Agentic AI Top 10 | `owasp_mapping` | optional, ASI01-ASI10 |
| MITRE ATLAS | `mitre_atlas_mapping` | optional, AML.Txxxx |
| NIST AI RMF | `nist_ai_rmf_mapping` | optional |
| OWASP Agentic Security Initiative Top 10 | `owasp_asi` | optional, ASI01-ASI10 |
| MITRE ATLAS | `mitre_atlas` | optional, AML.Txxxx |
| NIST AI RMF | `nist_ai_rmf` | optional |
| OWASP AIBOM | planned via `bawbel abom` CycloneDX command | future |

---
Expand Down
34 changes: 21 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ MCP server, system prompt, or agent plugin can be weaponized — scored consiste
mapped to the frameworks security teams already report against.

[![Records](https://img.shields.io/badge/records-51-0f6e56?style=flat-square)](records/)
[![Schema](https://img.shields.io/badge/schema-v1.0.0-0a3024?style=flat-square)](schema/ave-record-1.0.0.schema.json)
[![Schema](https://img.shields.io/badge/schema-v1.1.0-0a3024?style=flat-square)](schema/ave-record-1.1.0.schema.json)
[![AIVSS](https://img.shields.io/badge/AIVSS-v0.8-d4a017?style=flat-square)](https://aivss.owasp.org)
[![OWASP MCP](https://img.shields.io/badge/OWASP-MCP%20Top%2010-0a3024?style=flat-square)](https://owasp.org)
[![MITRE ATLAS](https://img.shields.io/badge/MITRE-ATLAS-4a3f9e?style=flat-square)](https://atlas.mitre.org)
Expand Down Expand Up @@ -276,13 +276,13 @@ request a crosswalk for your scanner's rule IDs.

---

## Schema v1.0.0
## Schema v1.1.0

Records validate against
[`schema/ave-record-1.0.0.schema.json`](schema/ave-record-1.0.0.schema.json).
[`schema/ave-record-1.1.0.schema.json`](schema/ave-record-1.1.0.schema.json).

Canonical `$id`:
`https://ave.bawbel.io/schema/ave-record-1.0.0.schema.json`
`https://ave.bawbel.io/schema/ave-record-1.1.0.schema.json`

**15 required fields:**

Expand All @@ -299,7 +299,7 @@ references · researcher
```json
{
"ave_id": "AVE-2026-00001",
"schema_version": "1.0.0",
"schema_version": "1.1.0",
"status": "active",
"published": "2026-04-01T09:00:00Z",
"title": "Metamorphic payload via external config fetch",
Expand All @@ -320,15 +320,22 @@ references · researcher
```

**All optional fields:**
`component_type` · `last_updated` · `behavioral_vector` · `aivss_score` ·
`cvss_base_vector` · `owasp_mapping` · `mitre_atlas_mapping` ·
`nist_ai_rmf_mapping` · `affected_platforms` · `affected_registries` ·
`component_type` · `last_updated` · `behavioral_vector` · `example_patterns` ·
`aivss_score` · `cvss_base_vector` · `owasp_asi` · `mitre_atlas` ·
`nist_ai_rmf` · `provenance_vector` · `trifecta_profile` · `mitigation` ·
`affected_platforms` · `affected_registries` ·
`mutation_count` · `detection_methodology` · `kill_switch_active` ·
`researcher_url` · `aivss.aarf` · `aivss.aivss_severity` ·
`aivss.owasp_mcp_mapping` · `aivss.notes` · `evidence_kind_default` ·
`aivss.notes` · `evidence_kind_default` ·
`detection_stage` · `detection_layer` · `confidence_baseline` ·
`evidence_basis_engines` · `derivable_into`

`status: "draft"` records need only a reduced eight-field core (`ave_id`,
`schema_version`, `status`, `title`, `description`, `attack_class`,
`behavioral_fingerprint`, `references`) — the full 15-field required set
above applies once `status` is `active` or `deprecated`. See
[CONTRIBUTING.md](CONTRIBUTING.md) for the thin-submission path.

Full schema reference: [ave.bawbel.io/schema.html](https://ave.bawbel.io/schema.html)

---
Expand Down Expand Up @@ -379,7 +386,7 @@ const Ajv = require('ajv/dist/2020');
const addFormats = require('ajv-formats');
const ajv = new Ajv({ strict: false });
addFormats(ajv);
const schema = require('./schema/ave-record-1.0.0.schema.json');
const schema = require('./schema/ave-record-1.1.0.schema.json');
const record = require('./records/AVE-2026-NNNNN.json');
const ok = ajv.validate(schema, record);
if (!ok) console.error(ajv.errors); else console.log('valid');
Expand Down Expand Up @@ -412,10 +419,11 @@ at [ave.bawbel.io/crosswalks.html](https://ave.bawbel.io/crosswalks.html).

| Framework | Field | Crosswalk |
|---|---|---|
| [OWASP AST10](https://owasp.org/www-project-agentic-ai-security/) | `owasp_mapping` (ASI01-ASI10) | [`crosswalks/ave-to-ast10.json`](crosswalks/ave-to-ast10.json) |
| OWASP Agentic Security Initiative Top 10 | `owasp_asi` (ASI01-ASI10) | schema field, all applicable records |
| [OWASP Agentic Skills Top 10 (AST10)](https://owasp.org/www-project-agentic-skills-top-10/) | no dedicated schema field yet (`owasp_ast` planned) | [`crosswalks/ave-to-ast10.json`](crosswalks/ave-to-ast10.json) |
| OWASP MCP Top 10 | `owasp_mcp` | all records |
| MITRE ATLAS | `mitre_atlas_mapping` | where applicable |
| NIST AI RMF | `nist_ai_rmf_mapping` | where applicable |
| MITRE ATLAS | `mitre_atlas` | where applicable |
| NIST AI RMF | `nist_ai_rmf` | where applicable |

| This scanner | Maps to AVE via |
|---|---|
Expand Down
Loading