Back to Blog

Trojanized Claude Code Extension Delivered Persistent SSH Backdoor to Developer Machines

On October 29, 2026, a trojanized version (2.1.313) of the official Claude Code VS Code extension was published to Cursor's extension marketplace, reaching up to 5,000 Cursor users during an 11-hour window. Sandbox and registry analysis confirmed that on load it planted an attacker SSH key, set up persistence on each OS, opened a reverse SSH tunnel to attacker infrastructure, and sent host reconnaissance data over plain HTTP.
Rohan Prabhu
View LinkedIn

October 30, 2026

Share on X
Share on X
Share on LinkedIn
Share on Facebook
Follow our RSS feed
Table of Contents

On October 29, 2026, version 2.1.313 of the Claude Code VS Code extension, anthropic.claude-code, was published to Cursor's extension marketplace carrying a malicious loader embedded in its extension.js bundle. Cursor reports that at most 5,000 of its users received the trojanized build during an 11-hour window. We verified the payload's behavior through sandbox analysis and independent registry analysis: on load, the extension planted an attacker SSH key, installed per-OS persistence, opened a reverse SSH tunnel to attacker infrastructure, and beaconed host reconnaissance over plain HTTP.

Update (October 30, 2026): Anthropic has clarified the scope of this incident. Per Felix Rieseberg of Anthropic, this was not a compromise of Anthropic's systems or employee laptops. A malicious actor used access to Cursor's marketplace to publish a tampered copy of the Claude Code extension, which Anthropic did not build or publish. The versions on Anthropic's official channels are not affected, and this only impacts Cursor users. Anthropic has also confirmed that 2.1.313 was never published to Open-VSX, the Microsoft Visual Studio Marketplace, or any of its official hosts, and that it skipped to 2.1.314 to avoid confusion. We have corrected the sections below, which previously described Open-VSX as the origin and implied the build had been removed from the Microsoft Marketplace.
Update (October 30, 2026, 11:30 am PT): Separately, Cursor's notice identifies malicious builds of both 2.1.312 and 2.1.313 in its marketplace for Windows and macOS. The 2.1.312 build served by Open-VSX is a different artifact: we downloaded and verified it clean. Exposure therefore covers Cursor users who installed 2.1.312 or 2.1.313 from Cursor's marketplace during the window.

The malicious build is the official extension in every respect except one: extension.js carries a small self-contained loader embedded in the legitimate bundle. The malicious file (SHA-256 ecb58cb29078d9646ad1dcdbe51526f2d9cfea06be5fb2ab183e8ecc3ab6bf15, 3,692,922 bytes) is roughly 7 KB larger than the preceding clean release, and sandbox telemetry shows the payload executes under plain Node.js with no VS Code APIs: loading the extension module is enough. No Claude conversation is needed, and no package-manager lifecycle hooks are involved. This was not an Anthropic release: the build repackages the official extension, and per Cursor's notice the malicious version was not developed by Anthropic.

ACTION REQUIRED if anthropic.claude-code 2.1.313, or 2.1.312 installed from Cursor's marketplace, was present on any machine between October 29, 09:27 UTC and October 30: treat it as compromised. Check ~/.ssh/authorized_keys for the svc-telemetry key below, remove the persistence artifacts, and rotate credentials reachable from that machine. Uninstalling the extension alone is not sufficient: the loader drops standalone persistence that survives removal.

Background: the extension and its distribution paths

The Claude Code VS Code extension is Anthropic's official IDE integration, with tens of millions of lifetime downloads on Open-VSX alone. Open-VSX is the open extension registry used by default or by option in VSCodium, Cursor, Windsurf, and Gitpod; it is separate from the Microsoft Visual Studio Marketplace. The tampered build appeared in Cursor's marketplace under the legitimate identifier, not a typosquat. Per Anthropic, the actor used access to Cursor's marketplace; Anthropic's systems, employee laptops, and official channels were not compromised.

