// threat brief
Nx Console 18.95.0 trojanized: a VS Code extension update that stole developer credentials
- CVSS
- 9.8 CRITICAL
- CISA KEV
- 2026-05-27
- Weakness
- CWE-506
- Topics
- Supply chain
AI review 2026-09-29 (not human-reviewed)Command tests: none yetReproduced: not yetVerification record ↓
Attackers published a trojanized Nx Console 18.95.0 VS Code extension that stole developer credentials on startup. Exploited in the wild.
| Who is affected | Anyone who had Nx Console (nrwl.angular-console) installed in VS Code or a fork such as Cursor with auto-update on between about 12:30 and 13:09 UTC on 2026-05-18, or who installed 18.95.0 by hand. |
|---|---|
| What happens | The malware collected GitHub, npm, cloud (AWS/GCP), Kubernetes, Vault and SSH private-key credentials, plus 1Password CLI (op) vault contents if an op session was signed in at the time, and sent them out; on Linux it also tried to add itself to sudoers to stay around. A GitHub employee's device was hit; the attacker claims about 3,800 internal GitHub repositories were taken, which GitHub called "directionally consistent" with its still-ongoing investigation. |
| What to do now | Update to 18.100.0 or later. If you used it during the exposure window, stop the malware and delete its persistence files first, then rotate every credential that machine could reach, and consider rebuilding it. |
| Affected versions | 18.95.0 only (VS Code extension, distributed via Visual Studio Marketplace and Open VSX) |
| Fixed versions | 18.100.0 or later (last clean version before the attack: 18.94.0) |
| CVSS vector | Show full vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Timeline | |
| CISA KEV | Listed (2026-05-27): attacks have been seen in the wild |
Blue team playbook
Check, fix / mitigate, respond, harden. Matching the affected versions does not mean you were compromised, and a check that finds nothing does not prove you are safe; each item says what it can and cannot show. Tagged steps point to where the attack flow below can be stopped.
- 01Check whether 18.95.0 was installed
The vendor suggests listing installed extensions with versions and looking for angular-console at 18.95.0. If auto-update was on between about 12:30 and 13:09 UTC on 2026-05-18, treat the machine as possibly compromised even if it now shows a newer version.
Read-only checkcode --list-extensions --show-versions | grep -i angular-console - 02Look for the vendor-published persistence files (macOS/Linux)
Vendor-listed files: ~/.local/share/kitty/cat.py, ~/Library/LaunchAgents/com.user.kitty-monitor.plist, /var/tmp/.gh_update_state, /tmp/kitty-*. The command has two parts: ls checks the three fixed paths, and find looks separately for kitty-* staging directories under /tmp (no shell wildcard, so zsh does not abort the whole line when nothing matches); no output means nothing was found. On Windows check %USERPROFILE%\.local\share\kitty\cat.py, %TEMP%\kitty-*, %TEMP%\.gh_update_state and %USERPROFILE%\.bun\bin\bun.exe.
Read-only checkls -la ~/.local/share/kitty/cat.py ~/Library/LaunchAgents/com.user.kitty-monitor.plist /var/tmp/.gh_update_state 2>/dev/null; find /tmp/ -maxdepth 1 -name 'kitty-*' 2>/dev/null - 03Find malicious processes still running
Vendor indicators: a Python process running cat.py, or any process with __DAEMONIZED=1 in its environment. The ps part works on macOS and Linux; the /proc/*/environ part is Linux only (macOS has no /proc, and zsh prints "no matches found", which does not mean no such process exists).
Read-only checkps aux | grep '[c]at\.py'; sudo grep -l '__DAEMONIZED=1' /proc/*/environ 2>/dev/null - 04Linux: check sudoers for changes
The malware tries to modify sudoers to persist; the vendor's indicator is unexpected entries in /etc/sudoers or /etc/sudoers.d/. The command only reads, listing every non-blank, non-comment line in both places (it keeps directives such as
Read-only checksudo grep -rvE '^[[:space:]]*(#[[:space:]]|#$|$)' /etc/sudoers /etc/sudoers.d/
- 01Update to 18.100.0 or later
18.95.0 has been pulled from both marketplaces; 18.100.0 and later are safe. Note that updating only replaces the extension; it does not remove malware already running or persisting on the machine.
Read-only checkcode --list-extensions --show-versions | grep -i angular-console
- 01Remove persistence first, then rotate
Vendor steps: stop processes with __DAEMONIZED=1 and Python processes running cat.py; delete the persistence files, unloading the LaunchAgent first on macOS. If the same machine was also hit by the TanStack (Mini Shai-Hulud) package, that payload is reported to wipe the home directory when its token is revoked, so the order matters even more.
Read-only checkls -la ~/Library/LaunchAgents/com.user.kitty-monitor.plist 2>/dev/null - 02Rotate every credential the machine could reach
Including GitHub and npm tokens, SSH keys, AWS/GCP/Azure/Kubernetes credentials, Vault tokens and .env contents.
- 03Audit access logs and consider a rebuild
Check whether the old credentials were used before rotation; the vendor says to treat the machine as possibly still infected and consider rebuilding it after rotating.
- 01Require two-person approval for releases
Nx now uses a GitHub environment with required reviewers, where the approver can't be the person who triggered the run.
- 02Make sure your new-package delay actually works
The minimum-release-age setting needs pnpm 10.16 or later; older versions silently ignore it. Nx's postmortem recommends pinning the packageManager field to pnpm 10.16 or later and adding a CI check that fails the build if the pnpm version is below that.
Read-only checkpnpm --version - 03Don't keep long-lived tokens in plain files
Keep long-lived tokens such as GitHub CLI tokens in a secret manager so arbitrary local processes can't read them.
- 04Monitor audit logs and pin Actions
Alert on events such as deleted workflow runs; pin GitHub Actions to exact commit SHAs.
Full remediation steps and notes
- Update. Move Nx Console to 18.100.0 or later. Check with
code --list-extensions --show-versions | grep -i angular-console. - Decide whether you were hit. If auto-update was on during the window, or you installed 18.95.0 by hand, the vendor says to treat the machine as compromised. Vendor-published indicators:
- macOS/Linux files:
~/.local/share/kitty/cat.py,~/Library/LaunchAgents/com.user.kitty-monitor.plist,/var/tmp/.gh_update_state,/tmp/kitty-* - Windows files:
%USERPROFILE%\.local\share\kitty\cat.py,%TEMP%\kitty-*,%TEMP%\.gh_update_state,%USERPROFILE%\.bun\bin\bun.exe - Processes: Python running
cat.py, or any process with__DAEMONIZED=1in its environment - Linux: unexpected entries in
/etc/sudoersor/etc/sudoers.d/ - StepSecurity (third party) also published hashes for the malicious VSIX and related files; see its write-up.
- macOS/Linux files:
- Clean up first, then rotate. Stop those processes and delete the persistence files, unloading the LaunchAgent first on macOS. Then rotate every credential the machine could reach: GitHub and npm tokens, SSH keys, AWS/GCP/Azure/Kubernetes credentials, Vault tokens and
.envcontents. - Audit and rebuild. Review access logs. The vendor says to treat the machine as possibly still infected and consider rebuilding it after rotating.
- If the same machine also installed a malicious TanStack package. That is a different payload (Mini Shai-Hulud). Snyk and Tenable report it may wipe the home directory when its stolen token is revoked. Keep the two apart, but the “remove persistence first, then rotate” order matters even more here.
- Long term. Require two-person approval for releases; alert on audit-log events such as deleted workflow runs; pin GitHub Actions to commit SHAs; if you use a minimum release age, pin pnpm to 10.16 or later and check the version in CI so the setting is actually enforced; keep long-lived CLI tokens in a secret manager.
No automated tool caught this. The Marketplace emails the publisher on every upload, and a maintainer noticed the unexpected release within about 6 minutes.
Attack flow
Read left to right: this is the order the attack happens in. A blue shield means the step can be stopped; the earlier, the better. Click an icon for details.
Read top to bottom: this is the order the attack happens in. A blue shield means the step can be stopped; the earlier, the better. Tap an icon for details.
- Attacker
A compromised upstream TanStack package steals an Nx contributor's GitHub CLI token
On 2026-05-11 an Nx contributor ran a routine install in another project and pulled in a malicious TanStack version that was only 77 minutes old. The project had a 7-day minimum-release-age delay, but its pinned pnpm 10.14 didn't support that setting and silently ignored it. The token sat in a config file any local process could read.
Defense: Check that security settings are actually supported by your tool version (this one needs pnpm 10.16+); keep long-lived CLI tokens in a secret manager, not plain files.
- Attacker
The attacker publishes malicious 18.95.0 as that contributor
Between May 11 and 16 the attacker used this access to push commits and delete workflow runs. On May 18 the bad version went up on the VS Code Marketplace and Open VSX. At the time, one person could publish Nx Console with no second approver. The vendor has not said exactly which credential or path was used to publish.
Defense: Require two administrators to approve releases (the approver can't be the person who triggered the run); monitor audit logs for events such as workflow deletion.
- Your system
Developers' editors auto-update to 18.95.0
No user action is needed. Official counts: 28 installs from the Microsoft Marketplace and 41 downloads from Open VSX; Nx's own analytics recorded about 6,000 activations.
Defense: Update to 18.100.0 or later; list installed extensions with versions to check for 18.95.0.
- Your system
On startup, the extension downloads and runs an obfuscated payload
According to StepSecurity, a small loader was injected into the main file. It fetched a package from an "orphan" commit (not on any branch) that the attacker had pushed into the official nrwl/nx repository, then installed the Bun runtime to run the payload. The code came from the project's own trusted repository, not an obviously suspicious domain.
Defense: StepSecurity suggests watching for unexpected connections from developer machines to cloud metadata addresses or Sigstore endpoints.
- Your system
Credentials are harvested, sent out, and the malware tries to persist
Targets included Vault, Kubernetes, AWS, npm, GitHub tokens and Actions secrets, 1Password CLI contents (only if an op session was signed in), private keys, and GCP and Docker credentials, sent out over HTTPS, the GitHub API and DNS. On Linux it tried to edit sudoers; on macOS it left a LaunchAgent.
Defense: Stop the malicious processes and delete persistence files first, then rotate every credential.
- Attacker
A GitHub employee's device is compromised and internal repositories are exfiltrated
GitHub disclosed that an employee's device was infected by a poisoned VS Code extension (linking the Nx advisory); the attacker claims about 3,800 internal repositories were taken, which GitHub called "directionally consistent" with its investigation so far; GitHub said it found no evidence of impact on customer data outside internal repositories.
Defense: Audit access logs; treat an affected machine as possibly still infected and consider rebuilding it after rotation.
Who is affected
This is not a coding mistake. Someone got hold of publishing access and deliberately shipped a booby-trapped version. CWE-506 (Embedded Malicious Code) is the category for exactly that.
| Condition | Affected? |
|---|---|
Nx Console (nrwl.angular-console) installed in VS Code or a fork such as Cursor, with auto-update on between about 12:30 and 13:09 UTC on 2026-05-18 | Possibly compromised; the vendor says to treat the machine as compromised |
| Installed 18.95.0 by hand | Possibly compromised |
| 18.94.0 or earlier, with no update during the window | Not affected |
| 18.100.0 or later | Safe version; but if 18.95.0 was ever installed, updating does not remove malware already on the machine |
| Nx Console’s JetBrains plugin | Not mentioned by any source; the postmortem covers only the VS Code extension, and there is no evidence it was affected |
Time on each marketplace: VS Code Marketplace about 12:30–12:48 UTC, Open VSX about 12:33–13:09 UTC. The official counts are 28 installs from the Microsoft Marketplace and 41 downloads from Open VSX (21 unique IPs), but Nx’s own analytics recorded about 6,000 activations. The vendor explains that the numbers measure different things (installs versus activations).
How it works
Nx’s postmortem breaks the incident into four linked failures:
- An upstream package was compromised first. On 2026-05-11 attackers published malicious versions of 42
@tanstack/*npm packages (CVE-2026-45321). - A safety setting silently did nothing. An Nx contributor ran a routine install in another project. That project had a 7-day “minimum release age” rule that should have skipped very new packages, but the rule needs pnpm 10.16 or later and the project was pinned to pnpm 10.14, which quietly ignores settings it doesn’t know. A malicious TanStack version only 77 minutes old got installed.
- An unprotected CLI token. The contributor’s GitHub CLI token was within reach of local programs: the config file
~/.config/gh/hosts.yml, thegh auth tokencommand, or the memory of a running gh process. The post-mortem says it has not established which path the malware took, only that it obtained and used the token within 74 seconds of running. The attacker used it from May 11 to May 16, pushing commits and deleting workflow runs. - One person could publish. Unlike Nx’s other products, publishing Nx Console needed no second approver.
On May 18 the malicious 18.95.0 was uploaded, and the Marketplace recorded the upload as coming from the compromised contributor. The advisory says the stolen credentials let the attacker run workflows as a contributor, but the vendor has not said exactly which token or path was used.
According to StepSecurity’s analysis, a small loader was injected into the extension’s main file. As soon as the extension started (for example, when a workspace was opened), the loader fetched a package from an “orphan” commit the attacker had pushed into the official nrwl/nx repository, installed the Bun runtime, and ran a heavily obfuscated payload. The key point: the malware was served from the project’s own trusted repository, not an obviously suspicious domain.
Behaviour confirmed by the vendor: it harvested Vault tokens, Kubernetes and AWS IAM auth, npm .npmrc tokens and npm OIDC token exchange, AWS instance metadata, Secrets Manager, SSM and Web Identity tokens, GitHub tokens and Actions secrets, process memory, 1Password CLI content (only if an op CLI session was signed in at the time), private keys, connection strings, and GCP and Docker credentials; sent them out over HTTPS, the GitHub API and DNS; and on Linux tried to add itself to sudoers to persist.
Behaviour reported only by StepSecurity (third party): reading the Claude Code settings file ~/.claude/settings.json, scanning process memory on Linux, encrypting data before sending it, installing an hourly Python backdoor on macOS that took signed commands via GitHub search, and generating Sigstore/SLSA provenance so stolen npm tokens could publish packages with valid-looking signatures.
The flawed release setup (conceptual illustration, not Nx’s actual configuration):
Show code example(yaml)
# Any contributor with write access can trigger a direct publish to the marketplace
publish:
steps:
- run: publish-extension # no second approverThe fixed approach:
Show code example(yaml)
# The publish job is bound to an environment that needs review
publish:
environment: release # two admins must approve; the approver can't be the person who triggered it
steps:
- uses: some/action@<full commit SHA> # Actions pinned to an exact SHA
- run: publish-extensionA second lesson is that “configured” is not the same as “enforced”: protections like a minimum release age only work if the tool version you actually run supports them; otherwise they may be silently ignored.
Timeline
| Date / time (UTC) | Event |
|---|---|
| 2026-05-11 19:20–19:26 | 84 malicious TanStack versions published |
| 2026-05-11 20:43 | An Nx contributor’s machine runs the malicious TanStack package; GitHub CLI token stolen |
| 2026-05-11 → 05-16 00:04 | Attacker uses the token (commits, workflow-run deletion) |
| 2026-05-18 12:30 | Malicious 18.95.0 uploaded to the VS Code Marketplace |
| 12:33 | Open VSX publish completes |
| 12:36 | Maintainer receives the publisher email and spots the unexpected release |
| 12:47–12:48 | Removed from the VS Code Marketplace |
| 13:09 | Removed from Open VSX |
| 13:58 | Incident response starts; the compromised engineer’s access revoked |
| 2026-05-18 17:01 | GHSA-c9j4-9m59-847w published (time per the post-mortem; GitHub’s API published_at is 17:03:43 UTC) |
| 2026-05-18 | 18.100.0 released (release notes list features only, nothing about security) |
| 2026-05-20 | GitHub discloses an employee device hit by a poisoned VS Code extension; internal repositories taken (the attacker claims about 3,800) |
| 2026-05-21 | Nx publishes its postmortem |
| 2026-05-27 | CVE-2026-48027 published; added to CISA KEV (due 2026-06-10) |
| 2026-05-28 | CISA alert on Nx Console and GitHub repository supply-chain compromises, as reported by SANS |
Further reading
- Scoring differences: the 9.8 shown on this page is NVD’s CVSS 3.1 score; GitHub (the CNA) scores it 9.3 under CVSS 4.0. Both mark it as needing no user action, which fits the fact that auto-update alone delivered it. The GitHub advisory page showed no CWE or score when viewed, but the CVE record GitHub published carries CWE-506 and 9.3.
- Dates and durations disagree: the CVE/NVD description says May 19; every other source says May 18, which this page uses. Accounts of how long it stayed on the VS Code Marketplace also differ: the GHSA advisory and CVE record say 12:30 to 12:48, about 18 minutes. Nx’s postmortem timeline says it was unpublished at 12:47, about 17 minutes after upload and about 11 minutes after the 12:36 notification email, yet the same post’s opening summary says the package was “live ~11 minutes”, and StepSecurity, citing the official advisory, also says about 11. The sources don’t explain the gap (for example, whether upload time equals the time it became downloadable), so this page lists both.
- Ransomware flag: the CISA KEV record marks known ransomware campaign use as “Known”. This page reports that as CISA’s classification. None of the sources we read connects ransomware directly to the Nx Console incident. The only link is a group-level claim, relayed by Tenable and Snyk (Snyk attributes it to Unit 42, based on a BreachForums announcement), of a partnership between TeamPCP and the Vect ransomware group, and SANS reports the Vect leak site was still inactive in early June.
- The GitHub breach: GitHub called the attacker’s claims “directionally consistent” with its investigation and found no evidence that customer data outside internal repositories was affected. It rotated its secrets and its GitHub Enterprise Server signing key; GHES administrators must rotate the GPG key so future updates install. GitHub made no attribution.
- The wider campaign: security vendors call the upstream TanStack wave “Mini Shai-Hulud” and attribute it to TeamPCP. The TanStack advisory itself names no campaign, Unit 42 notes the worm’s source code went public on May 12, and SANS calls attribution for later waves ambiguous. Vendors also count the waves differently. No source says the Nx Console malware itself spread like a worm.
- Signed isn’t safe: the upstream TanStack packages carried valid SLSA Build Level 3 provenance. A valid signature proves which pipeline built a package, not that the code is harmless.
- AI angle: StepSecurity reports the payload read Claude Code’s settings file; the Nx postmortem does not mention AI at all.
- StepSecurity calls this the second supply-chain attack on Nx in under a year, after an npm incident in August 2025; we have not checked that against a primary source.
- Unconfirmed: why versions 18.96 to 18.99 were skipped, and whether the JetBrains plugin was affected.
Verification Checked item by item against sources by AI under our review rules, all passed; not human-reviewed and not yet reproduced in our lab
| AI review | 2026-09-29 · review rules |
|---|
Verification records describe the environment and the result only, never reproduction steps or code that could attack other people’s systems. See our policy.
Sources
- AdvisoryCompromised Nx Console version 18.95.0 (GHSA-c9j4-9m59-847w) · Nx (nrwl) via GitHub, 2026-05-18 · accessed 2026-09-23
- VendorPostmortem: Nx Console v18.95.0 supply-chain compromise · Nx, 2026-05-21 · accessed 2026-09-23
- Patch / releaseReleases · nrwl/nx-console · Nx (nrwl) via GitHub, 2026-05-18 · accessed 2026-09-23
- OtherWhy Nx Console is removed from VSCode Marketplace? (issue #3139) · GitHub (nrwl/nx-console), 2026-05-18 · accessed 2026-09-23
- AdvisoryCVE-2026-48027 record · CVE Program / GitHub (CNA), 2026-05-27 · accessed 2026-09-23
- CVE / NVD / OSVCVE-2026-48027 · NIST NVD, 2026-05-27 · accessed 2026-09-23
- CVE / NVD / OSVCVE-2026-45321 · NIST NVD, 2026-05-12 · accessed 2026-09-23
- AdvisoryMalware in 42 @tanstack/* packages exfiltrates cloud credentials, GitHub tokens, and SSH keys · TanStack via GitHub, 2026-05-11 · accessed 2026-09-23
- VendorInvestigating unauthorized access to GitHub's internal repositories · GitHub, 2026-05-20 · accessed 2026-09-23
- ResearchNx Console VS Code extension compromised · StepSecurity, 2026-05-18 · accessed 2026-09-23
- ResearchTanStack npm Packages Hit by Mini Shai-Hulud · Snyk, 2026-05-11 · accessed 2026-09-23
- ResearchMini Shai-Hulud Supply Chain Attack CVE-2026-45321 FAQ · Tenable, 2026-05-21 · accessed 2026-09-23
- ResearchTeamPCP Supply Chain Campaign: Activity Through 2026-06-07 · SANS Internet Storm Center, 2026-06-08 · accessed 2026-09-23
- ResearchThe npm Threat Landscape: Attack Surface and Mitigations · Palo Alto Networks Unit 42, 2026-07-15 · accessed 2026-09-23
- NewsGitHub Internal Repositories Breached via Malicious Nx Console VS Code Extension · The Hacker News, 2026-05-21 · accessed 2026-09-23
Press brief
In one sentence
Nx Console is a popular VS Code extension for developers. On May 18, 2026, attackers used access stolen from a contributor in an earlier package compromise to publish a booby-trapped version 18.95.0; users with auto-update on were hit without doing anything, and credentials for cloud and code platforms on their machines were stolen. GitHub said an employee's device was infected this way; the attacker claims about 3,800 internal repositories were taken, and GitHub said that was directionally consistent with its investigation so far. The US agency CISA added the flaw to its Known Exploited Vulnerabilities catalog on May 27.
Key facts
- Affected version
- 18.95.0 only; 18.100.0 or later is safe cveawg.mitre.org
- Severity
- CVSS 3.1 9.8 (NVD, the score this page shows); CVSS 4.0 9.3 (GitHub, the CNA) services.nvd.nist.gov
- Exposure window
- 2026-05-18, about 12:30–13:09 UTC nx.dev
- Added to CISA KEV
- 2026-05-27 (due 2026-06-10) services.nvd.nist.gov
- Downstream impact
- Attacker claims about 3,800 GitHub internal repositories taken (GitHub says directionally consistent; investigation ongoing) github.blog
Confirmed
- Attackers published a malicious Nx Console 18.95.0 that stole many kinds of credentials on startup (vendor advisory and postmortem).
- It started when a contributor's GitHub CLI token was stolen in the TanStack package compromise (CVE-2026-45321).
- GitHub confirmed an employee's device was infected by a poisoned VS Code extension and internal repositories were taken; the attacker claims about 3,800, which GitHub called "directionally consistent" with its investigation so far.
- CISA has added the flaw to its Known Exploited Vulnerabilities catalog.
Unconfirmed / disputed
- Incident date: the CVE/NVD text says May 19; the vendor, StepSecurity and GitHub all say May 18.
- KEV marks ransomware campaign use as "Known", but no source ties ransomware directly to this Nx Console incident.
- The vendor has not said exactly which credential or pipeline the attacker used to publish.
- How long it was on the VS Code Marketplace: the GHSA advisory and CVE record say it went up at 12:30 and came down at 12:48, about 18 minutes. The Nx postmortem timeline says it was unpublished at 12:47, about 17 minutes after upload and about 11 minutes after the notification email, but the same post's summary says the package was "live ~11 minutes", and StepSecurity, citing the official advisory, also says about 11 minutes. The sources do not explain the gap.
Quotable line
The malware didn't come from a shady website; it came from the project's own official repository, delivered by the automatic updates users trusted.
Images
Download the share image (PNG) · Attack flow diagram (downloadable)
Please credit "PlainCVE" and link to this page. Full citation format is under "How to cite" below. Found a factual error? Report it.
Nx Console 18.95.0 trojanized: a VS Code extension update that stole developer credentials Nx Console is a popular VS Code extension for developers. On May 18, 2026, attackers used access stolen from a contributor in an earlier package compromise to publish a booby-trapped version 18.95.0; users with auto-update on were hit without doing anything, and credentials for cloud and code platforms on their machines were stolen. GitHub said an employee's device was infected this way; the attacker claims about 3,800 internal repositories were taken, and GitHub said that was directionally consistent with its investigation so far. The US agency CISA added the flaw to its Known Exploited Vulnerabilities catalog on May 27. Key facts: - Affected version:18.95.0 only; 18.100.0 or later is safe(https://cveawg.mitre.org/api/cve/CVE-2026-48027) - Severity:CVSS 3.1 9.8 (NVD, the score this page shows); CVSS 4.0 9.3 (GitHub, the CNA)(https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=CVE-2026-48027) - Exposure window:2026-05-18, about 12:30–13:09 UTC(https://nx.dev/blog/nx-console-v18-95-0-postmortem) - Added to CISA KEV:2026-05-27 (due 2026-06-10)(https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=CVE-2026-48027) - Downstream impact:Attacker claims about 3,800 GitHub internal repositories taken (GitHub says directionally consistent; investigation ongoing)(https://github.blog/security/investigating-unauthorized-access-to-githubs-internal-repositories/) Confirmed: - Attackers published a malicious Nx Console 18.95.0 that stole many kinds of credentials on startup (vendor advisory and postmortem). - It started when a contributor's GitHub CLI token was stolen in the TanStack package compromise (CVE-2026-45321). - GitHub confirmed an employee's device was infected by a poisoned VS Code extension and internal repositories were taken; the attacker claims about 3,800, which GitHub called "directionally consistent" with its investigation so far. - CISA has added the flaw to its Known Exploited Vulnerabilities catalog. Unconfirmed / disputed: - Incident date: the CVE/NVD text says May 19; the vendor, StepSecurity and GitHub all say May 18. - KEV marks ransomware campaign use as "Known", but no source ties ransomware directly to this Nx Console incident. - The vendor has not said exactly which credential or pipeline the attacker used to publish. - How long it was on the VS Code Marketplace: the GHSA advisory and CVE record say it went up at 12:30 and came down at 12:48, about 18 minutes. The Nx postmortem timeline says it was unpublished at 12:47, about 17 minutes after upload and about 11 minutes after the notification email, but the same post's summary says the package was "live ~11 minutes", and StepSecurity, citing the official advisory, also says about 11 minutes. The sources do not explain the gap. 「The malware didn't come from a shady website; it came from the project's own official repository, delivered by the automatic updates users trusted.」— PlainCVE https://plaincve.date/en/vulns/cve-2026-48027-nx-console-malicious-extension
How to cite this page
This article is CC BY 4.0. Please keep the attribution and link when republishing.
PlainCVE Team (2026). "Nx Console 18.95.0 trojanized: a VS Code extension update that stole developer credentials". PlainCVE. https://plaincve.date/en/vulns/cve-2026-48027-nx-console-malicious-extension (accessed YYYY-MM-DD)BibTeX
@misc{cve202648027nxconsolemaliciousextension2026,
title = {Nx Console 18.95.0 trojanized: a VS Code extension update that stole developer credentials},
author = {PlainCVE Team},
year = {2026},
howpublished = {PlainCVE},
url = {https://plaincve.date/en/vulns/cve-2026-48027-nx-console-malicious-extension},
note = {Updated 2026-09-29}
}