Here's what actually happened, step by step: On May 18, threat actors compromised the publishing account of Nrwl (the company behind Nx Console) on the VS Code marketplace. Between 12:36 and 12:47 UTC that day, they pushed version 18.3.4 of Nx Console containing malicious code to the marketplace using the legitimate publisher's credentials. The compromised version was cryptographically signed with Nrwl's valid publisher certificate, which is why VS Code's built-in verification accepted it without warning. When any developer's VS Code instance checked for extension updates during that 11-minute window (or when they manually installed Nx Console during that period), they pulled down the poisoned version directly from Microsoft's official marketplace. The extension wasn't hacked in the sense of someone modifying files on a server, it was published through the front door using stolen publisher credentials. How did the attackers get Nrwl's marketplace publishing credentials in the first place? That's the part most coverage is missing. VS Code marketplace publishing requires either a Personal Access Token (PAT) from Azure DevOps or OAuth credentials tied to a Microsoft account. Those credentials were almost certainly harvested from a previous supply chain compromise, possibly from an earlier wave of the same campaign. This creates a cascading failure pattern: compromise one developer tool to steal credentials, use those credentials to publish malicious versions of another developer tool, use that tool to steal more credentials, repeat. Each iteration increases the attacker's access to publisher accounts across the ecosystem. The Nx Console compromise wasn't patient zero, it was already deep in the chain. Once the poisoned extension was installed on a developer's machine (including the GitHub employee at the center of this story), it immediately executed code that scanned the entire machine for credentials. VS Code extensions are written in JavaScript and TypeScript, and they run inside Node.js, the same JavaScript runtime that powers VS Code itself. When you install an extension, VS Code loads its JavaScript code directly into the editor's process space with full access to Node.js APIs. The malicious code in Nx Console 18.3.4 used Node.js filesystem APIs (specifically fs.readFile, fs.readdir, and path traversal functions) to recursively scan the user's home directory and common credential storage locations. It searched for files matching patterns like.npmrc,.aws/credentials,.kube/config,.ssh/,.gitconfig,.netrc, and configuration files for 1Password CLI, HashiCorp Vault, and Claude Code. The extension also called Node.js child process APIs (child_process.exec and child_process.spawn) to execute system commands that dump environment variables, query the system keychain on macOS (using the security command-line tool), and extract credentials from Windows Credential Manager (using cmdkey). All of this happens in pure JavaScript running with the same privileges as the user who launched VS Code. There's no sandboxing, no permission prompts, no OS-level isolation. VS Code extensions are trusted code by design. The harvested credentials were then exfiltrated using Node.js's built-in https module to POST the data to attacker-controlled domains. The malicious code obfuscated the exfiltration endpoint using base64 encoding and string concatenation to evade static analysis, but once the extension executed, it made direct HTTPS requests to send compressed JSON payloads containing every credential it found. The extension's package.json declared activation events that caused it to run immediately on VS Code startup (using the "*" activation event, which triggers on any workspace open), meaning developers didn't need to explicitly invoke Nx Console features for the malicious code to execute. Just having VS Code running with the extension installed was enough. The JavaScript payload also injected hooks into VS Code's own credential storage APIs (using vscode.authentication and vscode.workspace APIs) to intercept any credentials the user accessed during their work session, including GitHub OAuth tokens VS Code uses for its own Git integration. From there, the attacker used those stolen credentials to install a second poisoned extension on the same employee's machine (GitHub has not yet disclosed which extension this was). That second extension exfiltrated approximately 3,800 internal GitHub repositories over the following hours or days. By May 20, the threat group TeamPCP was advertising the stolen repositories for sale on a hacking forum for $50,000 and up, hours before GitHub publicly confirmed the breach. Internal repositories are not customer data, they're something worse for infrastructure security. These repositories contain deployment scripts, staging credentials, internal API schemas, and infrastructure configurations. Source code access at that level hands attackers a blueprint of how GitHub's systems connect, authenticate, and fail. Every secret that reaches a buyer shortens the reconnaissance phase for whatever attack that buyer was already planning. Binance co-founder CZ immediately warned anyone with private repos containing plain text secrets to rotate everything. Mike Riemer, CTO of Ivanti, told me that Azure's honeypot network now shows known vulnerabilities exploited in under 90 seconds, and stolen credentials collapse the timeline even further. The GitHub breach did not arrive in a vacuum. On May 19, Endor Labs detected 42 malicious npm packages (Socket's broader tracking found 639 malicious versions across 323 packages) published inside Alibaba's @antv data visualization ecosystem, which sees roughly 16 million weekly downloads. This wave introduced provenance forgery: the Mini Shai-Hulud worm now calls Fulcio and Rekor at runtime to generate valid Sigstore signing certificates for every package it propagates. The provenance tooling shows a green badge. The build chain belongs to the attacker. Peyton Kennedy, senior security researcher at Endor Labs, told me that "TanStack had the right setup on paper: OIDC trusted publishing, signed provenance, 2FA on every maintainer account. The attack worked anyway." Also on May 19, threat actors compromised the GitHub Actions workflow actions-cool/issues-helper by redirecting every existing tag to an imposter commit containing malicious code that exfiltrates credentials from CI/CD (Continuous Integration/Continuous Deployment) pipelines. The exfiltration domain matched the @antv Mini Shai-Hulud wave, tying the clusters together. Hours later, Wiz detected that TeamPCP had compromised durabletask, Microsoft's official Python client for the Durable Task workflow execution framework. Three malicious versions were published to PyPI (Python Package Index) within a 35-minute window using a GitHub account compromised in a previous TeamPCP operation. The payload steals credentials from AWS (Amazon Web Services), Azure, GCP (Google Cloud Platform), Kubernetes, and over 90 developer tool configurations, then spreads laterally through cloud infrastructure. The package averages over 400,000 monthly downloads. The entire pattern repeats: compromise a popular tool, exfiltrate credentials from every machine that runs it, use those credentials to compromise the next tool. TeamPCP is building a credential database that spans the entire developer ecosystem, and they're selling access to anyone who'll pay.
GitHub Hack Full Story: VSCode Extension Nx Console by Nrwl Leaks 3,800 Secrets
GitHub confirmed May 20 that two poisoned VS Code extensions on one employee's machine gave attackers access to roughly 3,800 internal repositories. First, a compromised version of Nx Console (2.2 million installs) harvested credentials on May 18. Then a second undisclosed extension used those credentials to exfiltrate the repositories. The threat group TeamPCP is selling the haul starting at $50,000. This wasn't isolated: it arrived alongside a supply chain worm that forged valid cryptographic signatures on 639 malicious npm packages and a breach of Microsoft's own Python SDK on PyPI.
My Take
Seven supply chain surfaces failed in 48 hours, and one group connects at least three of them. This is not a story about one bad VS Code extension. This is a story about trust infrastructure collapsing under adversarial pressure it was never designed to withstand. Provenance badges mean nothing when the signing identity is stolen. Marketplace moderation means nothing when the moderator is also the victim. Every green checkmark in the developer toolchain has become a lure. What makes this different from every previous supply chain scare is the adversary's operational tempo and the tooling they've open-sourced. TeamPCP released the fully weaponized Mini Shai-Hulud worm code on May 12. Copycat variants are already circulating. Trend Micro tracked at least seven confirmed waves since March, each targeting a higher-download package and introducing a more technically sophisticated access vector. The worm now forges its own cryptographic provenance at runtime. It spreads through GitHub Actions, VS Code extensions, npm, and PyPI simultaneously. It skips systems with a Russian locale. Kennedy told me the right setup on paper no longer stops these attacks. The compliance frameworks enterprises rely on were written for humans. Agent identities don't appear in any control catalog anyone has encountered. The bad guys are pivoting faster than the defense industry can update its playbooks.
What Happens Next
Every developer who had Nx Console installed on May 18 between 12:36 and 12:47 UTC needs to rotate every credential on their machine, immediately. That includes not just work credentials but personal GitHub tokens, AWS keys, SSH keys, password manager databases, everything. Most won't, because most developers don't know they were affected. The Nx team's 11-minute response time means this breach won't show up in most security audit logs. No alert fired, no suspicious login attempt triggered monitoring, just a normal extension update that happened to contain a credential harvester. The GitHub employee who got breached will face pressure to disclose exactly which extension was poisoned second, and when they do, every security team running that extension will demand a full post-mortem. The real domino effect hits when the first buyer of those credentials (not just the 3,800 repositories, but the full credential database TeamPCP harvested from everyone who installed the poisoned extension) uses staging credentials or internal API schemas to breach a company that hasn't connected the dots yet. Meanwhile, TeamPCP's open-sourcing of the Mini Shai-Hulud worm means we're about to see a Cambrian explosion of copycat attacks targeting other popular extensions and packages. Kennedy's detection heuristic will work until the next variant changes those signatures. The contrarian scenario nobody's pricing in: what if the Nx Console compromise harvested credentials from developers at dozens of major tech companies, cloud providers, and security vendors, and GitHub just happened to be the first victim whose breach became public? In that scenario, we're watching the opening act of a much larger campaign, and the credentials sitting in TeamPCP's database unlock infrastructure across the entire industry.
What History Tells Us
The 2020 SolarWinds supply chain attack compromised approximately 18,000 customers through a poisoned software update, leading to a fundamental rethinking of trust models in enterprise software. That attack took months to discover and involved a nation-state adversary (attributed to Russia's SVR) with significant resources. What's different in 2026 is the operational tempo and the adversary profile. TeamPCP is financially motivated, not state-sponsored, yet they're executing supply chain attacks at a pace that matches or exceeds nation-state capabilities from just a few years ago. The open-sourcing of their tooling represents a threshold crossing: supply chain attacks are no longer the exclusive domain of APT (Advanced Persistent Threat) groups with multi-year operational timelines. They're now executable by any threat actor with moderate technical sophistication, and the tooling propagates itself.
Market Impact
Microsoft (MSFT, currently trading around $425, down roughly 3% over the past month amid broader tech sector weakness) faces reputational damage from a breach that stayed entirely within its own ecosystem. GitHub is a Microsoft subsidiary, VS Code is a Microsoft product, and the malicious extension came through a Microsoft-operated marketplace. This creates board-level pressure to overhaul marketplace security, which likely means increased friction in the extension ecosystem and potentially slower feature velocity. That's a medium-term drag on VS Code's competitive position against JetBrains and other IDEs (Integrated Development Environments). More immediately, CrowdStrike (CRWD, trading around $285, up roughly 8% month-over-month as enterprises increase security spending following high-profile breaches) and Palo Alto Networks (PANW, around $345, up 6% this month) stand to benefit as enterprises re-evaluate endpoint security and supply chain risk management. Expect a short-term bullish move for both as procurement teams accelerate vendor evaluations. The GitHub breach specifically validates the thesis behind zero-trust architecture providers, every credential and token in those 3,800 repositories now has to be treated as compromised, which drives demand for solutions that assume breach and enforce least-privilege access at runtime. Cloudflare (NET, around $95, relatively flat this month) and Okta (OKTA, around $78, down 4% amid profitability concerns) could see increased demand for identity and access management solutions that limit blast radius when credentials leak.