Moxley Press Technology

A trojaned VS Code extension was live for 11 minutes, and the payload reached for Claude Code’s config file

Nx Console version 18.95.0, an editor plugin with more than two million installs, shipped a credential stealer on May 18. The window was short, the targeting was specific, and the list of things the dropper tried to grab now includes the settings file used by an AI coding assistant.

Isometric illustration of a developer workspace — a laptop, a stack of editor windows, and a small open envelope labelled with a key, on a warm cream background.
Illustration · an editor extension that briefly carried a key-stealer. · Illustration · generated by xAI grok-imagine-image-quality

At 12:36 UTC on Monday, an attacker pushed a malicious build of Nx Console, a Visual Studio Code extension with more than 2.2 million installs, to the Microsoft marketplace. At 12:47 UTC, the Nx team pulled it. In the 11 minutes in between, every editor running auto-updates fetched the new version, and every workspace a developer opened triggered a 498-kilobyte payload that quietly went looking for the keys to that developer’s working life: GitHub tokens, npm credentials, AWS keys, HashiCorp Vault secrets, Kubernetes config, 1Password vault material, and, for the first time in a publicly documented supply-chain incident, the settings file used by Anthropic’s Claude Code.

The compromised version is Nx Console 18.95.0, published under the marketplace identifier nrwl.angular-console. The clean version that users are now asked to install is 18.100.0. The official advisory, published on GitHub as GHSA-c9j4-9m59-847w, confirms the timeline and the root cause: a contributor’s personal GitHub credentials were stolen in a separate supply-chain incident, and the attacker used them to push a single orphan commit into the nrwl/nx repository and then publish to the marketplace using the project’s stored VSCE_PAT credential.

The 11-minute window matters less than it sounds like it should. VS Code installs extension updates in the background; a developer who opened the editor anywhere in that 11-minute slice, with auto-update on, received the trojaned build without prompting. From the moment the editor opened a workspace, the malicious main.js fetched its second-stage payload, 498 kilobytes of obfuscated JavaScript, from a dangling orphan commit hidden inside the legitimate nrwl/nx repository, and began enumerating the developer’s machine.

What the dropper looked for

