Brief · Builders
The Claude Code Extension in Cursor's Marketplace Was Backdoored for 11 Hours
For about 11 hours on Oct 29, anyone who installed or updated the Claude Code extension from Cursor's own extension marketplace could have picked up a version that plants an SSH backdoor. Cursor says the bad build, Anthropic.claude-code 2.1.313, was live from about 2:27am to 1:35pm PT (5:27am to 4:35pm ET), that Anthropic didn't develop it, and that "at most 5,000 users" were affected. Phorion, a security vendor that sells detection for this kind of thing, published a teardown on Oct 30. The attacker's server is offline now, but what the extension left behind survives an update or uninstall, so this is a cleanup job, not a patch.
What Cursor and Phorion found
Cursor's notice is the official word, and Phorion agrees on the core. The extension adds an attacker's SSH key, labeled svc-telemetry, to ~/.ssh/authorized_keys, tries to switch on the machine's SSH service, and tries to open a reverse SSH tunnel to 134.209.82[.]225. It sets up persistence so the tunnel retries roughly every 60 seconds, and it sends a host report by plain HTTP POST to /beacon on port 8099.
Per Phorion, the code sits at the front of extension.js and runs "as soon as Node loads the file," so you never have to open a Claude chat, and OpenSourceMalware says the same. Phorion says the tunnel loop keeps going after you close the editor.
Persistence depends on the operating system, so no single machine gets all three:
- macOS: a LaunchAgent at
~/Library/LaunchAgents/com.apple.sysmond.plist(labelcom.apple.sysmond) that runs/bin/sh ~/.config/.smt, plus~/.config/.smtkand a tunnel key at$TMPDIR/.stk_<10 hex>. - Windows: a scheduled task called
SysMonthat tries to run as SYSTEM, with a fallback script at%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\sysmon.cmd, plussmt.cmdandsmtkin%USERPROFILE%\.configand a tunnel key at%TEMP%\.stk_<10 hex>. - Linux, per researchers, not Cursor: an
@rebootentry in your crontab pointing at the same~/.config/.smtscript, per Phorion and OpenSourceMalware. Phorion also says a bug in the crontab check "can wipe existing user cron jobs on repeat runs," so the cleanup might include putting your own jobs back.
The beacon is where the "names, not values" part comes in. Cursor says it collects hostname, username, OS, architecture, home directory, working directories, your configured Git email, your public IP and the names of environment variables. Phorion and OpenSourceMalware narrow that last one down: up to 40 variable names that match KEY, TOKEN, SECRET, PASS, AWS or GCP, which in Phorion's words gives the operator "a quick inventory of which cloud credentials or API tokens live on the machine."
The good news is that the scariest step mostly failed. Cursor says turning on SSH needs admin rights the extension doesn't have on most macOS and Windows machines, and that "due to errors in the malicious code" it would fail unless Cursor had been started as an administrator. On those machines the attacker couldn't log in through the tunnel. Phorion traces the macOS failure to a bug in the Remote Login check, but says not to rely on it, and Cursor says to clean up regardless because the key, the persistence and the host report still land.
Cursor says it pulled the version on detection, shut down and rebuilt the whole marketplace, rotated its keys, found no other tampered extensions, and got the hosting provider to take the attacker's server offline.
What nobody has confirmed yet
Nobody has said how the bad package got into Cursor's marketplace or who's behind it. Cursor's notice puts the incident in its own marketplace and doesn't mention Open VSX. Per OpenSourceMalware, citing Cursor, the extension "experienced some form of compromise" in the Cursor Marketplace and "this is the origin of the malicious Claude Code extension, not Open-VSX," and OpenSourceMalware's update lists the npm package, the Open VSX extension and Microsoft's VS Code extension as not malicious. The Hacker News has corrected its Open VSX attribution. Coralogix's Oct 30 advisory still said Open VSX when I checked this morning, and so did StepSecurity's write-up when we checked earlier. OpenSourceMalware's own write-up still says the "distribution source" remains "unverified," so the Cursor Marketplace origin is the best-supported account, not a confirmed one.
Anthropic hasn't said anything that I could find as of Oct 30, and Reuters reported that Anthropic "did not immediately respond to a request for comment." There's nothing on its status page, its news page or the Claude Code GitHub security advisories, and the Claude Code changelog goes straight from 2.1.312 to 2.1.314 with nothing about security in the 2.1.314 notes. Phorion says Cursor also pulled 2.1.313 from npm and the VS Code Marketplace, which no other source says. When I checked on Oct 30, npm, Open VSX and Microsoft's marketplace all showed 2.1.314 as the latest with no 2.1.313 listed at all, and Anthropic's GitHub repo has no 2.1.313 release or tag either, but no vendor has said why, or whether a clean 2.1.313 was ever published there. Cursor says it has "no evidence that other versions of the extension or the official distribution are affected."
Cursor hasn't confirmed any of the Linux details. They come from researchers reading the code (Phorion and OpenSourceMalware), and the cron-wipe bug is Phorion's alone. Cursor's indicators list only a macOS (darwin-arm64) and a Windows (win32-x64) build, and its remediation scripts only cover those two, so nobody has confirmed whether a Linux build went out. Phorion's claim that inbound logins over the tunnel would show up as coming from localhost is also Phorion's alone.
Why an extension is such a good place to hide
My opinion: this is the extension version of the LiteLLM trojan, and it worked for the same reason. People install the official package from the official store, auto-update does the rest, and nobody reads extension.js. The extension kept working normally too, and nobody uninstalls a coding assistant that's behaving fine.
Cursor's response was good: a notice with a window, a user count, indicators and cleanup scripts on the same day. What I'd still like is how it got in, since "we rotated our keys" invites the question of which keys, and some word from Anthropic, whose name is on the package.
The score
I'd call it a 4, act this week. If you used Cursor with the Claude Code extension on Oct 29, check today, because a planted SSH key and a startup task are a real backdoor even if the tunnel never connected. The window was short, the cap is 5,000 users, the attacker's server is down and, per Cursor, the login step failed on most macOS and Windows machines, which is why this isn't a 5. If you don't use Cursor, or you never updated the extension that day, this is mostly a reason to look at your extension controls.
What to do:
-
Find out whether you ever had 2.1.313.
- Why: Cursor's cleanup steps are for anyone who "installed or updated to Anthropic.claude-code 2.1.313" from its marketplace between 2:27am and 1:35pm PT on Oct 29.
- How: look in your editor's extensions folder for
anthropic.claude-code-2.1.313-darwin-arm64oranthropic.claude-code-2.1.313-win32-x64, the folder names in Cursor's indicators. In VS Code,code --list-extensions --show-versionslists installed extensions with versions, per the VS Code command-line docs. Cursor's docs that I checked don't document an equivalent for thecursorcommand. If you've already updated, the folder may be gone, so in my view the key check below matters more.
-
Check for the svc-telemetry key.
- Why: Cursor says that if the key is found, "your machine is impacted," and the key stays put after the extension is gone.
- How: on macOS, Cursor's check is
grep -qs svc-telemetry ~/.ssh/authorized_keys && echo "svc-telemetry key found" || echo "No key found; machine not impacted". On Windows, use the PowerShell check in Cursor's notice, which also coversC:\ProgramData\ssh\administrators_authorized_keys. Phorion suggests hunting by fingerprint too, and Cursor lists it asSHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk.
-
Look for the persistence and the tunnel.
- Why: Phorion says "uninstalling the extension alone won't remove the backdoor," and Cursor says the dropped scripts "keep running."
- How: on macOS, check for
~/Library/LaunchAgents/com.apple.sysmond.plist,~/.config/.smt,~/.config/.smtkand$TMPDIR/.stk_*. On Linux, runcrontab -l(it lists your crontab, per its man page) and look for an@rebootline that runs~/.config/.smt, and check your own jobs are still there. On Windows,schtasks /query /tn SysMonshows whether the task exists, per Microsoft's schtasks docs, and check forsysmon.cmdin your Startup folder, and forsmt.cmdandsmtkin%USERPROFILE%\.configand%TEMP%\.stk_*. For a live tunnel, look in your process list or EDR forsshorautosshwith-R '*:0:localhost:22', and in network logs for SSH or port 8099 traffic to 134.209.82[.]225. Both come from Cursor's indicators.
-
Isolate and clean the machine, not just the editor.
- Why: removing the extension leaves the key, the scripts and the startup entries behind.
- How: Cursor's steps are to isolate hosts that show the backdoor, run its remediation script, and "assess whether the host should be rebuilt." If you have a security team, have them collect evidence first, because the scripts delete the files. OpenSourceMalware advises removing the extension and persistence "only after collecting evidence." Also check your SSH logs for logins with the
svc-telemetrykey. Phorion says they'd appear to come from localhost (127.0.0.1or::1), and a real login changes this from cleanup to a full incident. On macOS, runremediate-macos.shfrom Cursor's notice as the affected user, not root. On Windows, runremediate-windows.ps1from PowerShell opened as Administrator. Cursor says both exit with a non-zero status if anything remains. There's no Cursor script for Linux, so follow Phorion's manual steps: kill the retry loop and thessh/autosshprocesses, remove the cron entry,~/.config/.smt,.smtk, thesvc-telemetrykey and/tmp/.stk_*, and check SSH wasn't switched on.
-
Rotate secrets, starting with the ones whose names were sent.
- Why: Cursor says to "rotate credentials and sessions accessible from affected hosts, from a trusted system," because the limited env-var collection "does not rule out later credential access over the backdoor." Phorion ties rotation to evidence that SSH was enabled or someone logged in. In my view the names matter even if the values never left: a variable called
AWS_SECRET_ACCESS_KEYorSTRIPE_API_KEYtells the attacker which accounts to go after next, so those go first. That's my reasoning, not Cursor's or Phorion's. - How: from a clean machine, rotate the keys and tokens that were in your environment and sign out that machine's sessions. Our infostealers brief has where the AI tool logins live.
- Why: Cursor says to "rotate credentials and sessions accessible from affected hosts, from a trusted system," because the limited env-var collection "does not rule out later credential access over the backdoor." Phorion ties rotation to evidence that SSH was enabled or someone logged in. In my view the names matter even if the values never left: a variable called
-
Put a delay and an allowlist on extension updates.
- Why: the bad version was only up for about 11 hours. In my view, a cooldown of 12 hours or more would very likely have kept it off your machines, and a pinned version would have refused a release Anthropic never shipped. That's my suggestion, not vendor guidance.
- How: in Cursor, team admins can set a Marketplace Install Cooldown in hours, which Cursor describes as "a buffer against short-lived malicious uploads," and individuals can set
extensions.installCooldownHoursthemselves. Cursor'sextensions.allowedsetting, pushed from the team dashboard or by MDM asAllowedExtensions, can allowlist publishers and pin specific versions. VS Code has the sameextensions.allowedsetting with version pinning. For a team, treat it like any other software install (Business checklist #7) and push the settings centrally.
Want the next one?
One email, weekly-ish. The week's briefs, how worried to be, and what to do about it. No doom.
Subscribe on Beehiiv ↗Free. Opens Beehiiv in a new tab. Unsubscribe whenever, I won't be offended.Sources
- Cursor: Security notice, malicious version of Anthropic.claude-code 2.1.313 identified in the Cursor Extension Marketplace (Oct 29, 2026)
- Phorion: Official Claude Code Extension Compromise, Security Advisory (Oct 30, 2026)
- OpenSourceMalware: Trojanized Claude Code Extension Plants an SSH Backdoor (Oct 30, 2026)
- Coralogix: Threat Advisory, Trojanized Claude Code Extension: SSH Backdoor (Oct 30, 2026)
- StepSecurity: Trojanized Claude Code Extension Delivered Persistent SSH Backdoor to Developer Machines (Oct 2026)
- The Hacker News: Official Claude Code Extension on Cursor Marketplace Trojanized with Persistent SSH Backdoor (Oct 2026)
- Reuters via CNA: Cursor says up to 5,000 users affected by tampered Claude Code extension (Oct 30, 2026)
- Anthropic: Claude Code changelog
- Anthropic: Claude Code security advisories
- Anthropic: Claude status
- npm registry: @anthropic-ai/claude-code
- Open VSX: anthropic.claude-code
- Visual Studio Marketplace: Claude Code for VS Code
- VS Code docs: Command line interface
- VS Code docs: Manage extensions in enterprise environments
- Cursor docs: Extensions
- Cursor docs: Identity and Access Management
- Cursor docs: Deployment Patterns
- man7.org: crontab(1)
- Microsoft Learn: schtasks query