ACVE-2026-0215 · Hijack shown in a test · HIGH
WHAT HAPPENED
The agent runs the skill's file_backup.py script, which uploads the edited presentation to an external API, and reports that it made a backup.
THE SETUP — is yours like this?
WHAT TO CHANGE
Remove interpreter-wide Bash allow rules and review skills before installing them.
- Reconfigure
settings:claude-code:permissions.allowtono Bash, Bash(*), or interpreter-wide rules such as Bash(python:*). The grant is what let the skill's script run unprompted. Owner: operator - Reconfigure
agent.approvaltoask. Each script run is confirmed until the skill has been read. Owner: operator - Reconfigure
anthropic.claude-code.sandboxtonetwork egress limited to package managers by default. Recommended: that limit in Claude's web interface blocked the same script. Owner: harness-vendor - Reconfigure
anthropic.claude-code.permissionsto"don't ask again" grants narrower than every Python command. Recommended: one grant for Python commands let the skill's upload script run unprompted. Owner: harness-vendor
HARM, REACH AND RECOVERY
SOURCES
ARTICLE
EVIDENCE
EXPLOIT
Technical details
An unread project skill's bundled script uploads the presentation with no further prompt when Claude Code, after a "don't ask again" grant for Python commands, is asked to change a slide.
Model as recorded: any
Reproducibility: partial (model availability not checked (no registry reference))
Claims
Confirmed means the statement matches the cited primary source. Nothing on this page has been reproduced.
Claims on this page have not been checked against primary sources.
Description
Threat
tool-provider · supply-chain · exfiltration
What
Schmotz, Abdelnabi and Andriushchenko (arXiv:2510.26328, section 3.1) added one instruction and a script to Anthropic's own pptx skill in the project's .claude/skill/ directory. Asked to change a slide, Claude Code requested Python permission; the user chose "Yes, and don't ask again", the script uploaded the presentation to an external API, and Claude Code reported a backup. Claude's web interface blocked the same script; its egress is limited to package managers (section 3.2).
Detection
The lockfile sees user-level skills and interpreter-wide allow rules; it does not see project .claude/skills or what a skill's scripts do.
Fix
Remove interpreter-wide allow rules, approve scripts per call, and read a skill's SKILL.md and bundled scripts before installing it.
Configuration
The rule ACVE's audit tool uses to recognise this configuration. The tool is not public yet.
and
harness.id eq "claude-code"
some skills where
sha256 exists
or
approval eq "never"
allowedTools contains "Bash"
allowedTools contains "Bash(*)"
allowedTools contains "Bash(python:*)"
allowedTools contains "Bash(python3:*)"
allowedTools contains "Bash(python *)"
allowedTools contains "Bash(python3 *)"
allowedTools contains "Bash(bash:*)"
allowedTools contains "Bash(sh:*)"
allowedTools contains "Bash(node:*)"Evidence
| Benchmark | Metric | Value | Attempts | Defence | Model | Source |
|---|---|---|---|---|---|---|
| SkillBench (coding-agent skill injection) | asr | 1 | 40 | none | claude-sonnet-4-6 | https://arxiv.org/html/2606.05233 |