GitHub Advisory malware sweep - 2026-08-27 batch (npm `hydration-vli-ui` ELF-in-JS Linux RAT + npm `commonjs-code-token` remote-eval C2 + npm `spotify-url-resolvers` Telegram-C2 project-dir exfil + npm `octopus-action` Burp Collaborator preinstall exfil + npm `chai-plus` `taskforge-9xv` second-stage installer + PyPI `pybitjs` Lazarus/PolinRider PTH-injection + PyPI `trongridet` TRX private-key exfil + PyPI PROBABLY_PENTEST cluster (4) + npm CWE-506 boilerplate (14))
24 new GHSA malware advisories in the 24h window ending 2026-08-27. Highlights: npm hydration-vli-ui@1.0.0 ships a Linux x86_64 ELF disguised as JavaScript, on import establishes a full-featured RAT with SSH-key theft and systemd persistence; npm commonjs-code-token postinstall pulls a token from access-token-delta.vercel.app and eval()s it; npm spotify-url-resolvers archives the project directory (including .env) hourly to a Telegram bot; PyPI pybitjs is attributed to Lazarus/PolinRider with blockchain-based C2 delivery.
- Threat actor
- Lazarus / PolinRider (attribution for Cluster F `pybitjs` only; other clusters unattributed)
- Detected by
- GitHub Advisory Database · OpenSSF malicious-packages · OpenSSF Package Analysis · Amazon Inspector
- Also known as
- 2026-08-27 GHSA sweep · 2026-08-hydration-vli-ui ELF RAT · 2026-08-commonjs-code-token remote eval · 2026-08-spotify-url-resolvers Telegram exfil · 2026-08-chai-plus taskforge-9xv · 2026-08-pybitjs Lazarus PolinRider · 2025-04-tronix TRX exfil
- Ecosystems
- npmPyPI
- Packages tracked
- 24
What happened
The 24-hour window ending 2026-08-27 06:00 UTC published 24 new GHSA malware advisories on npm and PyPI. Unusually high substantive-payload density: five npm entries and two PyPI entries ship real IOCs (source hashes, C2 endpoints, campaign attributions), the rest are boilerplate CWE-506 fills.
Cluster A - npm hydration-vli-ui@1.0.0 ELF-in-JS Linux RAT (highest severity)
| Package | Version | GHSA | Source hash | C2 | |---|---|---|---|---| | hydration-vli-ui | 1.0.0 | GHSA-8p96-6q9p-xvw5 | 44daff58…7d0480 | 217.60.77.63 |
Linux x86_64 ELF binary disguised as JavaScript. On import / require(), drops and executes the ELF; the RAT opens a command shell over /bin/sh and /bin/bash, SOCKS/port-forwarding tunnelling, arbitrary file drop-and-execute, in-memory execution via memfd_create, and persistence through systemd user units. Exfiltrates SSH private keys, saved credentials, local database files, clipboard contents, environment variables. No authentication required to open the C2.
The hydration-vli-ui name extends the same "hydration-*ui" naming burst first seen in the 2026-08-25 sweep (hydration-ui-cls, dim-hydration-ui, hydration-cls-ui) but the ELF-in-JS payload is a categorically bigger threat than the boilerplate CWE-506 siblings in that cluster.
Cluster B - npm commonjs-code-token remote-eval postinstall C2
| Package | Versions | GHSA | Source hash | C2 | |---|---|---|---|---| | commonjs-code-token | 1.0.0, 1.0.1 | GHSA-wq3w-3cqf-rjjj | c6ab469a…4883ad | access-token-delta.vercel.app |
Postinstall runs index.js, which fetches JSON from https://access-token-delta.vercel.app and passes the returned token field directly to eval(). Cover README copied from node-cache-multithread. The eval() channel means the operator can serve anything - one hour it is credential theft, the next it is a wallet-drain, the next it is a worm to publish under the maintainer's npm token.
Cluster C - npm spotify-url-resolvers Telegram-C2 project-dir exfil
| Package | Versions | GHSA | Source hash | C2 | |---|---|---|---|---| | spotify-url-resolvers | <= 3.4.2 | GHSA-mg73-v34h-w9f9 | 7318f0d7…b1cea | Telegram bot 8837512876:AAHXFLvmJBEYmVhXgjVNgdzx8s_eilP4RsM, chat 7549282259 |
On module load, starts an hourly loop that ZIPs the project directory (node_modules and .git excluded, .env included) and exfiltrates each archive to the Telegram bot. README carries Arabic-language instructions telling the reader to require() the module - a social hook rather than a lifecycle-script auto-execute. Any project that landed this package has had every .env in the tree captured hourly for the duration of exposure.
Cluster D - npm octopus-action Burp Collaborator preinstall exfil
| Package | Versions | GHSA | Source hash | C2 | |---|---|---|---|---| | octopus-action | <= 1.0.1 | GHSA-xp3r-4585-7gx2 | 6968c2a1…4c637f2 | dfwvktnc563cparn1p88c8051w7ovej3.oastify.com |
Preinstall lifecycle script POSTs hostname, OS username, home directory, DNS configuration, package metadata, /etc/passwd, and /etc/hosts to a Burp Collaborator endpoint over HTTPS. Whether the operator is a scoped bounty-hunter or an actor abusing Collaborator as throwaway C2 infrastructure is unknowable from the artefact alone; the leak is the same either way.
Cluster E - npm chai-plus taskforge-9xv second-stage installer
| Package | Versions | GHSA | Source hash | Stage-2 C2 | |---|---|---|---|---| | chai-plus | 6.2.3, 6.2.4, 6.2.5 | GHSA-m5q5-4fx8-hh2m (+ umbrella GHSA-2r27-f59g-4hcx) | b91b2220…b020d9 | taskforge-9xv@1.3.0 -> http://coolblast.zapto.org:8888 |
On import, bootstraps by running npm install --global taskforge-9xv@1.3.0 and immediately executes it with hardcoded arguments pointing at http://coolblast.zapto.org:8888 (unencrypted; dynamic-DNS via zapto.org) with an embedded token. The chai typosquat surface is enormous - chai is the default assertion library for Mocha and one of the most-downloaded testing packages on npm.
Cluster F - PyPI pybitjs Lazarus/PolinRider blockchain-C2
| Package | Version | GHSA | Source hash | Campaign | |---|---|---|---|---| | pybitjs | 0.1.0 | GHSA-wv93-5fvj-96j3 | 8cf3b727…23c8 | 2026-08-pybitjs (Lazarus / PolinRider) |
Obfuscated JavaScript-based malware inside a PyPI wheel; downloads additional stages from a blockchain-based C2 channel (delivery resolved on-chain to defeat static block-listing). Persistence via PTH file injection re-detonates at every Python startup. Attribution aligned to Lazarus APT / PolinRider based on payload characteristics and embedded indicators - continues the year-long pattern of Lazarus-tagged PyPI wallet-theft waves.
Cluster G - PyPI trongridet TRX (Tron) private-key exfil
| Package | Version | GHSA | Source hash | Campaign | |---|---|---|---|---| | trongridet | 0.0.1 | GHSA-6q35-8j6x-jx75 | d37e7917…5a3483 | 2025-04-tronix |
Designed for Tron (TRX) private-key exfiltration. README lifted from a legitimate crypto library. Repeated PyPI uploads under variant names indicate an organised campaign against Tron users.
Cluster H - PyPI PROBABLY_PENTEST setup.py IP+username exfil (4 packages)
| Package | Versions | GHSA | Source hash | |---|---|---|---| | bigquery-agent-analytics-tracing | 0.0.0, 0.0.1 | GHSA-3757-66f7-2vxg | 08fbff35…02ad99 | | 0xfighter3 | 0.1 | GHSA-w8cx-q6rx-qfj2 | 5a97978…ff36f | | syntaxerror-package-12345 | 0.1 | GHSA-pg4p-fr45-wfxc | ede434c…171d9 | | rce-test | 0.1 | GHSA-5j7w-88pp-6hpr | c27b8e5…0fa2d |
All follow the same shape: setup.py override runs at install, exfiltrates host IP and OS username to a bounty / pentest endpoint. OpenSSF PA classifies as PROBABLY_PENTEST / GENERIC-standard-pypi-install-pentest. bigquery-agent-analytics-tracing reads as a legitimate Google BigQuery integration and is the highest-risk of the four for accidental transitive resolution in a CI job.
Cluster I - npm 2026-08-27 boilerplate CWE-506 (3 packages)
| Package | GHSA | Note | |---|---|---| | node-pino | GHSA-w294-7cjj-7mvg | pino typosquat (highest priority - pino is one of the most-downloaded loggers on npm) | | parallely | GHSA-rmhx-v9xh-x4jv | Generic name | | bnotify-web-sdk | GHSA-h2p9-v9rw-px6c | Browser-notify SDK lookalike |
Cluster J - npm 2026-08-26 boilerplate / lookalike tail (11 packages)
| Package | Versions | GHSA | Note | |---|---|---|---| | svelte-vli-ui | >= 0 | GHSA-hxqf-cq68-wh37 | Extends 2026-08-25 Svelte/hydration lookalike burst | | hydration-vli-ui (umbrella) | >= 0 | GHSA-v229-xfmv-q98w | Umbrella; 1.0.0 is the ELF RAT above | | chai-plus (umbrella) | >= 0 | GHSA-2r27-f59g-4hcx | Umbrella; 6.2.3-6.2.5 are the typosquat above | | self-certificates | >= 0 | GHSA-rwg4-cx82-h5hq | Cert-tooling probe (paired with self-sign) | | self-sign | >= 0 | GHSA-9jvg-g3cg-g557 | Cert-tooling probe (paired with self-certificates) | | shai_hulululud | >= 0 | GHSA-c83w-r5p2-qhmj | Anti-AI-scanner protestware first catalogued 2026-06-16; GHSA is new, package is not - updated in the existing module rather than duplicated here | | dumb-binding-gyp-package | >= 0 | GHSA-p8h8-j624-2qhc | Native-module probe | | model-poc-suhail | >= 0 | GHSA-cpqg-wgv2-g29r | Researcher-named PoC | | zenntechinc-cli | 1.6.4, 1.6.6 | GHSA-6wh9-pcqw-jp9j | Specific versions only (1.6.5 clean) - consistent with maintainer-account-takeover injection | | the_tax_free_cashier_is_at_9f | >= 0 | GHSA-4hc4-fpvc-7chp | Throwaway themed name | | grandfather_of_the_desert | >= 0 | GHSA-fjvc-xq44-gq59 | Throwaway themed name | | tset_racie | >= 0 | GHSA-7978-5fh2-74q2 | Throwaway themed name |
Registry state
All 24 packages yanked from npm / PyPI during the 2026-08-26 / 2026-08-27 takedown windows. shai_hulululud@1.0.48596 remained resolvable at last check (protestware, not yanked) - the new GHSA formalises it as malware for tooling that reads GHSA.
Related tracked activity
- Extended Vue/Svelte/Vite hydration lookalike burst (Cluster A
hydration-vli-ui, Cluster Jsvelte-vli-ui): continuation of the 2026-08-25 burst catalogued in multi-2026-08-26-ghsa-malware-sweep Cluster F. Thevli-uisub-namespace is a new twist; watch for further<framework>-<any3>-uipublishes. - Lazarus / PolinRider PyPI wallet-theft (Cluster F
pybitjs): continues the pattern last seen incommon-stack-generate-plugin/ PolinRider and multiple 2026 PyPI Lazarus waves. chaityposquat surface (Cluster Echai-plus): thechaiassertion library is one of the highest-download testing packages on npm; verifychairesolves to the canonical package on every install.- Burp Collaborator abuse as throwaway supply-chain C2 (Cluster D
octopus-action): the*.oastify.comdomain family has legitimate bug-bounty use but no benign inbound-egress reason from production infrastructure; consider a blanket egress block for CI runners. - Dynamic-DNS second-stage C2 (Cluster E
taskforge-9xv->coolblast.zapto.org):*.zapto.organd similar dynamic-DNS providers (ddns.net,hopto.org,no-ip.org) show up repeatedly as stage-2 C2 - a blanket egress block from CI is a low-cost, high-value control. - Discovery credits:
GitHub Advisory Database,OpenSSF malicious-packages,OpenSSF Package Analysis,Amazon Inspector(Cluster E credit), Lazarus / PolinRider attribution for Cluster F.
Affected packages (24)
- PyPI0xfighter30.1
- PyPIbigquery-agent-analytics-tracing0.0.00.0.1
- npmbnotify-web-sdk
- npmchai-plus6.2.36.2.46.2.5
- npmcommonjs-code-token1.0.01.0.1
- npmdumb-binding-gyp-package
- npmgrandfather_of_the_desert
- npmhydration-vli-ui1.0.0
- npmmodel-poc-suhail
- npmnode-pino
- npmoctopus-action1.0.01.0.1
- npmparallely
- PyPIpybitjs0.1.0
- PyPIrce-test0.1
- npmself-certificates
- npmself-sign
- npmspotify-url-resolvers3.4.2
- npmsvelte-vli-ui
- PyPIsyntaxerror-package-123450.1
- npmtaskforge-9xv1.3.0
- npmthe_tax_free_cashier_is_at_9f
- PyPItrongridet0.0.1
- npmtset_racie
- npmzenntechinc-cli1.6.41.6.6
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
- Cluster A - npm
hydration-vli-ui@1.0.0ELF-in-JS Linux RAT (2026-08-26, 1 package, 1 version):hydration-vli-ui@1.0.0(GHSA-8p96-6q9p-xvw5, source hash44daff58b8bb4bd4dfad78141323781dc5972c3b5e5a4506834c2e69ff7d0480, C2217.60.77.63). The package contains a Linux x86_64 ELF binary disguised as a JavaScript file. Onrequire()/import, the wrapper drops and executes the ELF, which opens a full-featured RAT: command shell over/bin/shand/bin/bash; SOCKS / port-forwarding tunnelling; arbitrary file drop-and-execute; in-memory execution viamemfd_create(leaves no on-disk artefact after load); persistence through systemd user units; exfiltration of SSH private keys, saved credentials, local database files, clipboard contents, and environment variables. No authentication is required to open the C2 - activation is on import alone. This is the highest-severity entry in the batch: any Linux host that installedhydration-vli-ui@1.0.0should be treated as root-compromised at the level of "attacker has an interactive shell right now"; systemd user-unit persistence survives casual reinstall of the developer tree - Cluster B - npm
commonjs-code-tokenremote-eval postinstall C2 (2026-08-26, 1 package, 2 versions):commonjs-code-token@1.0.0, 1.0.1(GHSA-wq3w-3cqf-rjjj, source hashc6ab469a55ec3f0650bc2185b91e884304cf1e370b1e17992a328479ce4883ad, C2access-token-delta.vercel.app). The postinstall hook runsindex.js, which fetches JSON fromhttps://access-token-delta.vercel.appand passes the returnedtokenfield directly toeval(). Whatever the operator chooses to serve at that endpoint is what runs on the installing host, with full node privileges. The README is copied fromnode-cache-multithreadas cover story; the package has no legitimate functionality. Any host that rannpm install commonjs-code-token(either version) is a live remote-command channel until the operator lets go of the Vercel deployment. Rotate everything the install user had access to; theeval()return is unbounded so this is credential-theft, wallet-theft, or worm-propagation depending on what the operator served that hour - Cluster C - npm
spotify-url-resolversTelegram-C2 project-directory exfil (2026-08-26, 1 package):spotify-url-resolvers<=3.4.2(GHSA-mg73-v34h-w9f9, source hash7318f0d70d44a05847fe3363f59c4e1465df1ecab43fc87757c324397e2b1cea). On module load the package starts an hourly loop that archives the installer's project directory into a ZIP (excludingnode_modules/.git, but including.env) and exfiltrates each archive to a Telegram bot (8837512876:AAHXFLvmJBEYmVhXgjVNgdzx8s_eilP4RsM, chat7549282259). The README carries Arabic-language instructions encouraging the reader torequire()the module - a social hook targeting Arabic-speaking developers. Any project that landed this package has had every source file plus every.envfile in the working tree hourly-uploaded to the operator; assume every secret in every.envfile is compromised and rotate now. Block the Telegram bot token and chat ID at the egress proxy if you have one - Cluster D - npm
octopus-actionBurp Collaborator preinstall exfil (2026-08-26, 1 package):octopus-action<=1.0.1(GHSA-xp3r-4585-7gx2, source hash6968c2a12f60b671ee163f42c9da14ed51d9b0b29486b4a7d1bf5014b4c637f2, C2dfwvktnc563cparn1p88c8051w7ovej3.oastify.com). The preinstall lifecycle script runs automatically duringnpm installand POSTs system information over HTTPS to a Burp Collaborator endpoint onoastify.com: hostname, OS username, home directory, DNS configuration, package metadata, plus the full contents of/etc/passwdand/etc/hosts. This is the classic bug-bounty / red-team reconnaissance package pattern; whether the operator is a bounty-hunter probing scoped programs or an actor using Collaborator as convenient throwaway infrastructure is unknowable from the artefact alone. Any CI runner that resolved this package leaked its/etc/passwdand internal/etc/hosts(which routinely contains internal hostnames not otherwise resolvable). Rotate CI runner secrets and audit/etc/hostsfor anything internal-topology-revealing - Cluster E - npm
chai-plustaskforge-9xvsecond-stage installer (2026-08-26, 1 package, 3 versions):chai-plus@6.2.3, 6.2.4, 6.2.5(GHSA-m5q5-4fx8-hh2m, source hashb91b222013b099c570003ced5265988a19121921b071ee183cdbe304e2b020d9; a companion GHSA-2r27-f59g-4hcx marks all versions boilerplate-compromised). On module import the bootstrap functionnpm install --global taskforge-9xv@1.3.0(silently) and then executes the installed package with hardcoded arguments pointing athttp://coolblast.zapto.org:8888(unencrypted HTTP; dynamic DNS viazapto.org) with an embedded authentication token. Errors are silently swallowed. The name is achaiassertion-library typosquat targeting developers who mistype the ubiquitous test-framework install. Any host that landedchai-plusshould assumetaskforge-9xv@1.3.0was installed globally as a stage-2 backdoor; auditnpm ls -gfor it and remove - Cluster F - PyPI
pybitjsLazarus/PolinRider blockchain-C2 (2026-08-26, 1 package, 1 version):pybitjs@0.1.0(GHSA-wv93-5fvj-96j3, source hash8cf3b72788a1ad482702768ea3b7f958793a0997cf77342578c31bc6dcfd23c8, campaign2026-08-pybitjs). Ships obfuscated JavaScript-based malware inside a PyPI wheel; downloads additional stages from a blockchain-based C2 channel (delivery is resolved on-chain to defeat static block-listing). Persistence via PTH file injection ensures the payload re-detonates at every Python startup, not just install time. Attribution: aligned to Lazarus APT / PolinRider based on payload characteristics and embedded indicators - the same operator behind the earlier PyPI wallet-theft waves this year. High-confidence targeted infostealer - Cluster G - PyPI
trongridetTRX (Tron) private-key exfil (2026-08-26, 1 package, 1 version):trongridet@0.0.1(GHSA-6q35-8j6x-jx75, source hashd37e79174370b2dcd44b05ddb583e65d2e0b878033aa0702653294dc965a3483, campaign2025-04-tronix). Designed for cryptocurrency private-key exfiltration targeting Tron (TRX) users. Repeated PyPI uploads under variant names, README lifted from a legitimate crypto library to blend in. Any host with a Tron wallet that ranpip install trongridetshould be considered wallet-compromised; move funds off-chain from a clean device - Cluster H - PyPI PROBABLY_PENTEST setup.py IP+username exfil cluster (2026-08-26, 4 packages):
bigquery-agent-analytics-tracing@0.0.0, 0.0.1(GHSA-3757-66f7-2vxg, hash08fbff35384a45aedc39545dd2a174889a1c35f3e6c9d044c2c201905402ad99),0xfighter3@0.1(GHSA-w8cx-q6rx-qfj2, hash5a97978609c71d681a69a2da613c5e52b257a2062d7805b8db25243db50ff36f),syntaxerror-package-12345@0.1(GHSA-pg4p-fr45-wfxc, hashede434cf61641064a49939821778e511c3fcf8afab7e443582b8b103e13171d9),rce-test@0.1(GHSA-5j7w-88pp-6hpr, hashc27b8e593dc0298e09bb4a5fd6acc68dc03bf324bdc7267e87482fdd10b0fa2d). All follow the same shape:setup.pyoverride runs at install time, exfiltrates host IP and OS username. OpenSSF Package Analysis classifies asPROBABLY_PENTEST/GENERIC-standard-pypi-install-pentest. Thebigquery-agent-analytics-tracingname is the highest-risk of the four - it reads as a legitimate Google BigQuery integration and an unattended CI job auto-installing on transitive resolve of a "bigquery" search would land it. The others (0xfighter3,syntaxerror-package-12345,rce-test) read as bug-bounty PoCs but the same payload channel could ship arbitrary command execution - Cluster I - npm 2026-08-27 boilerplate CWE-506 (3 packages):
node-pino(GHSA-w294-7cjj-7mvg) -pinologger typosquat,node-<popular>prefix pattern targeting the ubiquitouspinostructured logger, highest priority in this cluster;parallely(GHSA-rmhx-v9xh-x4jv) - generic name;bnotify-web-sdk(GHSA-h2p9-v9rw-px6c) - lookalike "browser notify SDK". All>= 0, all CWE-506 boilerplate ("considered fully compromised") with no per-package IOCs published - Cluster J - npm 2026-08-26 boilerplate/lookalike tail (11 packages):
svelte-vli-ui(GHSA-hxqf-cq68-wh37) andhydration-vli-ui >= 0(GHSA-v229-xfmv-q98w) - continuations of the 2026-08-25 Vue/Svelte/Vite lookalike burst under the newvli-uisub-namespace (the specifichydration-vli-ui@1.0.0version is the RAT above;>= 0boilerplate is the umbrella advisory);chai-plus >= 0(GHSA-2r27-f59g-4hcx) - umbrella advisory for thechaityposquat above;self-certificates(GHSA-rwg4-cx82-h5hq) andself-sign(GHSA-9jvg-g3cg-g557) - paired probes for self-signed-cert tooling;shai_hulululud(GHSA-c83w-r5p2-qhmj) - the anti-AI-scanner protestware first catalogued 2026-06-16 now has a formal GHSA (same package, no new version, updated in the existingnpm-2026-06-16-shai-hulululud-ai-scanner-protestware.tsmodule);dumb-binding-gyp-package(GHSA-p8h8-j624-2qhc) - native-module probe;model-poc-suhail(GHSA-cpqg-wgv2-g29r) - researcher-named PoC;zenntechinc-cli@1.6.4, 1.6.6(GHSA-6wh9-pcqw-jp9j) - specific-version compromise of azenntechincCLI (odd version pattern - 1.6.4 and 1.6.6 but not 1.6.5, consistent with maintainer-account-takeover injecting into published-but-scattered versions);the_tax_free_cashier_is_at_9f(GHSA-4hc4-fpvc-7chp),grandfather_of_the_desert(GHSA-fjvc-xq44-gq59),tset_racie(GHSA-7978-5fh2-74q2) - throwaway themed names, no per-package IOCs
What to do
- 1Grep every lockfile (
package-lock.json,yarn.lock,pnpm-lock.yaml,requirements.txt,Pipfile.lock,poetry.lock,uv.lock) for:hydration-vli-ui,commonjs-code-token,spotify-url-resolvers,octopus-action,chai-plus,pybitjs,trongridet,bigquery-agent-analytics-tracing,0xfighter3,syntaxerror-package-12345,rce-test,node-pino,parallely,bnotify-web-sdk,svelte-vli-ui,self-certificates,self-sign,shai_hulululud,dumb-binding-gyp-package,model-poc-suhail,zenntechinc-cli,the_tax_free_cashier_is_at_9f,grandfather_of_the_desert,tset_racie - 2For Cluster A (
hydration-vli-ui@1.0.0Linux RAT): any Linux host that installed this package should be treated as root-compromised at the level of "attacker has an interactive shell right now". Kill the machine now if it is a shared host or CI runner. Hunt for systemd user units created in the exposure window (systemctl --user list-unit-files --state=enabled+ls -la ~/.config/systemd/user/). Search for the ELF hash44daff58…7d0480in EDR retrospective queries. Block C2 IP217.60.77.63at egress. Rotate every SSH key on the host and revoke the corresponding public keys from every server that authorized them; rotate every credential harvested from~/.aws,~/.docker,~/.kube,~/.npmrc,~/.pypirc, browser profiles.memfd_create-executed payloads leave no on-disk artefact - assume the malware ran even if disk scanning finds nothing - 3For Cluster B (
commonjs-code-tokenremote eval): uninstall from every project. Rotate every credential the install user (or the shared CI service account) had access to during the exposure window. Because the eval channel serves arbitrary content and can vary hour-to-hour, "the machine looked fine yesterday" is not a signal. Blockaccess-token-delta.vercel.appat the egress proxy. Push source hashc6ab469a…4883adto endpoint scanning - 4For Cluster C (
spotify-url-resolversTelegram-C2): every.envfile on every host that landed this package has been exfiltrated on the hourly loop. Rotate every secret in every.envfile in every affected project - assume API keys, DB passwords, cloud credentials, and OAuth tokens are all compromised. Block Telegram bot token8837512876:AAHXFLvmJBEYmVhXgjVNgdzx8s_eilP4RsM(and if you can, the chat ID7549282259) at the egress proxy. Also block generic outbound toapi.telegram.orgfrom CI runners unless required - 5For Cluster D (
octopus-actionBurp Collaborator exfil): rotate CI runner secrets on any runner that resolved this package. Audit/etc/hostson the affected host for any internal-topology hostnames leaked to the operator. Block*.oastify.comat egress (Burp Collaborator is a legitimate bug-bounty tool but has no benign inbound-egress reason from production infrastructure) - 6For Cluster E (
chai-plustyposquat): auditnpm ls -gfortaskforge-9xv@1.3.0and remove it - the second-stage payload globally installs itself and survives uninstalling the initialchai-plustyposquat. Blockcoolblast.zapto.org(and pattern*.zapto.orgif practical - dynamic-DNS providers have almost no benign use from production infrastructure) - 7For Cluster F (
pybitjsLazarus/PolinRider): any Python interpreter on a host that ranpip install pybitjs==0.1.0re-detonates the payload at every Python startup via PTH injection.pip uninstallis not sufficient - hunt for injected.pthfiles undersite-packages/on every affected environment and remove them by hand. Because C2 delivery is on-chain, network-based block-listing of a single domain will not work; the reliable control is to nuke the affected virtual environment and rebuild from a locked, hash-verified requirements file - 8For Cluster G (
trongridetTRX exfil): any Tron wallet on a host that installedtrongridet==0.0.1should be considered private-key-compromised. Move Tron funds off from a clean host now - 9For Cluster H (PyPI PROBABLY_PENTEST): uninstall from every environment.
bigquery-agent-analytics-tracingis the highest-risk name - any org running BigQuery integrations should audit CI pip resolves for accidental transitive pulls. Even the "harmless" pentest payload channel could ship anything the operator chooses; treat as low-signal but not zero - 10For Cluster I (2026-08-27 npm boilerplate):
node-pinois the highest-risk - developers who mistypepino(the ubiquitous structured logger with ~30M weekly downloads) or search for a "node-pino" wrapper will land the malicious variant. Verify everypinoinstall resolves topinoon the@pinoscope - 11For all
pip installruns in CI, prefer--only-binary=:all:and pin to source hashes - Clusters F, G, H all execute at install time via setup.py or wheel side-effects - 12For all
npm installruns in CI, run with--ignore-scriptswhere possible - Clusters B, C, D, E all execute via install lifecycle scripts or onrequire().--ignore-scriptsalone does NOT stop payloads that fire onrequire()(Clusters A, C, E) - a separate policy is needed to keep the package out of the tree in the first place - 13Verify none of these packages still resolves via your private mirror - internal caches routinely keep serving yanked tarballs after the public takedown
References
- GitHubGHSA-8p96-6q9p-xvw5 - hydration-vli-ui@1.0.0 (npm Linux x86_64 ELF-in-JS RAT with systemd persistence)github.com
- GitHubGHSA-wq3w-3cqf-rjjj - commonjs-code-token (npm postinstall remote-eval C2 via Vercel)github.com
- GitHubGHSA-mg73-v34h-w9f9 - spotify-url-resolvers (npm hourly project-dir ZIP exfil to Telegram bot)github.com
- GitHubGHSA-xp3r-4585-7gx2 - octopus-action (npm preinstall /etc/passwd + /etc/hosts exfil to Burp Collaborator)github.com
- GitHubGHSA-m5q5-4fx8-hh2m - chai-plus@6.2.3-6.2.5 (npm chai typosquat with taskforge-9xv second-stage installer)github.com
- GitHubGHSA-2r27-f59g-4hcx - chai-plus umbrella (npm chai typosquat, all versions)github.com
- GitHubGHSA-wv93-5fvj-96j3 - pybitjs (PyPI Lazarus/PolinRider PTH-injection blockchain-C2)github.com
- GitHubGHSA-6q35-8j6x-jx75 - trongridet (PyPI Tron TRX private-key exfil)github.com
- GitHubGHSA-3757-66f7-2vxg - bigquery-agent-analytics-tracing (PyPI PROBABLY_PENTEST setup.py exfil)github.com
- GitHubGHSA-w8cx-q6rx-qfj2 - 0xfighter3 (PyPI PROBABLY_PENTEST setup.py exfil)github.com
- GitHubGHSA-pg4p-fr45-wfxc - syntaxerror-package-12345 (PyPI PROBABLY_PENTEST setup.py exfil)github.com
- GitHubGHSA-5j7w-88pp-6hpr - rce-test (PyPI PROBABLY_PENTEST setup.py exfil)github.com
- GitHubGHSA-w294-7cjj-7mvg - node-pino (npm pino logger typosquat, CWE-506)github.com
- GitHubGHSA-rmhx-v9xh-x4jv - parallely (npm CWE-506 boilerplate)github.com
- GitHubGHSA-h2p9-v9rw-px6c - bnotify-web-sdk (npm CWE-506 boilerplate)github.com
- GitHubGHSA-hxqf-cq68-wh37 - svelte-vli-ui (npm Svelte lookalike extension)github.com
- GitHubGHSA-v229-xfmv-q98w - hydration-vli-ui umbrella (npm >= 0)github.com
- GitHubGHSA-rwg4-cx82-h5hq - self-certificates (npm cert-tooling probe)github.com
- GitHubGHSA-9jvg-g3cg-g557 - self-sign (npm cert-tooling probe)github.com
- GitHubGHSA-c83w-r5p2-qhmj - shai_hulululud (npm anti-AI-scanner protestware; formalises the June disclosure)github.com
- GitHubGHSA-p8h8-j624-2qhc - dumb-binding-gyp-package (npm native-module probe)github.com
- GitHubGHSA-cpqg-wgv2-g29r - model-poc-suhail (npm researcher-named PoC)github.com
- GitHubGHSA-6wh9-pcqw-jp9j - zenntechinc-cli@1.6.4, 1.6.6 (npm specific-version compromise)github.com
- GitHubGHSA-4hc4-fpvc-7chp - the_tax_free_cashier_is_at_9f (npm throwaway CWE-506)github.com
- GitHubGHSA-fjvc-xq44-gq59 - grandfather_of_the_desert (npm throwaway CWE-506)github.com
- GitHubGHSA-7978-5fh2-74q2 - tset_racie (npm throwaway CWE-506)github.com
- GitHubGitHub Advisory Database - recent npm malware advisoriesgithub.com
- GitHubGitHub Advisory Database - recent pip malware advisoriesgithub.com