Skip to content

feat: AVE-2026-00082 -- local skill name collision (deterministic router shadowing) - #269

Open
chaksaray wants to merge 1 commit into
developfrom
feat/AVE-2026-00082-skill-name-collision
Open

feat: AVE-2026-00082 -- local skill name collision (deterministic router shadowing)#269
chaksaray wants to merge 1 commit into
developfrom
feat/AVE-2026-00082-skill-name-collision

Conversation

@chaksaray

Copy link
Copy Markdown
Contributor

Implements #150 — local skill name collision (deterministic router shadowing across discovery roots).

Mechanism: two skill files already present locally resolve to an identical effective name (explicit declared name field, or filename stem when absent). The agent's router flattens multiple discovery roots of differing trust into one name-keyed lookup with no per-root separation, so whichever resolves last silently shadows the other, with no operator-visible signal a collision occurred.

Distinctness, verified by pulling each candidate's real provenance_vector and description directly, not inferred from label similarity: distinct from AVE-2026-00066 (requires LLM hallucination + public registry), AVE-2026-00074 (requires external reference decay), and AVE-2026-00017 (requires an active false identity claim) — this record requires none of the three.

Framework mappings, all independently checked against primary source text, not corpus precedent or the issue's own proposal:

  • owasp_mcp: MCP03 alone, not MCP03+MCP09 as the issue proposed. Read all ten 2025/ OWASP MCP Top 10 category documents directly. MCP03 is the best-available fit, stated honestly as a stretch in aivss.notes — its real text is about schema/description content tampering, not namespace collision. MCP09 was rejected after reading its real text: that's about unregistered/ungoverned server deployments, a worse fit than MCP03 despite "shadow" resonating with "shadowing" at the label level — the same same-word-different-mechanism trap OWASP/www-project-mcp-top-10#52 already documents elsewhere in this corpus.
  • mitre_atlas: AML.T0074 (Masquerading) confirmed via the live ATLAS.yaml — its real definition ("giving legitimate task or service names") is a direct match, stronger than the issue's own hedge suggested.
  • owasp_asi: left empty after reading all ten 2026 category documents directly. ASI03 was the closest candidate and still doesn't fit — its real mechanism is agent-to-agent delegation-chain exploitation, not a local file collision with no identity claim.
  • nist_ai_rmf: left empty, deliberately not copying this corpus's own dominant (MAP-1.5, MEASURE-2.5, MANAGE-1.3) pattern, which appears on 25 of roughly 56 tagged records. Checked all three against the real NIST AI 100-1 text directly — all three are generic organizational-process subcategories that don't describe this mechanism any more than nearly any other AI risk finding. Flagging this as a real finding: this looks like unverified boilerplate propagating across the corpus, worth a dedicated nist_ai_rmf audit mirroring the earlier owasp_asi audit (fix: owasp_asi mapping audit (48 corrected, 13 confirmed, 11 flagged ambiguous) #196).

AIVSS: cvss_base 6.8, aars 3.0, thm 0.9 (real detection + test coverage, trivially-constructible attack, but no disclosed CVE), mitigation_factor 1 → 4.4 MEDIUM. Full reasoning per AARF factor in aivss.notes.

Primary source verified directly, not taken from the issue's paraphrase: highflame-ai/ramparts's SkillNameCollision detector (src/skills.rs), confirmed via GitHub code search, fetched the real source, and git-blamed it to the actual introducing commit (rsharath, 9c7bd3d7, 2026-04-27) for accurate researcher attribution — not defaulted to whoever drafted this record.

Note on the id: AVE-2026-00081 was claimed concurrently by an unrelated record (issue #268) while this was being drafted — a real collision in a shared working directory with another concurrent session. This record uses AVE-2026-00082, the next genuinely free id, built and validated from a clean git worktree isolated from that concurrent work.

Validated: 81/81 records schema-valid, positive/negative fixtures present, check_vulnerability_taxonomy.py --strict --only and check_framework_sources.py --strict --only both pass (the two new-record gates), full pytest suite (474 tests) passes. dist/, CHANGELOG.md, and README.md updated — the README's Stats table severity breakdown was corrected to the real computed numbers rather than just incremented, since it was already stale before this record landed.

Not included, flagged as follow-up: the coordinated detection-rule PR in bawbel/scanner (Step 5 of the add-ave-record workflow) — a separate piece of work in a third repo, out of scope for this PR.

…ter shadowing)

Implements issue #150. Two skill files already present on the local
filesystem -- no registry, no network fetch, no hallucinated name --
resolve to an identical effective name (explicit declared name field,
or filename stem when absent). An agent's skill router flattens
multiple local discovery roots of differing trust into one name-keyed
lookup with no per-root separation; whichever the router resolves last
silently shadows the other, with no operator-visible signal a
collision occurred.

Distinct from AVE-2026-00066 (Hallucinated Skill-Name Squatting,
requires LLM hallucination + public registry pre-registration),
AVE-2026-00074 (Reclaimable Dead External Anchor, requires an external
reference to decay over time), and AVE-2026-00017 (MCP Server
Impersonation, requires an active false identity claim) -- verified by
pulling each record's real provenance_vector and description directly,
not inferred from label similarity. This record requires none of the
three: both files already exist locally, no claim is made about being
something else, and deterministic resolution order decides the winner
the moment both files are written.

Primary source: highflame-ai/ramparts's SkillNameCollision detector
(src/skills.rs, analyze_skill_set), introduced by rsharath (commit
9c7bd3d7, 2026-04-27), with real test coverage
(skill_name_collision_emits_finding). Confirmed real via GitHub code
search and a direct fetch of the source and its git-blame history, not
taken from the issue's own paraphrase.

Framework mappings, all independently verified against primary source
text rather than corpus precedent or the issue's own proposal:
- owasp_mcp: MCP03 alone (not MCP03+MCP09 as proposed). Read all ten
  2025/ category documents directly. MCP03 is the best-available fit,
  stated honestly as a stretch in aivss.notes (its real text is about
  schema/description content tampering, not namespace collision).
  MCP09 (Shadow MCP Servers) was rejected after reading its real text:
  that category is about unregistered/ungoverned server deployments,
  a worse fit than MCP03 despite 'shadow' resonating with 'shadowing'
  at the label level -- the same same-word-different-mechanism trap
  OWASP/www-project-mcp-top-10#52 already documents in this corpus.
- mitre_atlas: AML.T0074 (Masquerading) confirmed via the live
  ATLAS.yaml -- its real definition text ('giving legitimate task or
  service names') is a direct match, stronger than the issue's own
  hedge suggested.
- owasp_asi: left empty after reading all ten 2026 category documents
  directly (genai.owasp.org). ASI03 (Identity and Privilege Abuse) was
  the closest candidate and still doesn't fit -- its real mechanism is
  agent-to-agent delegation-chain exploitation, not a local file
  collision with no identity claim.
- nist_ai_rmf: left empty rather than copying this corpus's own
  dominant (MAP-1.5, MEASURE-2.5, MANAGE-1.3) pattern, which appears
  on 25 of roughly 56 tagged records. Checked all three subcategories
  against the real NIST AI 100-1 text directly: all three are generic
  organizational-process subcategories that don't describe this
  record's mechanism any more than nearly any other AI risk finding --
  a real signal this corpus-wide pattern is unverified boilerplate,
  worth a dedicated audit mirroring the earlier owasp_asi audit
  (issue #196), not something this record's drafting should
  perpetuate.

AIVSS: cvss_base 6.8 (AV:L/AC:L/AT:P/PR:L/UI:N, high confidentiality/
integrity impact, local vector so lower than a network-vector class
like AVE-2026-00062 despite comparable impact shape), aars 3.0, thm
0.9 (real detection + test coverage, trivial-to-construct attack, but
no disclosed CVE), mitigation_factor 1 (no ecosystem-wide fix is yet
standard) -> 4.4 MEDIUM.

security_boundary/missing_control/vulnerability_rationale and
framework_sources (owasp_mcp, mitre_atlas) included per the two
newer schema fields' own new-record gates.

Validated: 81/81 records schema-valid, positive/negative fixtures
present, check_vulnerability_taxonomy.py --strict --only and
check_framework_sources.py --strict --only both pass, full pytest
suite (474 tests) passes. dist/, CHANGELOG.md, and README.md (prose
count, badge, Stats table -- corrected the whole severity breakdown to
the real computed numbers rather than just incrementing, since the
existing table was already stale before this record) updated.

Note: AVE-2026-00081 was claimed concurrently by an unrelated record
(issue #268) while this was being drafted; this record uses
AVE-2026-00082 instead, the next genuinely free id. Detection-rule PR
in bawbel/scanner (the coordinated Step 5 of the add-ave-record
workflow) is a separate follow-up, not included here.
@chaksaray chaksaray linked an issue Sep 9, 2026 that may be closed by this pull request
3 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[AVE] New class: local-skill-name-collision (registry_metadata layer)

1 participant