What happened
On 29 October, Cursor's extension marketplace offered a version 2.1.313 of the Claude Code extension, anthropic.claude-code, that had a malicious loader added to it. Cursor's own notice also lists a malicious 2.1.312 build for Windows and macOS served from its marketplace in the same period. Cursor reports that no more than 5,000 of its users received the tampered build, over a window of roughly 11 hours.
According to StepSecurity, simply loading the extension planted an attacker's SSH key, set up persistence, opened a reverse SSH tunnel to the attacker's server and reported details about the machine over plain HTTP. No Claude conversation was required to trigger it.
Anthropic says its systems and staff laptops were not compromised, and that it neither built nor published the tampered copy. StepSecurity reports that someone used access to Cursor's marketplace to publish the tampered copy, and that only Cursor users are affected. Microsoft says the malicious packages were never published or distributed through the Visual Studio Marketplace, and that all evidence points to Cursor's marketplace alone.
Cursor says it pulled the extension, took its whole marketplace offline and rotated keys, and that the attacker's server was taken down with help from its host. Later audits found no other tampered extensions, and Cursor is contacting affected users directly.
Background
The Claude Code extension is Anthropic's official editor integration and has tens of millions of lifetime downloads on Open-VSX alone. The tampered copy carried the genuine extension identifier rather than a lookalike name.
Early reports pointed at Open VSX, but OpenSourceMalware has since revised its article and no longer names Open VSX as the channel. Socket says its systems never ingested a 2.1.313 from npm, Open VSX or the VS Code Marketplace, and Anthropic confirmed it skipped straight to 2.1.314. The 2.1.312 build on Open-VSX is a different file, which StepSecurity checked and found clean.
How it works
Researchers at Phorion and OpenSourceMalware found the attackers put a JavaScript loader at the top of the extension's extension.js file. The modified file is about 7 KB bigger than the clean release before it. Microsoft says the loader hides command output and swallows errors while the extension keeps working as normal.
The loader gathers the hostname, username, operating system, architecture, home and working directories and the global Git email. It also records up to forty environment-variable names that contain words such as KEY, TOKEN, SECRET, PASS, AWS or GCP, but Microsoft says it sends the names, not the values.
If authorized_keys has no svc-telemetry entry, the loader adds an embedded Ed25519 public key to it. It then opens a reverse SSH tunnel, preferring autossh on Unix-like systems and a hidden PowerShell loop on Windows, retrying sixty seconds after each exit. Microsoft says that on macOS it persists through a user LaunchAgent called com.apple.sysmond, a name that resembles a monitoring component.
BleepingComputer reports that, according to Phorion, coding mistakes in the SSH setup probably stopped remote access on many Windows and macOS machines. On macOS the Remote Login check runs without elevated rights, so the malware never switches SSH on. Even so, Microsoft says keys and persistence can still be written when the tunnel fails.
Timeline
Who is affected
- Cursor users who installed version 2.1.312 or 2.1.313 of the Claude Code extension from Cursor's marketplace during the window.
- Copies installed from Anthropic's official channels are not affected.
Impact
Cursor puts the number of users who received the build at 5,000 or fewer. Cursor reports that errors and the need for administrator rights blocked SSH access on most macOS and Windows hosts. Where the tunnel did work, the planted key gave interactive SSH access to the machine.
BleepingComputer notes the script does not steal credentials directly, which suggests the attackers planned to collect data by hand over the tunnel. Microsoft says its analysis does not attribute the activity to any particular threat actor.
How to check
- Find out whether any developer added or updated the extension from Cursor's marketplace while the bad build was live.
- Search ~/.ssh/authorized_keys for a key labelled svc-telemetry. Compare it with the published fingerprint before removing that exact entry.
- Search installed extension bundles for extension.js files that contain 134.209.82.225 or svc-telemetry.
What to do
- Keep a copy of the extension package, the SSH key files, scripts and startup settings before you clean up.
- On macOS, unload and delete the LaunchAgent com.apple.sysmond.plist and remove ~/.config/.smt and ~/.config/.smtk. Cursor provides remediate-macos.sh and remediate-windows.ps1 scripts for this.
- Stop any malicious SSH or retry processes and delete the temporary .stk_ key files.
- Remove the affected version and install 2.1.314 or later. Uninstalling the extension alone leaves the persistence behind.
- From a known-clean machine, rotate the source-control and CI/CD tokens that the affected machine could reach.
- If the tunnel is confirmed to have connected, rebuild the machine rather than cleaning it.
- In Cursor, limit extensions to approved publishers and set an installation cooldown for newly published versions.
Indicators of compromise
Shown defanged so they can't be clicked. Copy copies the real value. Every indicator appears in the cited source.
| Type | Indicator | Note | Copy |
|---|---|---|---|
| IP address | 134[.]209[.]82[.]225 | C2 for the reverse SSH tunnel and HTTP beacon (now offline)[1] | |
| URL | hxxp://134[.]209[.]82[.]225:8099/beacon | Host reconnaissance beacon[1] | |
| Key hash | SHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk | Attacker SSH key added to authorized_keys, comment svc-telemetry[1] | |
| Key hash | SHA256:KOAU57+ZG6u3MG4WwzPzPX2O5YEe9qdOC1Bl+6MVyDQ | Embedded tunnel identity key[1] | |
| SHA-256 | ecb58cb29078d9646ad1dcdbe51526f2d9cfea06be5fb2ab183e8ecc3ab6bf15 | Malicious extension.js[1] | |
| SHA-256 | fcbb327e38e61c4fec795e0d0591f52cd1014b813d20a5912104953c3a17c364 | Malicious VSIX 2.1.312 darwin-arm64 (per Cursor)[1] | |
| SHA-256 | 3de1722901165769893bef57c72594e9a54459faa23f3091b136b79966edd081 | Malicious VSIX 2.1.312 win32-x64 (per Cursor)[1] | |
| SHA-256 | 80402fdcad8799285fd93044976973ca000da7995fb93363f819bb8e4f84ee6c | Malicious VSIX 2.1.313 darwin-arm64 (per Cursor)[1] | |
| SHA-256 | 6786ec90cbd45949695bd7805c9fbb26cfc91bc5fc897de0183d9bcb9cb21731 | Malicious VSIX 2.1.313 win32-x64 (per Cursor)[1] | |
| SHA-256 | 22f682d9ff55264e934d0f43fcfbb46d58be5cfb8fe1b3a7cbb38fe089c818b0 | Dropped Windows persistence script smt.cmd[1] | |
| SHA-256 | 7e0a52885fadee05544a9e99eb18c792bec05900a5e1a66d68f8383decb0e278 | Dropped tunnel key file[1] | |
| File path | ~/Library/LaunchAgents/com.apple.sysmond.plist | macOS persistence LaunchAgent[1] | |
| File path | ~/.config/.smt | Persistence script[1] | |
| File path | ~/.config/.smtk | Persistent tunnel identity[1] |
Sources
- Microsoft Security · Inside a malicious Claude Code-branded extension and its persistent SSH backdoor
- BleepingComputerMalicious Claude Code extension on Cursor planted SSH backdoors
Changelog
- First published.
- Added Subcloak incident pack CW-2026-10018, which Watch matches on your Mac.