Your IDE Is a C2 Channel — Five Teams Proved It This Week
The Exploitation Surface Is the Feature Set
Five independent security teams shipped working exploit chains against Claude Code, Cursor, and VS Code inside the same reporting window. The mechanism is identical in every case. Untrusted text enters the context window. The model treats it as instruction. The agent calls a tool with the user's credentials. No zero-day. The product is doing what the spec says.
A README with hidden instructions is now an executable. A pull request comment is now an executable. A Jira ticket is now an executable.
Claude Code: Hooks + Skills = Arbitrary Shell
Read the config. Claude Code's .claude/settings.json registers hooks that fire arbitrary shell on SessionStart, PreToolUse, and PostToolUse. The file lives in the repo. It runs when a developer opens a session. Skills frontmatter with allowed-tools: Bash(*) grants command execution before the LLM is in the loop. Sub-agents with permissionMode: bypassPermissions skip the consent dialog.
Cursor: NomShub Chain — Persistent Shell From Opening a Repo
The chain gets persistent shell access from the act of opening a repository. Indirect prompt injection, then sandbox escape via shell builtins (export/cd), then ~/.zshenv persistence, then Cursor's own remote tunnel as C2. The user allowed network access last Tuesday for a legitimate task. That permission did not expire.
VS Code Dev Tunnels: Reimplemented as Standalone C2
SpecterOps shipped Ouroboros in Rust. It is a full reimplementation of the Dev Tunnel stack: REST to WebSocket to SSH via russh to MsgPack RPC, with spawn/fs_read/fs_write/fs_connect methods. The traffic looks like Microsoft. FOCI/BroCI token pivoting from Teams or Azure Portal yields tunnel access with no extra credentials. This is good engineering used badly.
The CloudTrail Timing Gap Is Architectural
An AI agent finishes the AWS kill chain in ~60 seconds: leaked IAM key to data exfil, 58% success rate. CloudTrail has a 5-minute inherent log delivery delay. The SIEM alerts four minutes after the exfil is done. The only thing that works at this clock is real-time honeytoken alerting on GetCallerIdentity calls. Move detection to phase one. Post-hoc log analysis is not a control here.
Why All Marketplace Scanners Failed
Trail of Bits bypassed every AI skill marketplace scanner (ClawHub, Cisco, skills.sh) within hours using boring techniques: 100K newlines hiding malicious code, .docx archive payloads, poisoned .pyc files, and prompt injection against the guard model. Their conclusion: avoid public marketplaces entirely.
The Supply Chain Layer
TeamPCP (UNC6780) compromised the LiteLLM, BerriAI, Trivy, and Checkmarx repositories to plant SANDCLOCK, which lifts AWS keys and GitHub tokens out of CI/CD. If any of those are in the build pipeline, check the version pin against the published advisories before the next deploy.
What to do
Grep all repositories for .claude/settings.json, .claude/ directories, and .cursor/rules files. Add to pre-commit hooks and code review requirements as executable code.
Kill all VS Code Dev Tunnels at the network layer. Inventory active tunnels per account and terminate any unrecognized ones.
Pin and audit versions of LiteLLM, Trivy, and Checkmarx in CI/CD against the TeamPCP/SANDCLOCK compromise window.
Deploy honeytokens (fake AWS credentials) in S3 buckets, config files, and env vars with real-time alerting on GetCallerIdentity.
Ban consumption of skills from public marketplaces. Establish internal skill curation with code review equivalent to dependency vetting.