Per Cursor's updated notice, exposure covers Cursor users who installed 2.1.312 or 2.1.313 from its marketplace during the window. Anthropic has confirmed 2.1.313 was never published to Open-VSX or the Microsoft Marketplace, and the 2.1.312 build served by Open-VSX is clean (verified by us): the malicious 2.1.312 exists only in Cursor's marketplace, a different artifact despite the shared version number. After the incident, Cursor replaced the malicious 2.1.312 with clean bytes: the build its marketplace serves today is clean (we downloaded and verified it post-incident), so current installs are not re-infecting.

We independently confirmed the registry state: Open-VSX now serves 2.1.312 and 2.1.314 but returns "not found" for 2.1.313 across the API and its content CDN, and the Microsoft Marketplace download endpoint returns 404 for 2.1.313 while serving both neighbors, consistent with Anthropic's statement that 2.1.313 was never published there and that the next release was numbered 2.1.314. We downloaded the 2.1.312 (October 27) and 2.1.314 (October 30) builds from Open-VSX and verified both contain none of the indicators below.

Attack flow

Oct 27, 20:26 UTC
Clean 2.1.312 published to Open-VSX
By Oct 29, ~09:27 UTC
Trojanized 2.1.313 live in Cursor's marketplace (2:27am PT, per Cursor); per Cursor's update, a malicious 2.1.312 was served in the same window
Oct 29, 09:27 to 20:35 UTC
Exposure window for 2.1.312 and 2.1.313 from Cursor's marketplace; at most 5,000 Cursor users received it (Cursor's initial figure)
Oct 29, 20:35 UTC (1:35pm PT)
Cursor removes the version and takes its marketplace fully offline; later audits find no other extensions tampered with; keys rotated
Oct 30, 01:07 UTC
Clean 2.1.314 published to Open-VSX
Oct 30
The C2 at 134.209.82.225 is taken offline with the cooperation of its hosting provider, per Cursor

Indicators of Compromise

Type Value Significance
Malicious version anthropic.claude-code@2.1.313 Presence confirms exposure
C2 134.209.82.225 Reverse tunnel (TCP 22, user tunnel) and HTTP beacon (8099); now offline
Beacon http://134.209.82.225:8099/beacon POST of host recon JSON
Local beacon attempt 127.0.0.1:8099/beacon (HTTP POST, loopback) Loopback beacon attempt by the loader
SSH key (authorized_keys) SHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk, comment svc-telemetry Interactive access implant
SSH key (tunnel identity) SHA256:KOAU57+ZG6u3MG4WwzPzPX2O5YEe9qdOC1Bl+6MVyDQ Embedded private key dropped as .stk_<10 hex>
Malicious VSIX 2.1.312 (darwin-arm64) fcbb327e38e61c4fec795e0d0591f52cd1014b813d20a5912104953c3a17c364 (MD5 e0d64d53e802a0217ba6f0e656ed2f20) Per Cursor
Malicious VSIX 2.1.312 (win32-x64) 3de1722901165769893bef57c72594e9a54459faa23f3091b136b79966edd081 (MD5 bd3b71ddf3d0cc3af76249afd2c0eda1) Per Cursor
Malicious VSIX 2.1.313 (darwin-arm64) 80402fdcad8799285fd93044976973ca000da7995fb93363f819bb8e4f84ee6c (MD5 34e491161e056c9b899a79b602ac73b9) Per Cursor
Malicious VSIX 2.1.313 (win32-x64) 6786ec90cbd45949695bd7805c9fbb26cfc91bc5fc897de0183d9bcb9cb21731 (MD5 7838a3be2ca0ff08c1bdb160ef516d39) Per Cursor
Malicious extension.js sha256 ecb58cb29078d9646ad1dcdbe51526f2d9cfea06be5fb2ab183e8ecc3ab6bf15 (MD5 f49bcd657ef1e626e85ce858958c1769) 3,692,922 bytes; preserved on VirusTotal; verified by us; common to all four malicious VSIXs per Cursor
On-disk detection extension folders anthropic.claude-code-2.1.312-* / -2.1.313-* (darwin-arm64, win32-x64): extension.js contains 134.209.82.225 and svc-telemetry Fleet sweep: grep installed extension bundles for either string
Dropped smt.cmd 22f682d9ff55264e934d0f43fcfbb46d58be5cfb8fe1b3a7cbb38fe089c818b0 Windows persistence script, 330 bytes
Dropped tunnel key 7e0a52885fadee05544a9e99eb18c792bec05900a5e1a66d68f8383decb0e278 Written as .stk_<10 hex>
Modified authorized_keys 49d616941deb44840dc89061c617ad7a325aa32113819ddc14e9c8dc238c83d1 Post-implant hash
File paths ~/.config/.smt, ~/.config/.smtk, ~/.config/smt.cmd, $TMPDIR/.stk_<10 hex>, ~/Library/LaunchAgents/com.apple.sysmond.plist, %USERPROFILE%\.ssh\authorized_keys, %USERPROFILE%\.config\smt.cmd, %TEMP%\.stk_<10 hex>, %APPDATA%\...\Startup\sysmon.cmd Persistence and key artifacts
Scheduled objects task SysMon (SYSTEM, onstart), LaunchAgent com.apple.sysmond, cron @reboot Persistence
Process / command-line ssh -N -R '*:0:localhost:22', autossh -M 0 (StrictHostKeyChecking=no, UserKnownHostsFile=/dev/null, ServerAliveInterval=30, IdentitiesOnly=yes), schtasks /create /tn SysMon, systemsetup -setremotelogin on, Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 Tunnel, persistence, and enablement
Clean builds Open-VSX 2.1.312 ext.js 1195816b..., 2.1.314 ext.js 927fe022... Verified clean by us; the Cursor-marketplace 2.1.312 is a distinct malicious artifact

