ACVE-2025-0004
Claude Code can traverse paths through untrusted context
The configuration
- Configuration label
- claude-code <0.2.111 + permissionMode auto|acceptEdits|bypassPermissions
- Affected entries
AgentHarness: claude-code — SEMVER (introduced 0; fixed 0.2.111)
- Matcher
- all
- all
harness.ideq"claude-code"harness.versionsemverRange"<0.2.111"
- some mcpServers
transportexists
permissionModein[ "auto", "acceptEdits", "bypassPermissions" ]
- all
- all
Why it is exploitable
What the vulnerability is
Claude Code before 0.2.111 had a path-validation weakness in its project boundary. Prefix-style path checks could treat a path outside the current working directory as allowed when an attacker could arrange a matching prefix and place untrusted content into the context. The result can be unauthorized file access outside the intended project directory.
Which configuration is exposed
The exposed combination is Claude Code <0.2.111, at least one configured MCP server with a transport, and a permission mode of auto, acceptEdits, or bypassPermissions. These are exactly the matcher conditions: harness.id is claude-code, harness.version is below 0.2.111, mcpServers[].transport exists, and permissionMode is one of the three values. The finding does not assert that a particular server is malicious; it identifies a harness and context path in which untrusted input can matter.
How ACVE detects it
ACVE reads harness.id, harness.version, mcpServers[].transport, and permissionMode. It cannot see whether a transport actually delivered attacker-controlled content, whether a prefix-collision directory exists, or which files would be reachable. A match is therefore a configuration-aware exposure signal, not a reproduction of the traversal.
Fix
- Upgrade Claude Code to
0.2.111or later. - Use an approval-required permission mode while reviewing MCP context, and only enable less restrictive modes for trusted projects.
The permission-mode condition describes the approval posture at scan time; it does not claim that every configured transport is externally reachable.
The permission-mode condition describes the approval posture at scan time; it does not claim that every configured transport is externally reachable.
References
See references for primary sources.
Underlying CVEs / aliases
Detect
npx @pickbitsai/acve audit
For CI, emit SARIF with npx @pickbitsai/acve audit --format sarif --out acve.sarif --apply and upload it with GitHub code scanning.
Fix
Upgrade Claude Code and require approval when untrusted MCP context is present.
| Action | Target | To | Why |
|---|---|---|---|
| upgrade | harness:claude-code | 0.2.111 | Use the fixed release. |
| reconfigure | agent.permissionMode | — | Do not allow untrusted content to reach the context automatically. |
Validation
| Who | Date | Method | Evidence |
|---|---|---|---|
| Mark Pickering (PickBits) via Claude Code session 01YR6ri2tM3jU9vdQNe9R5pw | 2026-09-20 | vendor-advisory | https://nvd.nist.gov/vuln/detail/CVE-2025-54794 |
Grounding
- OSV: not found; checked-at 2026-09-20T02:43:23Z
- NVD: found; checked-at 2026-09-20T02:43:23Z
- KEV: not listed in KEV; checked-at 2026-09-20T02:43:23Z