Back to all posts
Critical IDE extensions

Malicious Claude Code 2.1.313
existed in Cursor's marketplace only

Cursor removed a trojanized Claude Code extension from its marketplace on 29 October 2026. We checked npm, GitHub, Open VSX and Microsoft's marketplace: none of them ever published 2.1.313.

CyberXYZ Security Team Threat Intelligence
5 min read

Cursor has confirmed that a malicious version 2.1.313 of Anthropic's Claude Code extension (Anthropic.claude-code) was available in its extension marketplace on 29 October 2026, from 02:27 to 13:35 PT (09:27 to 20:35 UTC). Cursor says it reached at most 5,000 users. Anthropic did not build it.

Early reports, first from OpenSourceMalware, said the version had also been published to npm, Open VSX and Microsoft's VS Code Marketplace. The registry records do not support that. We checked each registry, and compared Cursor's marketplace with the others.

Every real Claude Code release lands in four places

Each Claude Code release goes to npm as @anthropic-ai/claude-code, gets a tag and a release on GitHub, and is published as an extension to Open VSX and Microsoft's marketplace. The order and the spacing hardly change: npm first, the GitHub release within two and a half hours, Open VSX within three minutes of the release, and Microsoft's marketplace 12 to 15 minutes after that.

23 Oct 24 Oct 25 Oct 26 Oct 27 Oct 28 Oct 29 Oct 30 Oct UTC 29 Oct 09:27 to 20:35 UTC: Cursor's marketplace serves 2.1.313 2.1.310 2.1.310 on npm: 23 Oct 2026, 21:20:46 UTC 2.1.310 on GitHub release: 23 Oct 2026, 23:39:00 UTC 2.1.310 on Open VSX: 23 Oct 2026, 23:42:03 UTC 2.1.310 on Microsoft's marketplace: 23 Oct 2026, 23:57:33 UTC 2.1.311 2.1.311 on npm: 26 Oct 2026, 19:47:57 UTC 2.1.311 on GitHub release: 26 Oct 2026, 21:51:23 UTC 2.1.311 on Open VSX: 26 Oct 2026, 21:53:38 UTC 2.1.311 on Microsoft's marketplace: 26 Oct 2026, 22:05:03 UTC 2.1.312 2.1.312 on npm: 27 Oct 2026, 18:36:10 UTC 2.1.312 on GitHub release: 27 Oct 2026, 20:24:20 UTC 2.1.312 on Open VSX: 27 Oct 2026, 20:26:56 UTC 2.1.312 on Microsoft's marketplace: 27 Oct 2026, 20:41:24 UTC 2.1.314 2.1.314 on npm: 30 Oct 2026, 00:12:56 UTC 2.1.314 on GitHub release: 30 Oct 2026, 01:06:26 UTC 2.1.314 on Open VSX: 30 Oct 2026, 01:07:38 UTC 2.1.314 on Microsoft's marketplace: 30 Oct 2026, 01:20:09 UTC npm GitHub release Open VSX Microsoft's marketplace Cursor's marketplace mirrors Open VSX 2.1.313 (malicious) in Cursor's marketplace: 29 Oct 2026, 09:27 to 20:35 UTC 2.1.313 (malicious) 29 Oct 09:27 to 20:35 23 24 25 26 27 28 29 30 October 2026, UTC 29 Oct 09:27 to 20:35 UTC: Cursor's marketplace serves 2.1.313 2.1.310 2.1.310 on npm: 23 Oct 2026, 21:20:46 UTC 2.1.310 on GitHub release: 23 Oct 2026, 23:39:00 UTC 2.1.310 on Open VSX: 23 Oct 2026, 23:42:03 UTC 2.1.310 on Microsoft's marketplace: 23 Oct 2026, 23:57:33 UTC 2.1.311 2.1.311 on npm: 26 Oct 2026, 19:47:57 UTC 2.1.311 on GitHub release: 26 Oct 2026, 21:51:23 UTC 2.1.311 on Open VSX: 26 Oct 2026, 21:53:38 UTC 2.1.311 on Microsoft's marketplace: 26 Oct 2026, 22:05:03 UTC 2.1.312 2.1.312 on npm: 27 Oct 2026, 18:36:10 UTC 2.1.312 on GitHub release: 27 Oct 2026, 20:24:20 UTC 2.1.312 on Open VSX: 27 Oct 2026, 20:26:56 UTC 2.1.312 on Microsoft's marketplace: 27 Oct 2026, 20:41:24 UTC 2.1.314 2.1.314 on npm: 30 Oct 2026, 00:12:56 UTC 2.1.314 on GitHub release: 30 Oct 2026, 01:06:26 UTC 2.1.314 on Open VSX: 30 Oct 2026, 01:07:38 UTC 2.1.314 on Microsoft's marketplace: 30 Oct 2026, 01:20:09 UTC npm GitHub release Open VSX Microsoft's marketplace Cursor's marketplace mirrors Open VSX 2.1.313 (malicious) in Cursor's marketplace: 29 Oct 2026, 09:27 to 20:35 UTC 2.1.313 (malicious) 09:27 to 20:35 UTC
fig. 1 · Claude Code releases by registry, 23 to 30 October 2026 (UTC). Every real release appears in four places within three hours. 2.1.313 appears in one. Sources: npm time map, GitHub releases, Open VSX API, Microsoft's marketplace API, read 30 October 2026; Cursor's window from Cursor's security notice.
VersionnpmGitHub releaseOpen VSXMicrosoft's marketplace
2.1.31023 Oct 21:2023 Oct 23:3923 Oct 23:4223 Oct 23:57
2.1.31126 Oct 19:4726 Oct 21:5126 Oct 21:5326 Oct 22:05
2.1.31227 Oct 18:3627 Oct 20:2427 Oct 20:2627 Oct 20:41
2.1.313nevernevernevernever
2.1.31430 Oct 00:1230 Oct 01:0630 Oct 01:0730 Oct 01:20
Times in UTC, read from each registry on 30 October 2026. Version 2.1.313 was served only by Cursor's marketplace, on 29 October from 09:27 to 20:35 UTC.