StepSecurity’s reverse-engineering of the payload, corroborated by independent analysis at The Hacker News and Cybersecurity News, lists a long and unusually specific target set. It walked the standard locations first: shell histories, .npmrc, .aws/credentials, .ssh, the macOS Keychain, and the IMDS and ECS metadata endpoints that cloud workloads use to bootstrap their own credentials. It scraped process memory through /proc/*/mem on Linux. It looked for HashiCorp Vault tokens and 1Password local vault files. None of that is novel; credential-stealer kits have done all of that for years.

What is novel is the line, called out by both StepSecurity and Anthropic-adjacent researchers, that targets ~/.claude/settings.json, the configuration file used by Anthropic’s Claude Code coding assistant. That file is where many developers store the API keys they use to authorize Claude Code sessions, alongside MCP server tokens and project-scoped configuration. Treating it as a worthwhile target is a signal that the attacker, or the kit author the attacker bought from, has updated their mental model of what lives on a developer’s laptop. Claude Code keys join GitHub tokens and AWS credentials on the list of things worth stealing.

Exfiltration ran over three independent channels: HTTPS POST, the GitHub API, and DNS tunneling. The redundancy is not subtle. If one outbound path is blocked by a corporate proxy, another may still make it out. On macOS, the payload installed a small Python backdoor that polls the public GitHub Search API as a dead drop, retrieving instructions encoded in search-result metadata and verifying them with a 4,096-bit RSA signature before executing. That is a longer game than smash-and-grab; somebody wanted persistence.

This compromise occurred due to a recent supply chain attack that scraped one of our contributor’s GitHub token. — Nx maintainers, official advisory GHSA-c9j4-9m59-847w, May 18, 2026

How a single token unlocked a marketplace publish

The chain of trust that broke here is worth naming, because it is the chain of trust most open-source projects sit inside. The attacker did not breach Microsoft’s marketplace, and they did not breach the Nx organization’s GitHub account. They compromised one contributor’s laptop in a separate, earlier incident (Nx has not named the upstream attack, but the maintainers have confirmed the credentials were stolen there) and used the resulting personal access token to push to the nrwl/nx repository. From there, the project’s own publishing pipeline, which any one trusted contributor could trigger without a second sign-off, took the new build and shipped it under the project’s VSCE_PAT to the VS Code Marketplace.

Nx’s post-incident hardening, announced alongside the advisory, requires two administrators to approve any future Nx Console release. That is the obvious fix and the right one, but the broader pattern is worth flagging: nearly every popular editor extension, npm package, and language-package-manager artifact in the world is one trusted contributor’s laptop away from publishing whatever the attacker wants. The 2024 xz-utils backdoor, the 2025 nx ransomware incident, the April 2026 Checkmarx KICS Docker compromise, the May 11 cross-registry worm that GitGuardian and Expel called Mini Shai Hulud all share the same shape. Steal a maintainer credential, push a build, wait for the install count to climb. The targets get more lucrative, and the dwell time between push and detection gets shorter, but the model does not change.

Who was actually hit

This is the part the public reporting cannot yet answer with precision. The Visual Studio Code Marketplace does not publish per-version download counts at hourly resolution, and the Nx team has not released an estimate of how many of its 2.2 million installed editors fetched 18.95.0 in the 11-minute window. A reasonable order-of-magnitude bound is the share of users with auto-update enabled, which is the default, multiplied by the share who opened a VS Code workspace between 12:36 and the moment the editor next polled the marketplace. That number is meaningful, but it is not in the public record yet, and any reporter who gives you a precise figure for "developers infected" is reading tea leaves.

What is in the record is the remediation list, and it is long. Anybody who ran VS Code with Nx Console installed and auto-update enabled during the window should treat their developer credentials as compromised: rotate GitHub personal access tokens, npm tokens, AWS access keys, HashiCorp Vault tokens, 1Password recovery keys, SSH keys touched on that machine, and, the new entry, Anthropic API keys and any MCP server tokens stored in ~/.claude/settings.json. Several of those rotations are unpleasant. A few of them, particularly Vault tokens used as the trust anchor for further automation, may take weeks to fully unwind.

The Claude Code line is the one to watch

It would be easy to read the ~/.claude/settings.json line as a footnote, and most coverage has. It is not a footnote. The economics of credential theft are driven by what the stolen credentials let the attacker buy. A GitHub token lets the attacker push code. An AWS access key lets them spin up compute. An Anthropic API key lets them spend somebody else’s budget on model inference, and, just as importantly, gives them an AI coding assistant tethered to the victim’s identity, with whatever workspace context the victim had built up.

The second-order risk there is not just bill-stuffing. An attacker who has stolen a developer’s Claude Code session can ask that assistant to read the developer’s private repositories, summarize the developer’s recent prompts and likely projects, and, if MCP servers are wired to internal systems, query whatever those servers expose. As more developers attach AI coding assistants to their working environments, those configuration files become a single point of pivot from "machine compromise" to "context compromise." That category, as far as Moxley can find, has not appeared as an explicit target in a public supply-chain payload before this week. It will not be the last.

What this story is not

It is not yet a mass-compromise event. There is no public victim list, no named threat actor taking credit, no CISA advisory or Known Exploited Vulnerabilities entry attached to this specific incident at the time of writing. The 11-minute window genuinely is short by supply-chain-attack standards, and the Nx team’s detection-to-takedown speed deserves the credit it is being given. What it is, instead, is a clean illustration of two things at once: a publishing pipeline that one stolen laptop could ride from contributor commit to marketplace push, and a credential-stealer kit that has been updated to know what an AI coding assistant looks like on disk. Both of those facts are going to outlast this incident.

Corrections
No corrections have been issued for this article. Every Moxley article carries this block — present whether or not a correction has been logged — so the absence is visible and not assumed.
Sources & methods
  1. Nx maintainers · official GitHub Security Advisory for the compromised Nx Console 18.95.0, with the root-cause statement and remediation guidance · archived May 19, 2026
  2. StepSecurity · technical reverse-engineering of the 498 KB payload, exfiltration channels, and timeline (12:36 UTC publish, 12:47 UTC takedown) · archived May 19, 2026
  3. The Hacker News · independent reporting on the 11-minute exposure window, the macOS Python backdoor, and the Claude Code configuration target · archived May 19, 2026
  4. Cybersecurity News · corroborating account of the 1Password, HashiCorp Vault, Kubernetes, and AI-assistant credential targets
  5. GBHackers · additional confirmation of the attack chain, including the orphan-commit second-stage delivery and Sigstore-signing implications
  6. Cyber Press · timeline reporting on the May 18 publish, takedown, and recommended credential-rotation set
  7. GitHub · Nx Console release feed, confirming 18.100.0 as the post-incident clean version and the absence of 18.95.0 from the listed releases · archived May 19, 2026
  8. GitHub · public Nx Console issue tracking the marketplace removal and reinstatement, including maintainer comments on the publishing-pipeline hardening · archived May 19, 2026
  9. Visual Studio Code Marketplace · the live Nx Console listing, used to confirm install counts and current clean version · archived May 19, 2026

Reporting drew on the Nx maintainers’ official GitHub Security Advisory GHSA-c9j4-9m59-847w, plus independent technical analyses from StepSecurity, The Hacker News, Cybersecurity News, GBHackers, and Cyber Press. The reporter cross-checked the publish-and-takedown timeline (12:36 UTC to 12:47 UTC on May 18, 2026), the affected version (18.95.0), the clean version (18.100.0), the payload size (498 kilobytes), the target list (GitHub, npm, AWS, HashiCorp Vault, Kubernetes, 1Password, and Anthropic Claude Code configuration), and the exfiltration channels (HTTPS, GitHub API, DNS tunneling) across at least three independent sources before publication. Install-count and impact figures are presented as marketplace-reported totals and order-of-magnitude bounds, not as confirmed infection counts, because the marketplace does not publish per-version hourly download data and the Nx team has not released one. No interviews were conducted under embargo. This article was researched and written by an AI agent on staff; see the Moxley Standard for the newsroom’s disclosure policy.