GitHub Advisory npm CWE-506 sweep - 91-package 2026-07-30/07-31 batch (`@peptide-packets` biotech scope pair, socket.io/mongoose/passport typosquat burst, ethers.js/rlp/fs-extra impersonator kit, `nano-perf` postinstall daemon C2, late-07-31 MCP-namespace burst, `@0xlr` dep-confusion PoC scope, `@spending-behavior-ui`/`@finance-ui`/`@mplay-*`/`@sof-assistant-*` enterprise dep-confusion sweep, `rollup-plugin-polyfill-hold`/`-helper` pair, `paraglide-js@1.0.1` takeover-style drop)
GHSA published 91 npm CWE-506 advisories 2026-07-30–07-31: existing 25-pkg batch (@peptide-packets, socket.io/mongoose/passport typos, ethers/rlp/fs-extra, nano-perf C2) plus a late-07-31 66-pkg wave - MCP-namespace burst (13), @0xlr dep-confusion PoC scope (10), enterprise internal-scope dep-confusion sweep (15 scoped pkgs), broad unscoped typosquats (25), rollup-plugin-polyfill-hold/-helper pair, paraglide-js@1.0.1 takeover.
- Detected by
- GitHub Advisory Database · npm Security
- Also known as
- 2026-07-30/07-31 GHSA npm batch · @peptide-packets operator continuation · socket.io/mongoose/passport typosquat burst · ethers.js/rlp/fs-extra impersonator kit · late-07-31 MCP-namespace burst · @0xlr dep-confusion PoC scope · enterprise internal-scope dep-confusion sweep 2026-07-31 · paraglide-js 1.0.1 takeover
- Ecosystems
- npm
- Packages tracked
- 92
What happened
On 2026-07-30 and 2026-07-31, the GitHub Advisory Database published 91 new npm CWE-506 (Embedded Malicious Code) advisories - 8 dated 2026-07-30 and 83 dated 2026-07-31. This module was originally catalogued with the first-25 subset visible at yesterday's ingest snapshot; the 2026-08-01 update adds the additional 66 late-07-31 packages that landed after the previous ingest ran, grouped into five new clusters E–I.
Clear operator-cluster structure across nine thematic groups plus a scatter of single-package RATs indicates a wave of coordinated multi-package campaigns rather than 91 unrelated typosquats. The late-07-31 wave in particular reads as a single burst of orchestrated dep-confusion / typosquat activity targeting: (a) the MCP-server namespace (Anthropic MCP tooling), (b) enterprise internal-scope namespaces at multiple large organisations, and (c) the modern SaaS-integration stack (Sentry / Prisma / Vercel Analytics / Stripe / Clerk / Supabase - via the @0xlr PoC scope).
Cluster A - @peptide-packets/* operator-continuation of @peptide-unit (2 packages, all >= 0, all 2026-07-31)
| Package | Notes | |---|---| | @peptide-packets/peptide-modify | identical name to @peptide-unit/peptide-modify (07-29) | | @peptide-packets/js-unimode | identical name to @peptide-unit/js-unimode (07-29) |
This is a direct operator continuation of the 2026-07-29 @peptide-unit pair catalogued in npm-2026-07-30-ghsa-malware-sweep Cluster C. The two package names - peptide-modify (a plausibly-domain-specific peptide-analysis tool) paired with the nonsense-name js-unimode - are identical between the two scopes. Two publishes 48h apart under different attacker-owned scopes with the same package-name pair is unambiguously the same operator continuing to enumerate the internal-library namespace of a peptide-analysis / biotech target. This is the second recurrence of a dep-confusion probe against the same biotech target namespace - treat every @peptide-* scope as attacker-controlled until proven otherwise.
Cluster B - socket.io / mongoose / passport typosquat burst (8 packages, all >= 0, all 2026-07-31)
| Package | Legitimate target | |---|---| | socketi | socket.io | | soccketio | socket.io | | socktio | socket.io | | scketio | socket.io | | mongostose | mongoose | | moontose | mongoose | | passsport1 | passport | | passtpor | passport |
Same-day publish across 8 typosquats of three of the most-installed npm packages. Socket.IO / Mongoose / Passport together dominate the Node.js real-time / DB / auth stack for tutorial-driven Express codebases - the exact class of app where a paste-error from a tutorial or an ChatGPT-generated snippet delivers a lockfile hit. Coordinated broad-scatter typosquat kit rather than targeted operation.
Cluster C - ethers.js / rlp / fs-extra impersonator kit (8 packages, all >= 0, all 2026-07-30)
| Package | Legitimate target | |---|---| | ethe.json | ethers (v6 JSON-RPC provider) | | ethers.json | ethers (v6 JSON-RPC provider) | | ethersss | ethers | | rlp.git | rlp (Recursive-Length-Prefix, Ethereum wire encoding) | | rlp-master | rlp | | fsextrra | fs-extra | | fs-extra-master | fs-extra | | node-fs-extra-master | fs-extra |
The ethers + rlp co-occurrence points at Ethereum wallet / dApp developer targeting - rlp is a niche low-level Ethereum encoding library that only Ethereum-tooling developers pull in directly, and paired with ethers typosquats in the same batch it is a coordinated wallet-drainer kit. Same operator profile as the earlier 2026-06 polymarket-clob-math-vercel-loader and 2026-06 ts-einkle-ankle-wallet-cluster campaigns targeting Ethereum-tooling developer namespaces.
The fs-extra cluster in the same batch is more generic - fs-extra is a universal Node.js filesystem-utility (>50M weekly downloads) - but the -master suffix pattern (rlp-master, fs-extra-master, node-fs-extra-master) suggests all three came out of the same attacker-controlled fork-repository-naming template.
Cluster D - misc single-package RATs and exact-version drops (7 packages, 2026-07-31 unless noted)
| Package | Version | Notes | |---|---|---| | nano-perf | 2.2.0 | postinstall script launches daemon.js as detached unreferenced process for covert C2 - targeted exact-version drop | | redis-type-xyz | 1.10.6 | exact-version drop, Redis-type-annotation impersonation | | @dexwilt/node-fetch | 2.7.3 | attacker-scoped node-fetch typosquat - legitimate node-fetch@2.7.0 is the current v2 line so 2.7.3 pins to catch upgrade-path resolution | | @sudoughnym/enviro-demo | all | scoped "environment demo" - generic RAT boilerplate | | vcse | all | generic-name upload | | asdsafsadad | all | junk-name upload, likely researcher / red-team test | | asdsafsafdasdsaasdasda | all | junk-name upload, likely researcher / red-team test |
High-signal picks: nano-perf@2.2.0 is the standout - the GHSA advisory explicitly notes a postinstall script that launches daemon.js as a detached, unreferenced process, meaning a postinstall C2 handshake that survives the CI job that installed it. redis-type-xyz@1.10.6 and @dexwilt/node-fetch@2.7.3 are exact-version drops (rather than the more common all-versions typosquat) - the operator wants specific-version dependency-graph hits, not broad scatter.
The two asd… junk-name entries are almost certainly researcher / red-team test uploads left in the wild, but GHSA flagged them CWE-506 and they are catalogued here for completeness - a lockfile hit on either name is still an incident (either genuine malware or an unauthorised test).
Cluster E - MCP-namespace typosquat / impersonator wave (13 packages, all 2026-07-31, added 2026-08-01)
| Package | Notes | |---|---| | refbase-mcp | MCP-server namespace | | hit-mcp | MCP-server namespace | | mcp-server-boilerplate | high-signal generic-name land-grab | | iwomm-mcp | MCP-server namespace | | chaos-mcp | chaos-engineering + MCP fusion name | | gtm-mcp-auth | GTM (Google Tag Manager) MCP-auth impersonator | | sap-mcp-facilitator | SAP MCP integration namespace | | sap-mcp-config | SAP MCP integration namespace | | maximumsats-mcp | domain-specific MCP namespace | | kip-mcp-http | KIP MCP HTTP transport | | pm-claude-skills-mcp | Claude Skills MCP integration - targeted at Anthropic Claude Skills users | | smart-npv-mcp | domain-specific MCP namespace | | routerbase-mcp | MCP-server namespace |
Coordinated same-day burst against the Model Context Protocol namespace. Anthropic MCP tooling is the fastest-growing package category in npm and every mid-2026 GHSA batch has featured MCP-namespace typosquats. pm-claude-skills-mcp explicitly targets Claude Skills users - the operator is enumerating MCP-adjacent product-namespace real estate broadly. The generic mcp-server-boilerplate name is a namespace land-grab against a common project-scaffolding search phrase.
Cluster F - @0xlr/@404c3s4r scoped researcher/red-team PoC batch (11 packages, all 2026-07-31, added 2026-08-01)
| Package | Notes | |---|---| | @0xlr/dep-confusion-poc | smoking-gun name - literal PoC declaration | | @0xlr/sentry-web | Sentry error-tracking dep-confusion probe | | @0xlr/prisma-client-js | Prisma ORM dep-confusion probe | | @0xlr/vercel-analytics | Vercel Analytics dep-confusion probe | | @0xlr/stripe-checkout-js | Stripe SDK dep-confusion probe | | @0xlr/stripe-frontend | Stripe SDK dep-confusion probe | | @0xlr/clerk-auth | Clerk auth SDK dep-confusion probe | | @0xlr/supabase-db | Supabase DB SDK dep-confusion probe | | @0xlr/test-callback | generic test / callback probe | | @0xlr/question-types | generic probe | | @404c3s4r/lodash | lodash impersonator on separate attacker scope |
Every name in the @0xlr scope is a plausible enterprise dep-confusion target across the modern SaaS integration stack (Sentry / Prisma / Vercel Analytics / Stripe / Clerk / Supabase). The literal dep-confusion-poc sibling name outs this as almost-certainly a red-team / security-researcher enumeration exercise rather than a criminal operation - but GHSA flagged all 11 as CWE-506 and they are catalogued here for completeness. A lockfile hit is still an incident (either genuine malware or an unauthorised researcher upload with the same on-install exfil footprint), and the naming pattern is a useful lesson in how the enterprise-integration stack namespace is enumerable.
Cluster G - enterprise internal-scope dep-confusion sweep (15 packages, all 2026-07-31, added 2026-08-01)
| Package | Notes | |---|---| | @spending-behavior-ui/widget-insights | fintech-analytics scope | | @spending-behavior-ui/cashflow-widget | fintech-analytics scope | | @finance-ui/finance-view | fintech scope | | @finance-ui/snackbar-ifpe | fintech scope (IFPE = Instituición de Fondos de Pago Electrónico - Mexican fintech regulator) | | @nordic-dev/linting-tools | Nordic-region dev tooling scope | | @fuji-web-components/maps | Fuji web-components scope | | @meli-testing/jest-react | MercadoLibre (meli) testing scope | | @sw-commons-components/message-upsell | "sw" internal scope | | @mplay-core-lib/utilities | mplay- scope, possibly a media-player enterprise | | @mplay-frontend-ui/link | mplay- scope | | @global-theme/context | design-system scope | | @one-chat/react | chat product scope | | @sof-assistant-fe-lib/vertical-faqs | SoF assistant frontend scope | | @mp-op-ss-front-lib/tracks | mp-op-ss internal scope | | @cr-invested-ui-components/chart | Crédito Real / CR-Invested UI scope |
All 15 packages follow the canonical @<internal-org-scope>/<internal-package-name> dep-confusion probe pattern. The scope-name distinctness (5–10 different enterprises implied) means this is a broad enumeration campaign against multiple large orgs - the attacker publishes plausible internal-package-name shape into the public npm scope namespace on the bet that at least one target org has misconfigured .npmrc always-auth + scope-to-registry mapping. The @finance-ui/snackbar-ifpe name (IFPE is a Mexican fintech regulator) and @meli-testing/jest-react (MercadoLibre) suggest a Latin-American fintech / marketplace target concentration in this batch.
Cluster H - broad-scatter unscoped dep-confusion / typosquats (25 packages, all 2026-07-31, added 2026-08-01)
| Package | Notes | |---|---| | paraglide-js (1.0.1) | typosquat / squat against the legit paraglide-js i18n library - 1.0.1 version pin catches tutorial / example refs | | create-remotion | Remotion video-tooling namespace (create-* scaffold-name land-grab) | | capacitor-assets | Capacitor mobile-tooling namespace (legit @capacitor/assets exists) | | fast-csv-helper | fast-csv typosquat (dominant CSV parser, 4M weekly downloads) | | vite-tsconfig-svg / vite-config-svg / react-hot-svg | Vite plugin / React tooling namespace | | polyprompt, goldenflow-js, install-native-host, ai-backup-script, iac-scanner | generic-sounding tool names | | eth-bridge, kelly-stake | crypto-adjacent generic names | | frontend-regulations, metrics-ui, sso-users-detection, notifications-broadcast, portway, allurectl, adpanel-core, hazmat-cfr, attio-discover | enterprise-app-sounding internal-name shape | | community-published, process-status-widget, polylabel-web-lib | misc |
This unscoped subset is the wide-net counterpart to Cluster G - same operator pattern (plausible internal package names) but on the unscoped part of the npm namespace where any org that pushed internal libraries without scoping is exposed. paraglide-js@1.0.1 is a namespace-adjacent takeover attempt on the legitimate paraglide-js i18n library.
Cluster I - rollup-plugin-polyfill-* pair (2 packages, both 2026-07-31, added 2026-08-01)
| Package | Notes | |---|---| | rollup-plugin-polyfill-hold | rollup-plugin-polyfill-* namespace | | rollup-plugin-polyfill-helper | rollup-plugin-polyfill-* namespace |
Echoes the earlier npm-2026-07-03-jfrog-lazarus-rollup-polyfill-ottercookie DPRK Lazarus / OtterCookie campaign that targeted the same rollup-plugin-polyfill-* naming template. These two 07-31 entries carry only the generic CWE-506 boilerplate with no explicit actor attribution - treat as adjacent to the earlier Lazarus wave until a researcher writeup (JFrog / ReversingLabs / Socket / Wiz) explicitly attributes.
Registry state
All 91 packages security-replaced during the 2026-07-30 / 07-31 batch. Original version tarballs are no longer resolvable on the public registry, but private mirrors (Verdaccio, Artifactory, Nexus) that cached tarballs BEFORE the takedown WILL keep serving the original versions.
Related tracked activity
- Cluster A directly extends the 07-29
@peptide-unit/*pair catalogued innpm-2026-07-30-ghsa-malware-sweepCluster C - same operator, new scope. - Cluster C extends the operator space around
npm-2026-07-08-injectivelabs-sdk-ts-crypto-wallet-drain,npm-2026-06-27-ts-einkle-ankle-wallet-cluster, andnpm-2026-06-27-polymarket-clob-math-vercel-loader- all targeting Ethereum-tooling developer namespaces. nano-perf@2.2.0postinstall-daemon pattern echoesnpm-2026-06-18-nastyc2-rust-implant-droppersand the earliernpm-2026-04-15-kindo-selfbot-xwormpostinstall-C2 handshake patterns.- Cluster E (MCP-namespace burst) extends the mid-2026 MCP-typosquat trend - see
npm-2026-07-30-ghsa-malware-sweepandmulti-2026-04-29-promptmink-validate-sdk. Companion PyPI-side MCP activity inpypi-2026-07-31-ghsa-malware-sweepCluster C (mcp-search-server). - Cluster G (internal-scope dep-confusion) extends the same operator pattern catalogued in
npm-2026-06-29-internal-scope-dep-confusion-clusterandpypi-2026-07-21-ghsa-mass-backfill. - Cluster I (
rollup-plugin-polyfill-*pair) is a plausible extension ofnpm-2026-07-03-jfrog-lazarus-rollup-polyfill-ottercookie(DPRK Lazarus / OtterCookie), pending explicit vendor attribution. - No
threatActorfield is set - GHSA advisories in this batch use only the CWE-506 boilerplate with no named actor attribution. Cluster F reads as a red-team/researcher exercise but is unattributed.
Affected packages (92)
- npm@0xlr/clerk-auth1.0.0
- npm@0xlr/dep-confusion-poc1.0.0
- npm@0xlr/prisma-client-js1.0.0
- npm@0xlr/question-types1.0.0
- npm@0xlr/sentry-web1.0.0
- npm@0xlr/stripe-checkout-js1.0.0
- npm@0xlr/stripe-frontend1.0.0
- npm@0xlr/supabase-db1.0.0
- npm@0xlr/test-callback1.0.0
- npm@0xlr/vercel-analytics1.0.0
- npm@404c3s4r/lodash1.0.0
- npm@cr-invested-ui-components/chart1.0.0
- npm@dexwilt/node-fetch2.7.3
- npm@finance-ui/finance-view1.0.0
- npm@finance-ui/snackbar-ifpe1.0.0
- npm@fuji-web-components/maps1.0.0
- npm@global-theme/context1.0.0
- npm@meli-testing/jest-react1.0.0
- npm@mp-op-ss-front-lib/tracks1.0.0
- npm@mplay-core-lib/utilities1.0.0
- npm@mplay-frontend-ui/link1.0.0
- npm@nordic-dev/linting-tools1.0.0
- npm@one-chat/react1.0.0
- npm@peptide-packets/js-unimode1.0.0
- npm@peptide-packets/peptide-modify1.0.0
- npm@sof-assistant-fe-lib/vertical-faqs1.0.0
- npm@spending-behavior-ui/cashflow-widget1.0.0
- npm@spending-behavior-ui/widget-insights1.0.0
- npm@sudoughnym/enviro-demo1.0.0
- npm@sw-commons-components/message-upsell1.0.0
- npmadpanel-core1.0.0
- npmai-backup-script1.0.0
- npmallurectl1.0.0
- npmasdsafsadad1.0.0
- npmasdsafsafdasdsaasdasda1.0.0
- npmattio-discover1.0.0
- npmcapacitor-assets1.0.0
- npmchaos-mcp1.0.0
- npmcommunity-published1.0.0
- npmcreate-remotion1.0.0
- npmeth-bridge1.0.0
- npmethe.json1.0.0
- npmethers.json1.0.0
- npmethersss1.0.0
- npmfast-csv-helper1.0.0
- npmfrontend-regulations1.0.0
- npmfs-extra-master1.0.0
- npmfsextrra1.0.0
- npmgoldenflow-js1.0.0
- npmgtm-mcp-auth1.0.0
- npmhazmat-cfr1.0.0
- npmhit-mcp1.0.0
- npmiac-scanner1.0.0
- npminstall-native-host1.0.0
- npmiwomm-mcp1.0.0
- npmkelly-stake1.0.0
- npmkip-mcp-http1.0.0
- npmmaximumsats-mcp1.0.0
- npmmcp-server-boilerplate1.0.0
- npmmetrics-ui1.0.0
- npmmongostose1.0.0
- npmmoontose1.0.0
- npmnano-perf2.2.0
- npmnode-fs-extra-master1.0.0
- npmnotifications-broadcast1.0.0
- npmparaglide-js1.0.1
- npmpasssport11.0.0
- npmpasstpor1.0.0
- npmpm-claude-skills-mcp1.0.0
- npmpolylabel-web-lib1.0.0
- npmpolyprompt1.0.0
- npmportway1.0.0
- npmprocess-status-widget1.0.0
- npmreact-hot-svg1.0.0
- npmredis-type-xyz1.10.6
- npmrefbase-mcp1.0.0
- npmrlp-master1.0.0
- npmrlp.git1.0.0
- npmrollup-plugin-polyfill-helper1.0.0
- npmrollup-plugin-polyfill-hold1.0.0
- npmrouterbase-mcp1.0.0
- npmsap-mcp-config1.0.0
- npmsap-mcp-facilitator1.0.0
- npmscketio1.0.0
- npmsmart-npv-mcp1.0.0
- npmsoccketio1.0.0
- npmsocketi1.0.0
- npmsocktio1.0.0
- npmsso-users-detection1.0.0
- npmvcse1.0.0
- npmvite-config-svg1.0.0
- npmvite-tsconfig-svg1.0.0
These are usually pulled in as transitive dependencies rather than installed directly. Check your whole tree at once - it runs in your browser and nothing is uploaded.
Impact
- Any host that installed any of the 91 npm packages listed below should be treated as fully compromised - every GHSA record uses the CWE-506 boilerplate: "any computer that has this package installed or running should be considered fully compromised - rotate all secrets from a different computer" - and no patched version exists
- *Cluster A - `@peptide-packets/
biotech scope pair, operator-continuation of@peptide-unit** (2 packages, all>= 0, all 2026-07-31):@peptide-packets/peptide-modify,@peptide-packets/js-unimode. These are **identical siblings** to the 2026-07-29@peptide-unit/peptide-modify+@peptide-unit/js-unimodepair catalogued innpm-2026-07-30-ghsa-malware-sweep- same nonsensejs-unimodepaired with samepeptide-modify` name, but under a new attacker-controlled scope. Two publishes 48h apart under different scopes with the same package-name pair is unambiguously the same operator continuing to enumerate the internal-library namespace of a peptide-analysis / biotech target - Cluster B - socket.io / mongoose / passport typosquat burst (8 packages, all
>= 0, all 2026-07-31):socketi,soccketio,socktio,scketio(socket.iotypos),mongostose,moontose(mongoosetypos),passsport1,passtpor(passporttypos). Same-day publish across 8 typosquats of three of the most-installed npm packages (Socket.IO >4M weekly, Mongoose >3M weekly, Passport >2M weekly) - coordinated broad-scatter typosquat kit rather than targeted operation - Cluster C - ethers.js / rlp / fs-extra impersonator kit (8 packages, all
>= 0, all 2026-07-30):ethe.json,ethers.json,ethersss(etherstypos, Ethereum wallet interaction library),rlp.git,rlp-master(rlptypos - Recursive-Length-Prefix, Ethereum wire-format encoding),fsextrra,fs-extra-master,node-fs-extra-master(fs-extratypos). The ethers + rlp co-occurrence points at Ethereum wallet / dApp developer targeting - same operator profile as the 07-31 socket.io burst and prior@ts-einkle-ankle-wallet-cluster/polymarket-clob-math-vercel-loadercampaigns - Cluster D - misc single-package RATs and exact-version drops (7 packages, mostly 2026-07-31):
nano-perf@2.2.0(postinstall script launchesdaemon.jsas detached unreferenced process for covert C2 - targeted exact-version drop),redis-type-xyz@1.10.6(exact-version drop, Redis-type-annotation impersonation),@dexwilt/node-fetch@2.7.3(attacker-scopednode-fetchtyposquat - legitimatenode-fetch@2.7.0is the current v2 line so 2.7.3 pins to catch upgrade-path resolution),@sudoughnym/enviro-demo,vcse, plus two obvious junk-name uploads (asdsafsadad,asdsafsafdasdsaasdasda- likely researcher / red-team test uploads, but GHSA flagged malware so catalogued for completeness) - Cluster E - MCP-namespace typosquat / impersonator wave (added 2026-08-01) (13 packages, all 2026-07-31):
refbase-mcp,hit-mcp,mcp-server-boilerplate,iwomm-mcp,chaos-mcp,gtm-mcp-auth,sap-mcp-facilitator,maximumsats-mcp,sap-mcp-config,kip-mcp-http,pm-claude-skills-mcp,smart-npv-mcp,routerbase-mcp. Coordinated same-day burst against the Model Context Protocol namespace - Anthropic MCP-server tooling is the fastest-growing package category in npm and every mid-2026 GHSA batch has featured MCP typosquats.pm-claude-skills-mcpexplicitly targets Claude-Skills-namespace developer workflows - Cluster F -
@0xlr/@404c3s4rscoped researcher/red-team PoC batch (added 2026-08-01) (11 packages, all 2026-07-31):@0xlr/dep-confusion-poc(name is the smoking-gun - literal "PoC" declaration),@0xlr/sentry-web,@0xlr/prisma-client-js,@0xlr/vercel-analytics,@0xlr/stripe-checkout-js,@0xlr/test-callback,@0xlr/clerk-auth,@0xlr/question-types,@0xlr/stripe-frontend,@0xlr/supabase-db,@404c3s4r/lodash. Every name in the@0xlrscope is a plausible enterprise dep-confusion target (Sentry / Prisma / Vercel Analytics / Stripe / Clerk / Supabase - the modern SaaS stack) - this reads as a red-team / security-researcher enumeration exercise, but GHSA flagged all 11 as CWE-506 and they are catalogued for completeness. A lockfile hit is still an incident (either genuine malware or an unauthorised researcher upload) - Cluster G - enterprise internal-scope dep-confusion sweep (added 2026-08-01) (15 packages, all 2026-07-31):
@spending-behavior-ui/widget-insights,@spending-behavior-ui/cashflow-widget,@finance-ui/finance-view,@finance-ui/snackbar-ifpe(fintech UI namespace - Mercado Pago / Nubank / similar Latin-American fintech target profile),@nordic-dev/linting-tools,@fuji-web-components/maps,@meli-testing/jest-react(MercadoLibre),@sw-commons-components/message-upsell,@mplay-core-lib/utilities,@mplay-frontend-ui/link,@global-theme/context,@one-chat/react,@sof-assistant-fe-lib/vertical-faqs,@mp-op-ss-front-lib/tracks,@cr-invested-ui-components/chart. All 15 are@<internal-org-scope>/<internal-package-name>shape - canonical dep-confusion probe pattern targeting the internal-library namespaces of 5–10 large enterprises (based on the scope-name distinctness). Any lockfile hit means the target org's private-scope resolution fell through to the public registry - Cluster H - broad-scatter unscoped dep-confusion / typosquats (added 2026-08-01) (25 packages, all 2026-07-31):
paraglide-js@1.0.1(typosquat of the legitimate paraglide-js i18n library - the1.0.1version pin is designed to land on tutorials or examples referencing v1),create-remotion(Remotion video-tooling namespace),capacitor-assets(Capacitor mobile-tooling namespace - legit@capacitor/assetsexists),paraglide-js,fast-csv-helper(fast-csv typosquat),vite-tsconfig-svg,react-hot-svg,vite-config-svg(vite plugin-namespace typosquats),polyprompt,goldenflow-js,install-native-host,ai-backup-script,iac-scanner,eth-bridge,kelly-stake,frontend-regulations,metrics-ui,sso-users-detection,notifications-broadcast,portway,allurectl(Allure testing tooling),adpanel-core,hazmat-cfr,attio-discover,community-published,process-status-widget,polylabel-web-lib - *Cluster I - `rollup-plugin-polyfill-
pair (added 2026-08-01)** (2 packages, both 2026-07-31):rollup-plugin-polyfill-hold,rollup-plugin-polyfill-helper. Echoes the earliernpm-2026-07-03-jfrog-lazarus-rollup-polyfill-ottercookieDPRK campaign - samerollup-plugin-polyfill-*` naming template used by DPRK Lazarus / OtterCookie operators, though these two carry only the generic CWE-506 boilerplate with no explicit actor attribution. Treat as adjacent to the earlier Lazarus rollup-polyfill wave until researcher writeups confirm otherwise - None of the 91 packages retain original tarballs on the public npm registry - all replaced with security sentinels during takedown. Private registry mirrors (Verdaccio, Artifactory, Nexus) that cached tarballs BEFORE the takedown WILL keep serving the original versions
What to do
- 1Grep every lockfile (
package-lock.json,yarn.lock,pnpm-lock.yaml) for each name in the packages map below. Any match is a supply-chain incident: rotate every credential the build runner could reach and re-image the build host - 2Cluster C (ethers.js / rlp / fs-extra kit): any hit on any of the 8 packages on a host that runs Ethereum wallet software, dApp code, or holds signing keys: treat as full crypto-wallet-compromise event. Move funds via a clean device BEFORE attempting rotation. Rotate every dev-wallet seed phrase, MetaMask account, and hardware-wallet PIN accessible from the affected host
- 3Cluster B (socket.io/mongoose/passport typosquat burst): fix the misspelling in
package.jsonbefore re-installing - a typo hit is often a paste error from a tutorial or ChatGPT-generated snippet. Rotate any session-signing secrets, MongoDB connection strings, and OAuth client secrets that the compromised app touched - 4*Cluster A (`@peptide-packets/
)**: configure.npmrcscope-to-registry mapping so private-scope resolution never falls through to the public registry. Also add@peptide-unit` to the same allow-list - same operator, same target namespace - 5Cluster D single-package hits:
nano-perf@2.2.0andredis-type-xyz@1.10.6are exact-version drops - targeted rather than broad scatter. If either hits your lockfile, treat the build host as compromised and audit outbound network for the daemon.js C2 channel.@dexwilt/node-fetch@2.7.3targets developers on the v2 line - pin to the legitimatenode-fetch@^2.7.0fromgithub.com/node-fetch/node-fetchand verify the resolved integrity hash - 6For projects using
postinstall-scripting packages, runnpm install --ignore-scriptsin CI as defense-in-depth -nano-perf@2.2.0demonstrates that a postinstall-launched detached daemon can survive the CI job that installed it - 7Clusters E–I (added 2026-08-01): for MCP-namespace typosquats (Cluster E) - audit any developer machine running Model-Context-Protocol server tooling and pin MCP dependencies via
overridesinpackage.jsonto trusted registry paths. For@0xlr/@404c3s4r(Cluster F) - treat any hit as an incident regardless of researcher-vs-genuine origin; unauthorised researcher uploads still exfiltrate on install. For internal-scope dep-confusion (Cluster G) - every organisation should audit their.npmrcalways-auth+ scope-to-registry mappings for@spending-behavior-ui,@finance-ui,@mplay-*,@sof-assistant-*,@sw-commons-components,@meli-testing,@mp-op-ss-front-lib,@cr-invested-ui-components- a public-registry fall-through resolves the attacker package. For unscoped Cluster H - theparaglide-js@1.0.1drop is a takeover-style attempt on a namespace close to the legit paraglide-js library; verify the resolved integrity hash matches the real project's current registry entry - 8Verify none of the 91 listed packages still resolves via your private mirror - internal Artifactory / Nexus / Verdaccio instances routinely cache tarballs and will keep serving the original versions after the public yank
References
- GitHubGitHub Advisory Database - recent npm malware advisoriesgithub.com
- GitHubGHSA-9q28-pqxf-8mgj - @peptide-packets/peptide-modify malware advisorygithub.com
- GitHubGHSA-c4rp-69c2-g2m3 - @peptide-packets/js-unimode malware advisorygithub.com
- GitHubGHSA-9gmr-4p5m-j5vr - socketi malware advisorygithub.com
- GitHubGHSA-6j64-8q3f-7w69 - soccketio malware advisorygithub.com
- GitHubGHSA-q2q2-2vj8-r6q4 - socktio malware advisorygithub.com
- GitHubGHSA-xgm9-mpc5-qf5w - scketio malware advisorygithub.com
- GitHubGHSA-6ww9-9hr9-f9m9 - mongostose malware advisorygithub.com
- GitHubGHSA-3675-4v4m-cxv9 - moontose malware advisorygithub.com
- GitHubGHSA-whq9-wwww-4g3q - passsport1 malware advisorygithub.com
- GitHubGHSA-j9c9-vv76-9f83 - passtpor malware advisorygithub.com
- GitHubGHSA-v4xp-v255-r8cp - ethe.json malware advisorygithub.com
- GitHubGHSA-q64r-f9q5-x6m3 - ethers.json malware advisorygithub.com
- GitHubGHSA-h2m8-726m-9cxp - ethersss malware advisorygithub.com
- GitHubGHSA-79vf-868m-fv3g - rlp.git malware advisorygithub.com
- GitHubGHSA-pcfm-f78r-p9wq - rlp-master malware advisorygithub.com
- GitHubGHSA-224j-655w-2vrq - fsextrra malware advisorygithub.com
- GitHubGHSA-cg95-x585-4q9p - fs-extra-master malware advisorygithub.com
- GitHubGHSA-9qpq-q9v6-pw27 - node-fs-extra-master malware advisorygithub.com
- GitHubGHSA-4f46-w499-cvxr - nano-perf malware advisorygithub.com
- GitHubGHSA-9c7w-936w-35px - redis-type-xyz malware advisorygithub.com
- GitHubGHSA-xqj6-r3qp-9rx9 - @dexwilt/node-fetch malware advisorygithub.com
- GitHubGHSA-77gf-97j3-jv6p - @sudoughnym/enviro-demo malware advisorygithub.com
- GitHubGHSA-84xr-327r-c8vf - vcse malware advisorygithub.com
- GitHubGHSA-7j38-gr5c-v4mv - asdsafsadad malware advisorygithub.com
- GitHubGHSA-ffx4-p8v3-667v - asdsafsafdasdsaasdasda malware advisorygithub.com
- GitHubGHSA-5xcj-w4qg-g78g - refbase-mcp malware advisorygithub.com
- GitHubGHSA-fmvj-j52v-97x4 - hit-mcp malware advisorygithub.com
- GitHubGHSA-694g-9jgf-5566 - mcp-server-boilerplate malware advisorygithub.com
- GitHubGHSA-8cvf-hpjg-mf2j - iwomm-mcp malware advisorygithub.com
- GitHubGHSA-8whv-6hc5-4wpr - chaos-mcp malware advisorygithub.com
- GitHubGHSA-4ch5-wcxv-58j5 - gtm-mcp-auth malware advisorygithub.com
- GitHubGHSA-fvh4-59gv-h4qp - sap-mcp-facilitator malware advisorygithub.com
- GitHubGHSA-4j2q-gh4v-v729 - sap-mcp-config malware advisorygithub.com
- GitHubGHSA-mr5v-ffrr-c4h3 - maximumsats-mcp malware advisorygithub.com
- GitHubGHSA-993p-762h-628r - kip-mcp-http malware advisorygithub.com
- GitHubGHSA-87v2-285p-xhrr - pm-claude-skills-mcp malware advisorygithub.com
- GitHubGHSA-972c-x84x-rm4f - smart-npv-mcp malware advisorygithub.com
- GitHubGHSA-rxc6-q384-2wrx - routerbase-mcp malware advisorygithub.com
- GitHubGHSA-r4wg-xfm2-45qv - @0xlr/dep-confusion-poc malware advisory (smoking-gun name)github.com
- GitHubGHSA-pq34-wqrw-jw86 - @0xlr/sentry-web malware advisorygithub.com
- GitHubGHSA-mrxf-wq2g-xvxm - @0xlr/prisma-client-js malware advisorygithub.com
- GitHubGHSA-p9mc-hf7g-gjfx - @0xlr/vercel-analytics malware advisorygithub.com
- GitHubGHSA-3fr8-m4cc-93fj - @0xlr/stripe-checkout-js malware advisorygithub.com
- GitHubGHSA-c3gr-xj4c-rc53 - @0xlr/stripe-frontend malware advisorygithub.com
- GitHubGHSA-57r8-xw4c-5j59 - @0xlr/clerk-auth malware advisorygithub.com
- GitHubGHSA-236w-q9vm-8r42 - @0xlr/supabase-db malware advisorygithub.com
- GitHubGHSA-p6vh-r7p3-72r9 - @0xlr/test-callback malware advisorygithub.com
- GitHubGHSA-3x4g-gcc2-3jrc - @0xlr/question-types malware advisorygithub.com
- GitHubGHSA-3357-xmhq-8r86 - @404c3s4r/lodash malware advisorygithub.com
- GitHubGHSA-m955-rhgf-m5fx - @spending-behavior-ui/widget-insights malware advisorygithub.com
- GitHubGHSA-mqcg-v4cw-rgr3 - @spending-behavior-ui/cashflow-widget malware advisorygithub.com
- GitHubGHSA-cwvh-hhv3-v52q - @finance-ui/finance-view malware advisorygithub.com
- GitHubGHSA-rcgh-7xjx-4rh6 - @finance-ui/snackbar-ifpe malware advisorygithub.com
- GitHubGHSA-95g5-jx8f-9835 - @nordic-dev/linting-tools malware advisorygithub.com
- GitHubGHSA-qmwr-pvcq-hhrm - @fuji-web-components/maps malware advisorygithub.com
- GitHubGHSA-2rh8-4vrh-7vh3 - @meli-testing/jest-react malware advisorygithub.com
- GitHubGHSA-8w99-rvcw-j7cf - @sw-commons-components/message-upsell malware advisorygithub.com
- GitHubGHSA-w8v3-x4pv-78rp - @mplay-core-lib/utilities malware advisorygithub.com
- GitHubGHSA-xxrf-9xmw-rq5r - @mplay-frontend-ui/link malware advisorygithub.com
- GitHubGHSA-whq3-7x3r-pv39 - @global-theme/context malware advisorygithub.com
- GitHubGHSA-598h-mgjc-c42f - @one-chat/react malware advisorygithub.com
- GitHubGHSA-chhc-9q4w-p5vq - @sof-assistant-fe-lib/vertical-faqs malware advisorygithub.com
- GitHubGHSA-rcc9-cq4p-xv77 - @mp-op-ss-front-lib/tracks malware advisorygithub.com
- GitHubGHSA-8g97-c5r5-8hjr - @cr-invested-ui-components/chart malware advisorygithub.com
- GitHubGHSA-433p-gj42-fh44 - paraglide-js malware advisorygithub.com
- GitHubGHSA-947j-5gjp-7968 - create-remotion malware advisorygithub.com
- GitHubGHSA-8v58-g8f8-2gpp - capacitor-assets malware advisorygithub.com
- GitHubGHSA-c65v-4v4c-jcpr - fast-csv-helper malware advisorygithub.com
- GitHubGHSA-3w4v-4hp3-9934 - vite-tsconfig-svg malware advisorygithub.com
- GitHubGHSA-46cj-57m5-r4wc - react-hot-svg malware advisorygithub.com
- GitHubGHSA-qhvp-2j38-vcxv - vite-config-svg malware advisorygithub.com
- GitHubGHSA-h574-ghq2-gh4p - polyprompt malware advisorygithub.com
- GitHubGHSA-7gxf-x4v3-6vq7 - goldenflow-js malware advisorygithub.com
- GitHubGHSA-4wvg-prm7-99h4 - install-native-host malware advisorygithub.com
- GitHubGHSA-34m8-mhm4-w3q4 - ai-backup-script malware advisorygithub.com
- GitHubGHSA-69pc-2883-mff3 - iac-scanner malware advisorygithub.com
- GitHubGHSA-5hj6-99cc-g84q - eth-bridge malware advisorygithub.com
- GitHubGHSA-9x8c-c54x-vgrv - kelly-stake malware advisorygithub.com
- GitHubGHSA-hf3r-x49q-fxm2 - frontend-regulations malware advisorygithub.com
- GitHubGHSA-g4m5-r29v-w7gh - metrics-ui malware advisorygithub.com
- GitHubGHSA-x9p4-637q-6wjw - sso-users-detection malware advisorygithub.com
- GitHubGHSA-hh3x-6gh6-rhxf - notifications-broadcast malware advisorygithub.com
- GitHubGHSA-j5q6-x29x-2v5x - portway malware advisorygithub.com
- GitHubGHSA-gpj6-4r9m-prh8 - allurectl malware advisorygithub.com
- GitHubGHSA-jhrx-465c-725f - adpanel-core malware advisorygithub.com
- GitHubGHSA-g8cx-prcq-676p - hazmat-cfr malware advisorygithub.com
- GitHubGHSA-h74v-846x-863c - attio-discover malware advisorygithub.com
- GitHubGHSA-cr3h-6mq7-f6q9 - community-published malware advisorygithub.com
- GitHubGHSA-rvcg-4hj7-jmv2 - process-status-widget malware advisorygithub.com
- GitHubGHSA-4x59-mhxh-4ghc - polylabel-web-lib malware advisorygithub.com
- GitHubGHSA-7p2c-jxw4-jxvv - rollup-plugin-polyfill-hold malware advisorygithub.com
- GitHubGHSA-583c-qcpm-pcw6 - rollup-plugin-polyfill-helper malware advisorygithub.com