npm never published 2.1.313

npm keeps a publish time for every version ever published, including versions that were later removed. The time map for @anthropic-ai/claude-code goes from 2.1.312 straight to 2.1.314:

npm registry · @anthropic-ai/claude-code
$ npm view @anthropic-ai/claude-code time --json | grep '"2\.1\.31[0-4]"'
  "2.1.310": "2026-10-23T21:20:46.540Z",
  "2.1.311": "2026-10-26T19:47:57.395Z",
  "2.1.312": "2026-10-27T18:36:10.160Z",
  "2.1.314": "2026-10-30T00:12:56.911Z"

real output, 30 Oct 2026; other versions trimmed

Our own npm feed agrees. It recorded 2.1.311 on 26 October, 2.1.312 on 27 October, and 2.1.314 at 00:13:05 UTC on 30 October, less than ten seconds after Anthropic published it. It never recorded a 2.1.313.

GitHub, Open VSX and Microsoft's marketplace skip it too

The GitHub repository has tags for 2.1.312 and 2.1.314, and none for 2.1.313:

github.com/anthropics/claude-code · tags
$ git ls-remote --tags https://github.com/anthropics/claude-code 'refs/tags/v2.1.31*'
bd78b216ed563e57767901dcdd80f9a7750434c9	refs/tags/v2.1.31
b70dc4113ad72e0ee44f7b1b95afaf510b53ee98	refs/tags/v2.1.310
08c6a4f5121ae140d3c1b5c96e3e5ae53587b54b	refs/tags/v2.1.311
0e1f4789406477380b267a01f3ddd50b0211e5b3	refs/tags/v2.1.312
b3f291d131924810e2b7713ededc144843a229d5	refs/tags/v2.1.314

real output, 30 Oct 2026

Open VSX has no such version:

Open VSX API
$ curl -s https://open-vsx.org/api/Anthropic/claude-code/2.1.313
{"deprecated":false,"downloadable":false,"error":"Extension not found: Anthropic.claude-code 2.1.313"}

real output, 30 Oct 2026

Microsoft's marketplace lists 2.1.312 and 2.1.314 and nothing between them. No public registry holds a release numbered 2.1.313.

A version in one marketplace only is the signal

Cursor's marketplace serves the same extensions as Open VSX, plus Microsoft's own builds of extensions that are published only on Microsoft's marketplace. It answers the same extension-query API as the other two, so the three can be compared directly.

On 30 October we did that for 26 widely used extensions, AI coding agents first. Cursor served 18 of them under their exact ID. For all 18, every one of the newest versions Cursor lists, up to 40 each, also exists on Open VSX or Microsoft's marketplace.

So a version that appears in a single marketplace, with no tag in the project's own repository, has no ordinary explanation. Version 2.1.313 was exactly that for eleven hours. A watcher that polls all three marketplaces at least hourly, and checks each new version against the upstream tags, flags it on the first poll.

What the malicious version did

From Cursor's security notice:

1

It ran a loader before the real extension code, on macOS (darwin-arm64) and Windows (win32-x64).

2

It collected the hostname, user name, OS, architecture, home directory, environment variables, git email and public IP, and sent them by HTTP POST to an attacker server.

3

It added an SSH key labelled svc-telemetry to authorized_keys, enabled the SSH service and opened a reverse SSH tunnel.

4

It persisted through a LaunchAgent named com.apple.sysmond on macOS and a scheduled task named SysMon on Windows.

Check your machines

Cursor's check, macOS:

macOS · Terminal
grep -qs svc-telemetry ~/.ssh/authorized_keys && echo "svc-telemetry key found" || echo "No key found; machine not impacted"

Windows (PowerShell):

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" }
If the key is there
  • run Cursor's remediation script for your platform, from its security notice;
  • treat every secret that was in that machine's environment variables as exposed, and rotate it: cloud keys, API tokens, CI and registry tokens;
  • search your network logs for connections to the address below.

Indicators

TypeIndicator
ExtensionAnthropic.claude-code 2.1.313, Cursor's marketplace only
Beaconhxxp://134.209.82[.]225:8099/beacon (HTTP POST)
SSH key commentsvc-telemetry
SSH key fingerprintSHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk
macOS persistence~/Library/LaunchAgents/com.apple.sysmond.plist
macOS files~/.config/.smt, ~/.config/.smtk, $TMPDIR/.stk_ followed by 10 hex characters
Windows persistencescheduled task SysMon; fallback %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\sysmon.cmd
Windows files%USERPROFILE%\.config\smt.cmd, %USERPROFILE%\.config\smtk, %TEMP%\.stk_ followed by 10 hex characters
VSIX sha256, macOSfcbb327e38e61c4fec795e0d0591f52cd1014b813d20a5912104953c3a17c364
VSIX sha256, Windows3de1722901165769893bef57c72594e9a54459faa23f3091b136b79966edd081

Source: Cursor's security notice.

What CyberXYZ checks

Our extension watcher read Microsoft's marketplace only, for a fixed list of widely used extensions that did not include Claude Code, so it did not capture 2.1.313. xyz Scanner's xyz audit ide lists the extensions installed in VS Code, Cursor, Devin Desktop (formerly Windsurf) and VSCodium and checks each version against the extension's own GitHub tags, but it could not read Claude Code's repository from its manifest and skipped it.

What changed on 30 October 2026:


References

  1. CyberXYZ, registry reads on 30 Oct 2026: the npm time map for @anthropic-ai/claude-code, the tags and releases of anthropics/claude-code on GitHub, the Open VSX API, and the extension-query API of Microsoft's and Cursor's marketplaces; our npm publish feed
  2. Cursor, Claude Code extension security notice
👋
// book a demo

Want to see it block a real attack?

Book 15 minutes. We run real packages through CyberXYZ while you watch, axios 1.14.1 among them, then connect one laptop or one pipeline for a 30-day proof of value.