Not indicators on their own: ifconfig.me and api.ipify.org are legitimate public-IP services, and sandbox telemetry showed connections to ordinary Microsoft infrastructure; access alone does not indicate compromise.

Remediation

If 2.1.313, or 2.1.312 from Cursor's marketplace, was installed on a machine, in order:
  1. Check for the implant: grep authorized_keys for svc-telemetry (macOS/Linux: grep svc-telemetry ~/.ssh/authorized_keys; Windows: inspect %USERPROFILE%\.ssh\authorized_keys).
  2. Collect evidence, then remove persistence: the LaunchAgent com.apple.sysmond.plist, the SysMon scheduled task or Startup\sysmon.cmd, cron @reboot entries, and ~/.config/.smt, .smtk, smt.cmd, plus $TMPDIR/.stk_* key files. Cursor publishes remediate-macos.sh and remediate-windows.ps1 scripts for this.
  3. Remove the extension version and reinstall 2.1.314 or later (2.1.314 supersedes both affected versions). Removing the extension alone does not remove standalone persistence.
  4. Rotate credentials reachable from that machine: source-control tokens (GitHub, GitLab), CI/CD tokens (the beacon collected environment variable names matching KEY/TOKEN/SECRET/PASS/AWS/GCP, which reveals which credentials were present), cloud keys, SSH keys, and package registry tokens. Do this from a known-clean machine.
  5. Hunt for follow-on: the authorized key granted interactive SSH access where the tunnel succeeded (primarily elevated-editor runs). Review SSH, shell, process, and authentication logs. If the tunnel is confirmed to have connected, rebuilding the host is safer than cleaning it.

How StepSecurity Helps

Threat Center

StepSecurity Enterprise customers can visit the Threat Center for the complete alert on this incident, including the full IOC set, affected version details, and the machines in their organization that installed anthropic.claude-code 2.1.313.

Dev Machine Guard

StepSecurity Dev Machine Guard flags anthropic.claude-code version 2.1.313 as malicious on developer machines, so machines that pulled the trojanized build during the exposure window are identified immediately rather than waiting for a user report. Identification is version-level intelligence: 2.1.312 and 2.1.314 are recognized as clean.

References

Explore Related Posts

‍