Claude Code Backdoor in Cursor: Check, Clean, Rotate
For about 11 hours on 29 October 2026 (2:27am to 1:35pm PT), Cursor's VS Code Extension Marketplace served a tampered build of the Claude Code extension (anthropic.claude-code) for Windows and macOS. Cursor says the build was not developed by Anthropic and, per The Hacker News and Help Net Security, reached at most 5,000 users. It appended an attacker SSH key labelled "svc-telemetry" to ~/.ssh/authorized_keys, installed persistence (a LaunchAgent on macOS, a scheduled task called SysMon on Windows), tried to open a reverse SSH tunnel to 134.209.82.225, and sent host details to that server. Check with: grep -qs svc-telemetry ~/.ssh/authorized_keys. Uninstalling the extension is not enough: run Cursor's remediation script, isolate the host and rotate credentials from a clean machine. How the build got into the marketplace has not been disclosed.
If you use Cursor and installed or auto-updated the Claude Code extension on 29 October 2026, check your machine now. For about 11 hours, Cursor's VS Code Extension Marketplace served a tampered build that added an attacker's SSH key, labelled svc-telemetry, to ~/.ssh/authorized_keys, installed persistence and sent host details to the attacker. Run grep -qs svc-telemetry ~/.ssh/authorized_keys. If the key is there, uninstalling is not enough: clean the machine with Cursor's script, isolate it and rotate credentials from a clean device.
Who this is for: developers who use Cursor, the security and IT teams who look after their laptops, and anyone who approves IDE extensions or AI coding agents for a team.
Independent analysis based on Cursor's security notice and remediation scripts, Anthropic's public statement, and reporting by The Hacker News, StepSecurity, Help Net Security and The Register. PlayCISO is not affiliated with Cursor or Anthropic. Facts are as reported on 30 October 2026 and may change.
The incident in plain words
What: a modified anthropic.claude-code extension in the Cursor VS Code Extension Marketplace. Cursor names versions 2.1.312 and 2.1.313 for Windows and macOS. Earlier reports named only 2.1.313.
When: about 2:27am to 1:35pm PT on 29 October 2026 (09:27 to 20:35 UTC).
Who: at most 5,000 users, according to Cursor as reported by The Hacker News and Help Net Security.
Who built it: not Anthropic, according to both Cursor and Anthropic.
Unknown: how the tampered build got into the marketplace. Neither company has said.
What happened
Cursor's notice says the extension "runs malicious code that attempts to install a persistent SSH backdoor." According to Cursor, it:
- Reported host and user details to the attacker: hostname, username, OS, architecture, home directory path, environment variable names, working directories, configured Git email and public IP. The Hacker News and StepSecurity say it sent the names (not values) of up to 40 environment variables containing KEY, TOKEN, SECRET, PASS, AWS or GCP.
- Added an attacker-controlled SSH key to
authorized_keys, tried to switch on the local Secure Shell (SSH) service, and tried to open a reverse SSH tunnel to134.209.82.225. - Persisted the tunnel with a LaunchAgent on macOS, or a scheduled task that tries to run as SYSTEM with a Startup-folder fallback on Windows. Background scripts retry the tunnel about every 60 seconds.
The loader ran as soon as the editor loaded the extension. StepSecurity says the payload "runs under plain Node.js" and needs no Claude conversation. Help Net Security reports it was an injected function at the top of the minified extension.js that runs before the extension's activate step. Jenn Gile of OpenSourceMalware told The Hacker News the bundle contained "a malicious 66-line loader inserted before the legitimate extension code," and that "anyone who has their Claude Code instance set to auto-update could have consumed the malware."
Could the attacker actually log in?
Probably not on most machines, but do not rely on that. Cursor says turning on the SSH service "requires admin rights, which the malicious extension does not have on most macOS and Windows hosts. On those hosts the step fails and the attacker could not have logged in through the tunnel." Phorion, quoted by Help Net Security, warns the backdoor still works if Remote Login is already on, or is switched on later. Cursor's own advice: "Follow the remediation steps below regardless." Cursor also says it worked with the hosting provider to take the attacker server offline, so the tunnel and the beacon no longer work.
Timeline
| When (2026) | What | Source |
|---|---|---|
| 27 Oct, 20:26 UTC | Clean 2.1.312 published to Open VSX | StepSecurity |
| 29 Oct, ~2:27am PT (09:27 UTC) | Tampered build available in the Cursor VS Code Extension Marketplace | Cursor |
| 29 Oct, ~1:35pm PT (20:35 UTC) | Cursor removes the version, blocks distribution and shuts the marketplace down "out of an abundance of caution" | Cursor |
| 29 Oct | Cursor audits access, finds no other tampered extensions, rotates its keys, rebuilds and restores the marketplace; attacker server taken offline with the hosting provider | Cursor |
| 29 Oct | Cursor publishes its security notice and remediation scripts for macOS and Windows | Cursor |
| 30 Oct, 01:07 UTC | Clean 2.1.314 published to Open VSX | StepSecurity |
| 30 Oct | Anthropic's Felix Rieseberg says on X it "wasn't a compromise of Anthropic's systems or employee laptops" | The Register |
| 30 Oct, 11:30am PT | Cursor updates its indicators and names both 2.1.312 and 2.1.313 as affected | Cursor |
Am I affected?
You are in scope if you installed or updated Anthropic.claude-code from the Cursor marketplace on macOS or Windows between 2:27am and 1:35pm PT on 29 October 2026. Auto-update counts. The quickest check is the SSH key. These commands are copied from Cursor's notice.
macOS (Terminal):
grep -qs svc-telemetry ~/.ssh/authorized_keys && echo "svc-telemetry key found" || echo "No key found; machine not impacted"
Windows (PowerShell):
$files = "$HOME\.ssh\authorized_keys", "C:\ProgramData\ssh\administrators_authorized_keys" | Where-Object { Test-Path $_ }
if ($files -and (Select-String svc-telemetry $files)) { "svc-telemetry key found" } else { "No key found; machine not impacted" }
Cursor: "If the key is found, your machine is impacted."
Deeper checks
The commands below are built from the indicators and file paths in Cursor's notice and remediation scripts. A hit on any of them means the payload ran.
macOS:
# Tampered extension on disk (the bad bundle keeps the real version number, so match on content)
grep -lF svc-telemetry ~/.[!.]*/extensions/anthropic.claude-code-*/extension.js 2>/dev/null
# Persistence and dropped files
ls -la ~/Library/LaunchAgents/com.apple.sysmond.plist ~/.config/.smt ~/.config/.smtk 2>/dev/null
ls -la "$TMPDIR"/.stk_* /tmp/.stk_* 2>/dev/null
# Running tunnel processes
pgrep -fl '/\.stk_[0-9a-f]{10}|/\.config/\.smtk|/\.config/\.smt'
Linux: Cursor lists the affected builds as Windows and macOS only, but its indicator list also includes Linux artefacts (a cron @reboot entry running ~/.config/.smt and /tmp/.stk_<10 hex>). If you run Cursor on Linux, a quick look costs nothing:
grep -qs svc-telemetry ~/.ssh/authorized_keys && echo "svc-telemetry key found" || echo "No key found"
crontab -l 2>/dev/null | grep -F '.config/.smt'
ls -la ~/.config/.smt ~/.config/.smtk /tmp/.stk_* 2>/dev/null
Windows:
# Run in PowerShell (as Administrator to see every profile)
Get-ScheduledTask -TaskName SysMon -ErrorAction SilentlyContinue
Test-Path "$env:USERPROFILE\.config\smt.cmd", "$env:USERPROFILE\.config\smtk", "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\sysmon.cmd"
Get-ChildItem "$env:TEMP" -Filter .stk_* -Force -ErrorAction SilentlyContinue
Get-ChildItem "$HOME\.*\extensions\anthropic.claude-code-*\extension.js" -Force -ErrorAction SilentlyContinue | Select-String -SimpleMatch svc-telemetry -List
Across a fleet: search endpoint and network telemetry for the indicators below. Cursor's notice says to search "endpoint, network, and extension-installation telemetry."
Indicators of compromise
All from Cursor's notice unless marked. Defang before pasting into tickets.
| Type | Indicator |
|---|---|
| Extension | anthropic.claude-code 2.1.312 and 2.1.313 (Windows, macOS) from the Cursor marketplace |
| SSH key comment | svc-telemetry |
| Unauthorised key fingerprint | SHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk |
| Reverse-tunnel key fingerprint | SHA256:KOAU57+ZG6u3MG4WwzPzPX2O5YEe9qdOC1Bl+6MVyDQ |
| Attacker IP | 134[.]209[.]82[.]225: reverse SSH as tunnel@ on TCP 22; beacon hxxp://134[.]209[.]82[.]225:8099/beacon (HTTP POST); loopback attempt to 127.0.0.1:8099/beacon |
Payload extension.js | SHA-256 ecb58cb29078d9646ad1dcdbe51526f2d9cfea06be5fb2ab183e8ecc3ab6bf15; contains the strings 134.209.82.225 and svc-telemetry |
| VSIX 2.1.312 (SHA-256) | darwin-arm64 fcbb327e38e61c4fec795e0d0591f52cd1014b813d20a5912104953c3a17c364; win32-x64 3de1722901165769893bef57c72594e9a54459faa23f3091b136b79966edd081 |
| VSIX 2.1.313 (SHA-256) | darwin-arm64 80402fdcad8799285fd93044976973ca000da7995fb93363f819bb8e4f84ee6c; win32-x64 6786ec90cbd45949695bd7805c9fbb26cfc91bc5fc897de0183d9bcb9cb21731 |
| macOS files | ~/Library/LaunchAgents/com.apple.sysmond.plist (label com.apple.sysmond); ~/.config/.smt, ~/.config/.smtk; $TMPDIR/.stk_<10 hex> |
| Linux files | ~/.config/.smt, ~/.config/.smtk; /tmp/.stk_<10 hex>; cron @reboot /bin/sh "<HOME>/.config/.smt" |
| Windows files | %USERPROFILE%\.config\smt.cmd, %USERPROFILE%\.config\smtk, %TEMP%\.stk_<10 hex>; scheduled task SysMon; fallback %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\sysmon.cmd |
| Command lines | ssh -N -R '*:0:localhost:22', autossh -M 0, schtasks /create /tn SysMon, systemsetup -setremotelogin on, Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 |
A note on hashes: StepSecurity's early write-up labelled the fcbb327e… and 3de17229… VSIX files as 2.1.313. Cursor's updated notice files those two under 2.1.312 and lists separate 2.1.313 hashes. Use Cursor's table. Lookups to ifconfig.me and api.ipify.org are legitimate services; Cursor says "access alone is not an indicator."
What to do if you are affected
This order follows Cursor's notice, with the extra points StepSecurity and Phorion make.
- Isolate the host. Cursor: "Isolate hosts showing evidence of payload execution or backdoor installation." If you have an incident process, open a ticket and keep evidence before cleaning up (StepSecurity: "collect evidence, then remove persistence").
- Run Cursor's remediation script. It removes the tampered extension, the persistence, running tunnel processes and the attacker's key, and exits non-zero if anything is left. Download remediate-macos.sh and run it as the affected user, not as root:
On Windows, download remediate-windows.ps1, close all editors, and run it from PowerShell opened with Run as Administrator:bash remediate-macos.sh
Read any script before you run it. Both are short.powershell -ExecutionPolicy Bypass -File .\remediate-windows.ps1 - Do not stop at uninstalling. Cursor: "Uninstalling the extension may not be sufficient — the payload drops standalone persistence scripts that keep running."
- Rotate credentials and sessions the machine could reach, from a trusted system: source control, CI/CD, cloud, SSH and package registry tokens (StepSecurity's list), plus anything in environment variables. Cursor: "The limited env-var collection does not rule out later credential access over the backdoor."
- Hunt for logins. Phorion (via Help Net Security) suggests checking SSH logs for logins from localhost using the
svc-telemetrykey. In sshd logs an accepted key shows its fingerprint, so search for0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk. If the tunnel ever connected, StepSecurity and Phorion recommend rebuilding the machine. - Update the extension to a clean release. The Hacker News reports Anthropic published 2.1.314 to Open VSX and the Microsoft VS Code Marketplace; Cursor has not named a fixed version in its notice.
What this means for teams that approve IDE extensions and AI coding agents
The extension carried the real publisher ID and a real-looking version number. Publisher name checks, star ratings and "official" badges would not have caught it. Five practical lessons:
- An AI coding extension is privileged software. It runs with the developer's account on the machine that holds their SSH keys, cloud credentials and source code. Approve and monitor it like an endpoint agent, not like a colour theme.
- Know which marketplace each editor trusts. VS Code forks such as Cursor do not use Microsoft's marketplace; Help Net Security notes Microsoft's terms limit it to Microsoft's products. Your approval list should name the editor, the marketplace and the publisher, because "the Claude Code extension" means different files in different places.
- Auto-update is the delivery mechanism. Gile's point: anyone set to auto-update could have pulled it. For extensions with broad reach, pin versions on managed machines and let updates through after a short delay or review. Check what your editor supports: VS Code has settings for turning off extension auto-update and for allow-listing extensions, and forks may or may not honour them.
- Watch the things a backdoor has to touch. This one had to edit
authorized_keys, create a LaunchAgent, cron entry or scheduled task, and connect to a raw IP over plain HTTP on port 8099. File-integrity alerts onauthorized_keysand default-deny egress from developer machines would each have flagged it. - Keep developer credentials short-lived. If a laptop is backdoored, short-lived, scoped tokens limit what an attacker can take. Long-lived keys in environment variables are exactly what this beacon was counting.
If you keep an AI Bill of Materials, or AIBOM, add the AI coding tools and their extension versions to it, so the next advisory is a lookup, not a hunt. See AIBOM in incident response.
Put it to work
- Agent Plugin & Skill Supply-Chain Lab: practise triaging third-party plugins, skills and MCP servers by risk (unvetted, unpinned auto-update, over-permissioned) and the control that fits.
- Identity Compromise Response Checklist: work through scope, revoke and rotate when a machine with real credentials is backdoored.
- Non-Human Identity Risk Checklist: score the API keys, CI tokens and service accounts a developer laptop can reach, and plan the move off static keys.
- AI Incident Response Checklist: a response checklist for incidents involving AI tools and agents.
FAQ
Was Anthropic hacked?
Both companies say no. Cursor's notice says the malicious versions "were not developed by Anthropic". Anthropic's Felix Rieseberg wrote on X, as quoted by The Register: "it wasn't a compromise of Anthropic's systems or employee laptops" and "A malicious actor used access to Cursor's marketplace to publish a tampered copy of the Claude Code extension, which we didn't build or publish." Neither company has said how the attacker got that access.
Which versions of the Claude Code extension are affected?
Cursor's notice, updated on 30 October 2026 at 11:30am PT, names 2.1.312 and 2.1.313 for Windows and macOS from the Cursor marketplace. Earlier reports named only 2.1.313. Cursor's remediation script notes the tampered bundle keeps the real version number, so check the file contents, not the version label. The Hacker News reports Anthropic published a clean 2.1.314.
How do I check if my machine is affected?
Run grep -qs svc-telemetry ~/.ssh/authorized_keys && echo "svc-telemetry key found" || echo "No key found; machine not impacted" on macOS or Linux, or the PowerShell check above on Windows. Then look for the persistence files listed in the indicators table.
Does uninstalling the extension remove the backdoor?
No. Cursor says the payload "drops standalone persistence scripts that keep running." Run Cursor's remediation script, rotate credentials from a trusted machine and consider rebuilding.
Were VS Code, Open VSX or the official Claude Code install affected?
Anthropic says "The versions on our official channels are not affected, and this only impacts Cursor users." Cursor says it has no evidence other versions or the official distribution are affected. Reports disagree about Open VSX: StepSecurity and Phorion say 2.1.313 appeared there, while The Hacker News corrected its story to point at the Cursor VS Code Marketplace and Manifold Security's Ax Sharma disputes the Open VSX reports. StepSecurity says Open VSX and the Microsoft Marketplace no longer serve 2.1.313.
What data did the backdoor send to the attacker?
Hostname, username, OS, architecture, home directory, environment variable names, working directories, Git email and public IP (Cursor). The Hacker News and StepSecurity say the variable names were limited to up to 40 that contain KEY, TOKEN, SECRET, PASS, AWS or GCP: names, not values. A working backdoor could still reach the values, so rotate.
Sources
- Cursor: Security notice, malicious version of Anthropic.claude-code (2.1.312 and 2.1.313) (29 Oct 2026, updated 30 Oct 11:30am PT), with remediate-macos.sh and remediate-windows.ps1
- The Register: Anthropic says the compromise was not on its side (quotes Felix Rieseberg's post on X)
- The Hacker News: Official Claude Code extension on Cursor Marketplace trojanized
- StepSecurity: Trojanized Claude Code extension delivered a persistent SSH backdoor
- Help Net Security: Claude Code extension poisoned with persistent SSH backdoor (Phorion and Manifold Security findings)
This article is educational guidance for security and engineering leaders, not legal advice or a forensic report. Always check Cursor's notice for the latest indicators before acting.
Ready to practise the decisions these articles describe?
Run your first War Room free →One run free with a free account · more runs with Pro