Trojanized Claude Code update in Cursor's marketplace planted an SSH backdoor — up to 5,000 installs, and removing the extension isn't enough
Developers who updated Claude Code inside Cursor on October 29 may have installed a backdoor instead. A tampered build served through Cursor's extension marketplace tried to add an attacker-controlled SSH key to affected machines and open a reverse tunnel to the attacker's server. Cursor says at most 5,000 users installed it — and warns that simply removing the extension does not remove the persistence the payload drops.
- Who and when: a maliciously modified Claude Code extension was served through Cursor’s VS Code Extension Marketplace between about 2:27 a.m. and 1:35 p.m. PT on October 29, 2026; Cursor updated its security notice on October 30, 2026.
- What it was: builds numbered 2.1.312 and 2.1.313 under Anthropic’s legitimate publisher identity,
anthropic.claude-code; not developed by Anthropic. The analysed build, 2.1.313, was never an official Anthropic release. - How many: at most 5,000 users installed the malicious version, according to Cursor. No other extensions were found tampered with.
- What it did: a 66-line loader in
extension.jscollected host and user details, added asvc-telemetrySSH key toauthorized_keys, tried to enable the local SSH service and open a reverse tunnel retrying about every 60 seconds, installed persistence, and beaconed details to the attacker’s server. - The limits and the fix: the SSH-enablement step would fail on most macOS and Windows hosts for lack of admin rights; the attacker’s server has been taken offline. Anthropic published clean version 2.1.314 on October 30. Affected users must check for the key and run Cursor’s remediation scripts; uninstalling alone is insufficient.

Between about 2:27 a.m. and 1:35 p.m. Pacific Time on October 29, 2026, a maliciously modified version of Anthropic’s Claude Code extension was available in the Cursor VS Code Extension Marketplace, according to Cursor’s security notice. It carried the extension’s legitimate publisher identity, anthropic.claude-code, and was served under the numbers 2.1.312 and 2.1.313 for Windows and macOS — so users with automatic updates could receive it as a routine update rather than a new install. The published code analysis examined version 2.1.313, a version number Anthropic never released on its official channels: Anthropic’s releases jump from 2.1.312 on October 27 to a clean 2.1.314 on October 30. Cursor says the malicious builds were not developed by Anthropic, that at most 5,000 users were affected, and that its audit found no other extensions tampered with. The extension on Open VSX, the Microsoft VS Code Marketplace and the npm package were confirmed clean in the published analysis. Cursor updated its notice on October 30 to clarify the affected versions.
Eleven hours as an ordinary update#
Cursor removed the malicious versions on detection, then shut the whole marketplace down, audited access, rotated its keys, rebuilt the marketplace and brought it back online. It also worked with the hosting provider to take the attacker’s server offline, so the reverse tunnel and beacon no longer function, according to the notice.
What the payload does#
The tampering was a 66-line loader inserted before the legitimate code in the extension’s main JavaScript file, extension.js, according to the analysis by OpenSourceMalware detailed by Ostorlab. Because it runs when the extension module loads — on editor startup and when the extension’s webview opens — no further action from the user was needed. The loader collects host and user details (hostname, username, operating system, architecture, home directory, configured Git email and public IP, plus the names — not the values — of up to 40 environment variables matching terms such as KEY, TOKEN and SECRET), appends an attacker-controlled Ed25519 public key labelled svc-telemetry to the user’s authorized_keys file, tries to switch on the local SSH service, and opens a reverse SSH tunnel to the attacker’s server, retrying roughly every 60 seconds. It also installs persistence: a LaunchAgent on macOS, a cron entry on Linux, and a scheduled task on Windows, plus a beacon that posts the collected details to the attacker’s server.

The tunnel step mostly failed — the rest still landed#
The most alarming step mostly failed. Enabling the local SSH service needs administrator rights the extension does not normally have, and Cursor says errors in the malicious code meant that step would fail outside highly unusual circumstances, such as Cursor itself running with administrator privileges. Without a listening SSH service, the tunnel had nothing to connect to on those machines. But the key, the persistence and the beacon still landed, and Cursor tells affected users to follow its remediation steps regardless. On a host where the SSH service did start, an operator holding the matching private key could have connected through the tunnel and run commands as the victim’s user account, the analysis notes. No second-stage downloader was found.
How it got in — and what is still unknown#
How the tampered build reached Cursor’s marketplace has not been established publicly. The method attackers used to introduce the unauthorised update remains unclear, and Anthropic has denied that its own systems were compromised. Felix Rieseberg, a member of Anthropic’s technical staff, said Anthropic was working with Cursor on the incident but that it “wasn’t a compromise of Anthropic’s systems or employee laptops,” and that a malicious actor had used access to Cursor’s marketplace to publish a tampered copy Anthropic did not build or publish, The Register reported. Cursor told OpenSourceMalware the extension in its marketplace “experienced some form of compromise” — which places the incident in Cursor’s distribution path rather than in Anthropic’s release infrastructure, according to Ostorlab’s account.
No CVE has been assigned and the incident was not in CISA’s Known Exploited Vulnerabilities catalogue as of October 30, according to Ostorlab. Anthropic published the clean 2.1.314 build to Open VSX and the Microsoft VS Code Marketplace on October 30, so extensions from those marketplaces update to a clean build normally.
What to do if you updated that day#
The check that matters is the key. On macOS or Linux, run grep -qs svc-telemetry ~/.ssh/authorized_keys && echo "svc-telemetry key found" || echo "No key found; machine not impacted" — the command from Cursor’s notice, which also gives the Windows PowerShell equivalent and remediation scripts for macOS and Windows.

If the key is found, treat the machine as compromised: isolate it, preserve evidence, remove the extension, the persistence mechanisms and any running tunnel processes using Cursor’s scripts, rotate credentials and sessions from a clean system, and assess whether the host should be rebuilt. Uninstalling the extension alone is not enough, because the payload drops standalone persistence scripts that keep running. A missing key does not prove the extension never ran — it proves the key step did not complete — so searching for the other published indicators, including the persistence files, the scheduled task or LaunchAgent, and connections to the attacker’s address (134.209.82[.]225), is part of the check.
Sources: Cursor’s security notice, Ostorlab’s write-up of OpenSourceMalware’s code analysis, and The Register’s report of Anthropic’s response. Images are AI-generated editorial illustrations.
Frequently asked questions
Am I affected if I use Claude Code in VS Code rather than Cursor?
No, on the published evidence. The malicious build was distributed only through Cursor’s extension marketplace; the analysis confirmed the npm package, the Open VSX extension and the Microsoft VS Code Marketplace extension clean. You are only in scope if you installed or updated Claude Code from Cursor’s marketplace between about 2:27 a.m. and 1:35 p.m. PT on October 29, 2026.
Why isn’t uninstalling the extension enough?
The payload drops standalone persistence — a LaunchAgent on macOS, a cron entry on Linux, a scheduled task on Windows — plus the attacker’s SSH key in authorized_keys. Those keep running after the extension is gone, so Cursor’s remediation scripts, which remove the extension, the persistence, the tunnel processes and the key, are the required cleanup.
Could the attacker actually log in to affected machines?
Only where the local SSH service started. On most macOS and Windows hosts the enablement step failed because it needs administrator rights and the malicious code contained errors, so the tunnel had no SSH service to reach. The key, persistence and beacon still landed on those hosts, and where the service did start, an operator with the matching private key could connect through the tunnel.