GitHub Advisory malware sweep - 2026-09-28 (late) + 2026-09-29 (donutautosellsrc campaign extends to pip `aseitylab` day 3; npm `hardhat-*` pino-impersonator Ethereum-dev lure; npm `nebula-*` Windows `.kntrat` RAT dropper family; npm `fabric-*` Minecraft credential stealer via Discord webhook; npm `chalk-figlet` family Windows RuntimeBroker.exe dropper; npm `dotenv`-lookalike JPEG-EXIF steganography → PowerShell chain; npm `simple-date-formatter-new-12` OAST SSRF probe)
GHSA 2026-09-28 (late) + 2026-09-29: 26 new advisories - 25 npm + 1 pip. Cluster A extends the donutautosellsrc Polygon-blockchain-C2 pip campaign to aseitylab (day 3, 6 packages now under wallet 0x9c0a507300fd902787bb193d80fca5ce6e1bff9a). Clusters B-F are four distinct npm operators active in the window: hardhat pino-impersonator, nebula-* Windows .kntrat RAT, fabric-* Minecraft-credential Discord-webhook stealer, chalk-figlet RuntimeBroker.exe dropper. Cluster K is 4 npm CWE-506 boilerplate takedowns with no analysis.
- Incident type
- Advisory sweep. A dated batch of GitHub Advisory Database malware entries collected together. A sweep mixes kinds - typosquats, dependency-confusion probes, boilerplate takedowns with no published analysis, and occasionally real payloads - and its severity reflects the worst confirmed item, not the batch as a whole.
- Detected by
- GitHub Advisory Database · OpenSSF malicious-packages · OpenSSF Package Analysis · Amazon Inspector
- Also known as
- 2026-09-29 GHSA npm+pip sweep · donutautosellsrc Polygon-blockchain C2 campaign day 3 (aseitylab) · hardhat-* npm pino-impersonator Ethereum-developer lure · nebula-* npm .kntrat Windows RAT dropper family · fabric-* npm Minecraft credential stealer Discord webhook 1554065488726990909 · chalk-figlet figlet-chalk-render npm RuntimeBroker.exe dropper 104.234.65.75 · native-env dotenv-native npm JPEG-EXIF steganography wscript.exe PowerShell · test-agency-assignment npm process-hollowing dropper · items-validator npm game.spawnrealm.com in-process persistent loader · rai6jaisahthaghee5ou-loader-package npm browser XSS injector nee1ahnaw7.xsses.link · simple-date-formatter-new-12 npm Baidu SSRF probe .oast.fun
- Ecosystems
- npmPyPI
- Packages tracked
- 25
What happened
Between roughly 2026-09-28 12:00 UTC and 2026-09-29 12:00 UTC, the GitHub Advisory Database (with the OpenSSF malicious-packages bulk export, Amazon Inspectors IN-MAL feed, and kam193/bad-packages) published 26 new malware advisories: 25 npm and 1 pip. The defensively noteworthy shape of this window is a clear split: (a) the pip donutautosellsrc Polygon-blockchain-C2 campaign has now run for 3 consecutive days across 6 named packages under one wallet; (b) four distinct npm operators launched on 2026-09-28 with multi-package families (hardhat pino-impersonator, nebula- Windows RAT, fabric- Minecraft credential stealer, chalk-figlet RuntimeBroker dropper); (c) two unrelated Windows droppers (native-env/dotenv-native JPEG-EXIF chain, test-agency-assignment` process-hollowing chain) reuse the wscript.exe → PowerShell delivery pattern that has been common in this corpus.
Cluster A - pip aseitylab extends the donutautosellsrc Polygon-blockchain campaign to day 3
aseitylab@0.1.0/0.1.1 (GHSA-jv9w-2v63-767g, MAL-2026-17240) publishes today with the same primitive stack as the 2026-09-27 donutautosellsrc origin and the 2026-09-28 aseity/coinscan/donutpromotion/claudedashbord extension:
- Steganography - image with executable bytes hidden in image data.
- Native Python C-extension infostealer - drops compiled
.so/.pydmodules carrying the obfuscated stealer. - Polygon-blockchain-resolved C2 - queries a public Polygon RPC endpoint for the transaction history of attacker-controlled wallet
0x9c0a507300fd902787bb193d80fca5ce6e1bff9aand parses the C2 endpoint from transaction metadata.
Same payload SHA-256 d03c42c275f0dbc617428441508c49ae1adcbbc95af4eeb094bca4e4f8943f3e as yesterdays four. Naming reads as a variant expansion of aseity` (yesterday) - the operator is re-using lure names with suffixes.
Classify as malicious-package (fresh name, real payload). The campaign is now known to span 6 pip packages across 3 days. Yesterdays record already covers the domain/hash/IOC set; todays addition is that the operator continues to publish without disruption.
Cluster B - npm hardhat-* pino-impersonator Ethereum-developer lure
Four npm packages under names close-adjacent to the Nomic Foundation hardhat Ethereum development framework:
hardhat-lock@2.21.0(GHSA-crqg-xv46-qmmw): impersonatespino(README, LICENSE, docs/ copied verbatim). Ships a ~4MBlib/config.jsobfuscated with a 23,981-entry rotated string array, hex-escaped tokens, control-flow flattening, 40,131+ inline decoder replacements. Executes automatically at import.hardhat-zet@2.0.1(GHSA-qqvr-prmw-6pq2): same pino impersonation. 4,498,609-byte obfuscatedlib/configwith 26,113-entry rotated string array and hex-encoded identifiers. Public no-op Express middleware surface. Author claimed asRobert King <hello@jsonspack.com>, bug trackerjsonspack.com/issues. Source SHA-25637cd33c0908189c0085fba153be1c42776411968aa5ad652dd7ffdef88b318bc.mini-hardhat@<=1.1.4(GHSA-wxx2-jv4c-38wh): pino-like JSON logger surface, but spawns a detached child processlib/caller.jsthat survives parent termination. Base64-decoded C2https://ipinfo-encrypted-v1.vercel.app/api/auth/f1f097d93c318c92f0c5, RCE vianew Function.constructor("require", s)(require), up to 5 retry attempts. Source SHA-256fbdfc97da008f90f11ae03963e75237c8bb746cf93f9cdc5da43ba5807ed6c1e.hardhat-cap@*(GHSA-3jrx-49jf-x2rp) from 2026-09-28: CWE-506 boilerplate, no analysis. Grouped here on name-family and same-window publication.
Same class of Hardhat impersonation that Socket flagged in January 2025 targeting Ethereum developers with private-key and mnemonic exfil. The operator has resumed after months of quiet. Ethereum tooling developers should treat any Hardhat-adjacent dependency name with pino-copied documentation as compromised until proven otherwise.
Classify each as malicious-package.
Cluster C - npm nebula-* Windows .kntrat RAT dropper family
Five npm packages under nebula names, at least four confirmed same-operator by IOC:
nebula-llm@1.0.0(GHSA-5ph8-m4r7-g739): preinstall.cjs decompresses base64+zlib-encoded 257KB Windows PE binary, writes to%LOCALAPPDATA%\Microsoft\Conhost\conhost.exe, executes silently. PE contains section.kntrat. External references:65.87.7.132,github.com/syskiel/kntrat-e. Source SHA-256b33da6aef41209f654f8f76cc56074a7b827599f42f941e3917326da1f4d2566.nebulaai-sdk@>=1.0.0(GHSA-57f4-h93r-jvh6): same preinstall pattern, same drop path, same C2 IP, same.kntratsection, same GitHub reference. Source SHA-256dc906b81107141fbd85dcabf89fd2f5112c4e4a134045c90d6a35abb4b67d16e.nebula-sdk@*(GHSA-fm5g-6rr8-p9vq): CWE-506 boilerplate; grouped on name.nebulajs-api@*(GHSA-2gr6-gxvx-3594): CWE-506 boilerplate; grouped on name.llm-nebula@1.0.0(GHSA-8g48-f52v-xggv): different mechanism - ~232KB obfuscated preinstall.cjs blob using TEA/xorshift cryptographic constants (0x9e3779b9,0x243f6a88,0x6a09e667) with Function-constructor and custom string decoders. Grouped on name proximity and same-day publication; may be the same operator experimenting with delivery.
The .kntrat PE section is a strong fingerprint for a known RAT family and the syskiel/kntrat-e GitHub reference gives defenders a proper hunting anchor. On Windows, watch for %LOCALAPPDATA%\Microsoft\Conhost\conhost.exe execution (the legitimate conhost.exe lives only in %SystemRoot%\System32\conhost.exe).
Classify each as malicious-package.
Cluster D - npm fabric-* Minecraft-launcher credential stealer via Discord webhook
Three npm packages under fabric names (the Minecraft modding framework), same webhook, same behaviour:
fabric-native-loader@1.0.0(GHSA-h76r-hhqx-cjq3): postinstall reads Minecraft launcher credential stores, extracts accessTokens/refreshTokens/clientTokens, exfiltrates over HTTPS POST todiscord.com/api/webhooks/1554065488726990909/[token]. Source SHA-256d289ae71736f05158f45d6636730641e82b5a774bf99bf1b587155d31c73daaa.fabric-render-bridge@<=1.0.0(GHSA-r54m-4q33-rjvr): same class of behaviour, same webhook ID. Reads official launcher, PrismLauncher, MultiMC, TLauncher, Modrinth, PolyMC, GDLauncher. Source SHA-256c2715ef0b07fbf0ca24fb8dadec44f2fcfdc273421a49ad2201bf8e40d3e2c01.fabric-asset-pipeline@1.0.0/1.0.1(GHSA-2h5p-2j55-g9r4): obfuscator.io string rotation with base64+RC4 decoding. FunctionsstealLauncherAccounts(),stealAltLaunchers(),readSessionDump(),sendInfo(). Webhook URL is RC4-decoded at runtime. Source SHA-256bb92787d766d5bfa0c384cc04909689215fa0d3e869630422caa8bedd303038a.
The shared webhook ID 1554065488726990909 is a strong operator fingerprint. Block that specific webhook ID at your egress; consider blocking discord.com/api/webhooks/* from CI networks entirely.
Classify each as malicious-package.
Cluster E - npm chalk-figlet family Windows RuntimeBroker.exe dropper
chalk-figlet@>=1.2.0(GHSA-85m5-qg46-qg28): postinstall (node example.js→require index.js) runs a_syncTelemetryfunction that hex-decodes a URL and filename, downloads viaaxios.get, executes viachild_process.execwithwindowsHideand detached. Source SHA-25666dfb43d5f4ae643e32497447293c12170a21f258a7e7d3d07e8f90f2119e13b.figlet-chalk-render@<=1.2.1(GHSA-frpq-rj8q-hpr4): same class - top-level IIFE on require, char-code arrays and hex escapes hide the module and method names, HTTPS GET piped to file stream. Source SHA-256992cf49b88be09149971d4ac18fe2a4b61d242186f553cb3283a26970b886d7f.
Both drop RuntimeBroker.exe to %TEMP% from http://104.234.65.75:700/setup.exe and execute it. Both gate execution to skip environments where CI, SANDBOX, GITHUB_ACTIONS, or TRAVIS env vars are set - only real developer workstations get the payload. This is the same 104.234.65.75 operator whose infrastructure the 2026-09-28 sweep operator-continuity block warned to keep blocked; they`re active again.
Classify each as malicious-package.
Cluster F - npm dotenv-lookalike JPEG-EXIF steganography → wscript.exe → PowerShell
native-env@1.0.1(GHSA-9p6x-527c-vh8p): bundle is reallynode-env-buffer@2.2.6. Extracts hidden code fromdist/stest.jpgAPP13 marker segment, writes VBS relay to temp, spawnswscript.exe→ PowerShell with encoded command. Obfuscator.io-style RC4 decryption. Source SHA-2568e9c612513357181c7e4d504f94a2a8c03de64724e2593217216de8fef4e7166.dotenv-native@1.0.1(GHSA-438j-7xq6-grfr): same bundle identity, same JPEG (287KB), same chain. Uses the APP1/EXIF0xFFEDmarker instead of APP13. Loader persists in bothdist/index.cjs(library) anddist/cli.cjs(dot2envCLI). Source SHA-2564369c7fa886fc7d315922759932056664863d71157bcdece943fa53339586f03.
Windows-only. Both target dotenv users by name. Note that both entry-points carry the loader - --ignore-scripts alone does not prevent the payload firing at first import.
Classify each as malicious-package.
Cluster G - npm test-agency-assignment process-hollowing dropper
test-agency-assignment@<=1.0.2 (GHSA-7x83-rfhr-656r) advertises as a "Device Telemetry Aggregator". Postinstall triggers wscript.exe 4444.vbs. The VBS is a multi-layer decoder (Base64 → XOR-masked AES S-box → ChaCha20-IETF → additional XOR) that reconstructs a PowerShell loader in %TEMP%\pf<rand>.dat and invokes it. Comments in the source reference "process hollowing" - the payload is designed to inject into a hollowed legitimate process. Source SHA-256 dcdf62e1c1eb44ca7a29ed37c12bdb71883025a46c5066e58c9228f0dfe782c2. Windows-only.
Classify as malicious-package.
Cluster H - npm items-validator in-process persistent loader
items-validator@<=1.0.5 (GHSA-hvv9-35pw-8qvf): install spawns a persistent background process polling https://game.spawnrealm.com/api/item-realtime?key=abcdef123456 for JSON payloads and evaluating them with full Node.js capabilities. Cross-platform (in-process, no OS gate). Source SHA-256 a8e49b1abd7c566b17104c5a2823251df2ca253a0fa509d7c19db1c1942ad13d.
Because the loader runs in-process, npm uninstall alone does not stop it - the Node process must be killed.
Classify as malicious-package.
Cluster I - npm rai6jaisahthaghee5ou-loader-package browser XSS/injection loader
rai6jaisahthaghee5ou-loader-package@>=1.0.0 (GHSA-hhf7-grh4-575w): IIFE injects a <script> element pointing at https://nee1ahnaw7.xsses.link into document. Random-string name characteristic of research artefacts. Source SHA-256 6de53fbd264f685e033789fe5929c63f322366219d80707ec419a48a85e253c9.
Browser-only impact (server-side Node has no document). Bundling this into a client app exposes every visitor to arbitrary JavaScript in the app`s security context.
Classify as malicious-package.
Cluster J - npm simple-date-formatter-new-12 OAST SSRF probe
simple-date-formatter-new-12@1.0.0 (GHSA-v6p6-9wrj-f56p): postinstall curls internal Baidu host http://bsrc-ssrf.n.baidu-int.com/, writes response to /tmp/bsrc.txt, POSTs contents to pdxkwzizhzzdpzpgcieqk6d1v7ynqsgfo.oast.fun. Bug-bounty or pentest SSRF probe. Source SHA-256 bd79db99adb8878673dd85db5a29661432808fa8fcc5e3d750b907418df8ae5f.
The naming pattern re-uses simple-date-formatter-new-<N> from the earlier 124.221.154.135 SSH-beacon operator, but the mechanism is different: this is the same .oast.fun operator as the 2026-09-27 Cluster D cma-self-hosted-sandbox-cf package.
Classify as dependency-confusion (probe-only, no confirmed payload). Severity medium per calibration.
Cluster K - 4-package npm CWE-506 boilerplate batch
@digift/cli(GHSA-xp76-38xh-m8wc): dep-confusion at internal scopeimg-to-native(GHSA-pv7p-ghgv-268x):native-*naming adjacency to Cluster Fnative-runner(GHSA-jxw5-69p3-hpm4):native-*naming adjacency to Cluster Fvite-plugin-crypto(GHSA-mh9w-qr45-6wrq): generic Vite plugin lure
All versions quarantined, all CWE-506 boilerplate advisory bodies, no IOCs. If Amazon Inspector or a vendor blog lands payload analysis on any of these later they may re-split.
Severity medium for sweep purposes.
Operator continuity check
- Cluster A
donutautosellsrcPolygon-C2 campaign: day 3, still publishing, wallet unchanged. - Cluster E
104.234.65.75:700RuntimeBroker operator: returns after a one-day quiet - same infrastructure the 2026-09-28 sweep warned to keep blocked. - Cluster J
.oast.funOAST operator: re-uses thesimple-date-formatter-new-<N>naming lineage from the earlier SSH-beacon operator. ltidi.storage.googleapis.com(2026-09-26 Cluster D GCS-tarball loader): no fresh@airbnb-extended/*/ltidisafe*today.oob.algamil7x.xyz: no new day-N additions.eo8f3m3ho26a0nm.m.pipedream.net(2026-09-26 Cluster Eshoplist-app): no new Pipedream-beaconing packages.- *`n8n-nodes-
mkicom.com`**: no new packages.
Egress blocks remain durable on all of the above. Add for today: 65.87.7.132, ipinfo-encrypted-v1.vercel.app, game.spawnrealm.com, nee1ahnaw7.xsses.link, Discord webhook ID 1554065488726990909.
Registry state
All 26 packages in this sweep are npm/pip-quarantined at time of writing. Active operator-side infrastructure unique to today`s batch:
- Polygon wallet
0x9c0a507300fd902787bb193d80fca5ce6e1bff9a(Cluster A - day 3) ipinfo-encrypted-v1.vercel.app(Cluster B mini-hardhat)65.87.7.132, GitHub referencegithub.com/syskiel/kntrat-e(Cluster C)- Discord webhook
1554065488726990909(Cluster D) 104.234.65.75:700(Cluster E - not new but re-active)game.spawnrealm.com(Cluster H)nee1ahnaw7.xsses.link(Cluster I)pdxkwzizhzzdpzpgcieqk6d1v7ynqsgfo.oast.fun(Cluster J)
Discovery credits
GitHub Advisory Database, OpenSSF malicious-packages, OpenSSF Package Analysis, Amazon Inspector. Per-package IOC details drawn from GHSA advisory bodies published between 2026-09-28 12:00 UTC and 2026-09-29 12:00 UTC.
Affected packages (25)
- npm@digift/cli*
- PyPIaseitylab0.1.00.1.1
- npmchalk-figlet1.2.0
- npmdotenv-native1.0.1
- npmfabric-asset-pipeline1.0.01.0.1
- npmfabric-native-loader1.0.0
- npmfabric-render-bridge1.0.0
- npmfiglet-chalk-render1.2.1
- npmhardhat-cap*
- npmhardhat-lock2.21.0
- npmhardhat-zet2.0.1
- npmimg-to-native*
- npmitems-validator1.0.5
- npmllm-nebula1.0.0
- npmmini-hardhat1.1.4
- npmnative-env1.0.1
- npmnative-runner*
- npmnebula-llm1.0.0
- npmnebula-sdk*
- npmnebulaai-sdk1.0.0
- npmnebulajs-api*
- npmrai6jaisahthaghee5ou-loader-package1.0.0
- npmsimple-date-formatter-new-121.0.0
- npmtest-agency-assignment1.0.2
- npmvite-plugin-crypto*
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 - pip
aseitylabextends thedonutautosellsrcPolygon-blockchain C2 campaign to day 3 (real payload, malicious-package):aseitylab@0.1.0/0.1.1(GHSA-jv9w-2v63-767g, MAL-2026-17240). Same primitive stack as the 2026-09-27 and 2026-09-28 sweeps: steganographic image loader, native Python C-extension infostealer, and command-and-control server addresses read from Polygon blockchain transaction history for attacker wallet0x9c0a507300fd902787bb193d80fca5ce6e1bff9a. Same payload SHA-256d03c42c275f0dbc617428441508c49ae1adcbbc95af4eeb094bca4e4f8943f3eas the yesterdays Cluster A four packages. The campaign now spans at least 6 pip packages under this wallet across 3 days:donutautosellsrc@0.3.7/0.3.8/0.3.9,aseity@0.1.0,coinscan@0.1.0,donutpromotion@<=0.1.0,claudedashbord@0.1.0-0.1.3, and todaysaseitylab@0.1.0/0.1.1. The-labsuffix onaseitylabreads as a variant-name expansion of yesterdaysaseity` - the operator is iterating the same lure names - *Cluster B - npm hardhat- pino-impersonator Ethereum-developer lure (real payload, malicious-package, at least 4 packages)*:
hardhat-lock@2.21.0(GHSA-crqg-xv46-qmmw, source SHA-256 not stated; ~4MB obfuscatedlib/config.jswith 23,981-entry rotated string array, executes on import),hardhat-zet@2.0.1(GHSA-qqvr-prmw-6pq2, source SHA-25637cd33c0908189c0085fba153be1c42776411968aa5ad652dd7ffdef88b318bc; 4,498,609-byte obfuscatedlib/configwith 26,113-entry string array, author claimed as "Robert King <hello@jsonspack.com>" with bug trackerjsonspack.com/issues),mini-hardhat@<=1.1.4(GHSA-wxx2-jv4c-38wh, source SHA-256fbdfc97da008f90f11ae03963e75237c8bb746cf93f9cdc5da43ba5807ed6c1e; C2https://ipinfo-encrypted-v1.vercel.app/api/auth/f1f097d93c318c92f0c5, spawns detachedlib/caller.jsthat survives parent termination, RCE vianew Function.constructor("require", s)(require)with up to 5 retry attempts). All three impersonate the unrelatedpinoJSON-logger project (README, LICENSE, docs/ tree copied verbatim) under a name adjacent to the Nomic FoundationhardhatEthereum development framework - the lure is Ethereum developers reaching for Hardhat plugins. Also in the family from 2026-09-28: `hardhat-cap@` (GHSA-3jrx-49jf-x2rp; CWE-506 boilerplate with no published analysis). This is the same class of Hardhat/Ethereum-developer lure that Socket flagged in 2025-01 - the operator has resumed after months of quiet - *Cluster C - npm nebula- Windows
.kntratRAT dropper family (real payload, malicious-package, at least 4 packages)*:nebula-llm@1.0.0(GHSA-5ph8-m4r7-g739, source SHA-256b33da6aef41209f654f8f76cc56074a7b827599f42f941e3917326da1f4d2566),nebulaai-sdk@>=1.0.0(GHSA-57f4-h93r-jvh6, source SHA-256dc906b81107141fbd85dcabf89fd2f5112c4e4a134045c90d6a35abb4b67d16e), `nebula-sdk@(GHSA-fm5g-6rr8-p9vq, CWE-506 boilerplate but named-family confirms),nebulajs-api@*(GHSA-2gr6-gxvx-3594, CWE-506 boilerplate but named-family confirms), and adjacentllm-nebula@1.0.0(GHSA-8g48-f52v-xggv, source SHA-2560eee293a9973027154eea71635c14e8a4cb2ad8a1e4f80a65399ad874afcb669; ~232KB obfuscated preinstall.cjs blob using TEA/xorshift constants0x9e3779b9,0x243f6a88,0x6a09e667). Thenebula-llm/nebulaai-sdkvariants embed a ~257KB Windows PE binary as a base64+zlib-compressed string inpreinstall.cjs/preinstall.js, decompress it, and write it to%LOCALAPPDATA%\Microsoft\Conhost\conhost.exemimicking the legitimate Windows Console Host, then spawn it silently viachild_process.spawnwith hidden window. Decoded PE contains a section named.kntratand references external host65.87.7.132and GitHub repositorygithub.com/syskiel/kntrat-e- consistent with a native RAT-family tool. Thellm-nebula` variant differs in mechanism (obfuscated JS preinstall instead of embedded PE) but shares the naming pattern and window, suggesting the same operator experimenting with delivery - *Cluster D - npm fabric- Minecraft-launcher credential stealer via Discord webhook (real payload, malicious-package, at least 3 packages)**:
fabric-native-loader@1.0.0(GHSA-h76r-hhqx-cjq3, source SHA-256d289ae71736f05158f45d6636730641e82b5a774bf99bf1b587155d31c73daaa, Discord webhookdiscord.com/api/webhooks/1554065488726990909/),fabric-render-bridge@<=1.0.0(GHSA-r54m-4q33-rjvr, source SHA-256c2715ef0b07fbf0ca24fb8dadec44f2fcfdc273421a49ad2201bf8e40d3e2c01, same webhook ID),fabric-asset-pipeline@1.0.0/1.0.1(GHSA-2h5p-2j55-g9r4, source SHA-256bb92787d766d5bfa0c384cc04909689215fa0d3e869630422caa8bedd303038a, RC4-decoded webhook URL). Postinstall hook reads Minecraft launcher credential stores across official launcher, PrismLauncher, MultiMC, TLauncher, Modrinth, PolyMC, and GDLauncher; extracts Mojang/Microsoft accessTokens, refreshTokens, clientTokens, account usernames; and exfiltrates over HTTPS POST to the hardcoded Discord webhook alongside hostname, username, platform, OS release info. The namefabricis the Minecraft modding framework - lure is Minecraft mod developers. All three use the same webhook ID1554065488726990909 - Cluster E - npm chalk-figlet family Windows RuntimeBroker.exe dropper via bare-IP HTTP (real payload, malicious-package, 2 packages):
chalk-figlet@>=1.2.0(GHSA-85m5-qg46-qg28, source SHA-25666dfb43d5f4ae643e32497447293c12170a21f258a7e7d3d07e8f90f2119e13b),figlet-chalk-render@<=1.2.1(GHSA-frpq-rj8q-hpr4, source SHA-256992cf49b88be09149971d4ac18fe2a4b61d242186f553cb3283a26970b886d7f). Postinstall/require-time IIFE decodes a hex-obfuscated URLhttp://104.234.65.75:700/setup.exe(bare IP, unencrypted HTTP), downloads the payload viaaxios.get, writes it to the OS temp directory asRuntimeBroker.exe(impersonating the legitimate Windows binary), and executes it viachild_process.execwith stealth (windowsHide: true, detached). Execution is gated to SKIP environments whereCI,SANDBOX,GITHUB_ACTIONS, orTRAVISenv vars are set - evades sandbox and CI analysis, real developer workstations are the target. Both packages advertise as chalk+figlet wrappers - lure is Node.js CLI-tool developers. Same bare-IP104.234.65.75:700C2 that the 2026-09-28 sweep operator-continuity block warned to keep durable - Cluster F - npm dotenv-lookalike Windows JPEG-EXIF steganography → wscript.exe → PowerShell dropper (real payload, malicious-package, 2 packages):
native-env@1.0.1(GHSA-9p6x-527c-vh8p, source SHA-2568e9c612513357181c7e4d504f94a2a8c03de64724e2593217216de8fef4e7166, JPEG APP13 marker),dotenv-native@1.0.1(GHSA-438j-7xq6-grfr, source SHA-2564369c7fa886fc7d315922759932056664863d71157bcdece943fa53339586f03, JPEG APP1/EXIF0xFFEDmarker). Both bundle a fake package identity ofnode-env-buffer@2.2.6under names that impersonate the ubiquitousdotenvlibrary. Attack chain: import or CLI call → open bundleddist/stest.jpg(287KB payload carrier) → scan JPEG segments for the APP1/EXIF or APP13 marker → extract marker contents as UTF-8 string → writerelay_*.vbsto temp directory → spawnwscript.exe→ wscript launchespowershell.exewith base64-encoded command → payload executes. Obfuscator.io-style RC4 decryption and runtime string concatenation hide the loader. Windows-only. Loader persists in bothdist/index.cjs(library import) anddist/cli.cjs(dot2envCLI entry) so bothrequire("dotenv-native")and the CLI trip the payload - Cluster G - npm
test-agency-assignmentWindows postinstall wscript.exe → PowerShell → process-hollowing dropper (real payload, malicious-package):test-agency-assignment@<=1.0.2(GHSA-7x83-rfhr-656r, source SHA-256dcdf62e1c1eb44ca7a29ed37c12bdb71883025a46c5066e58c9228f0dfe782c2). Package advertises as a "Device Telemetry Aggregator". Postinstall triggerswscript.exe 4444.vbsonnpm install. The VBS is a multi-layer decoder: Base64 → XOR-masked AES S-box → ChaCha20-IETF → additional XOR to extract PowerShell loader, written to%TEMP%\pf<rand>.dat, invoked viapowershell.exe. Embedded source-code comments reference "process hollowing" (injecting the payload into a hollowed legitimate process for detection evasion and persistence). Windows-only. Watch for unexpectedwscript.exeandpowershell.exeexecution duringnpm install, and temporary files matchingpf<rand>.datin%TEMP% - Cluster H - npm
items-validatorNode.js in-process persistent-loader (real payload, malicious-package):items-validator@<=1.0.5(GHSA-hvv9-35pw-8qvf, source SHA-256a8e49b1abd7c566b17104c5a2823251df2ca253a0fa509d7c19db1c1942ad13d). Launches a persistent background process on install that pollshttps://game.spawnrealm.com/api/item-realtime?key=abcdef123456for JSON payloads and evaluates them with full Node.js capabilities. Cross-platform (Node.js in-process, no OS gate). The C2game.spawnrealm.comis a novel domain for this corpus. Because the loader runs in-process rather than via a separate binary, uninstall alone may leave the running Node process still polling until the process is killed - Cluster I - npm
rai6jaisahthaghee5ou-loader-packagebrowser-context XSS/injection loader (real payload, malicious-package):rai6jaisahthaghee5ou-loader-package@>=1.0.0(GHSA-hhf7-grh4-575w, source SHA-2566de53fbd264f685e033789fe5929c63f322366219d80707ec419a48a85e253c9). IIFE at import time injects a<script>element pointing athttps://nee1ahnaw7.xsses.linkand appends it todocument. The random-string name (rai6jaisahthaghee5ou-) reads as a Diceware/passphrase-generator output and is characteristic of research-artefact or pentest-tooling naming. Because the payload targetsdocument, this is a browser-bundle-only loader - Node-side install has no filesystem or network impact, but any web app that pulls this into a bundle exposes every visitor to arbitrary attacker JavaScript in the app`s security context (credential theft, DOM manipulation, follow-on delivery) - Cluster J - npm
simple-date-formatter-new-12OAST SSRF probe (dependency-confusion/probe):simple-date-formatter-new-12@1.0.0(GHSA-v6p6-9wrj-f56p, source SHA-256bd79db99adb8878673dd85db5a29661432808fa8fcc5e3d750b907418df8ae5f). Postinstall usescurlto fetch internal Baidu hosthttp://bsrc-ssrf.n.baidu-int.com/, writes response to/tmp/bsrc.txt, POSTs contents to attacker-controlled interactsh collector atpdxkwzizhzzdpzpgcieqk6d1v7ynqsgfo.oast.fun. Reads as a Baidu-scoped bug-bounty or pentest SSRF probe. Note the naming pattern re-usessimple-date-formatter-new-<N>from the earlier124.221.154.135SSH-beacon operator, but the C2 mechanism is different - this is the same.oast.fun(Burp Collaborator OOB zone) operator as 2026-09-27 Cluster Dcma-self-hosted-sandbox-cf, reusing an established naming skeleton - Cluster K - 4-package npm CWE-506 boilerplate batch, no published analysis (mixed kinds, unclassified):
@digift/cli(GHSA-xp76-38xh-m8wc),img-to-native(GHSA-pv7p-ghgv-268x),native-runner(GHSA-jxw5-69p3-hpm4),vite-plugin-crypto(GHSA-mh9w-qr45-6wrq) - all versions quarantined, all with GHSAs CWE-506 boilerplate advisory body and no IOCs, source-code link, or vendor write-up. Names read as: dep-confusion at internal scope (@digift/cli),native-*typosquat family adjacent to Cluster F (img-to-native,native-runner- could be the same operator preparing follow-ons), and generic Vite plugin lure (vite-plugin-crypto). Treat asmedium` for the sweep purposes; if Amazon Inspector/OpenSSF/kam193 lands payload analysis later, may re-split - Operator continuity check: 2026-09-27
donutautosellsrcPolygon-C2 campaign continues in Cluster A. 2026-09-28104.234.65.75:700RuntimeBroker operator returns after a one-day quiet in Cluster E. Thesimple-date-formatter-new-<N>naming lineage is re-used by the OAST operator in Cluster J. No freshltidi.storage.googleapis.com(2026-09-26 GCS-tarball loader),oob.algamil7x.xyz,eo8f3m3ho26a0nm.m.pipedream.netPipedream beacon, ormkicom.comn8n-nodes-*operator activity in this window - the egress blocks remain durable. Discord webhook1554065488726990909(Cluster D) and Polygon wallet0x9c0a507300fd902787bb193d80fca5ce6e1bff9a(Cluster A) are the two new durable operator-fingerprint IOCs from today
What to do
- 1Grep every
package-lock.json,yarn.lock,pnpm-lock.yaml,package.json,requirements.txt,Pipfile.lock,poetry.lock, andpyproject.tomlfor every package name in Clusters A through K. Uninstall on hit, wipenode_modules/.venv, delete the lockfile, rebuild against a clean cache. Clusters A through I carry confirmed real payloads (blockchain-C2 infostealer, Windows RAT, credential stealers, dropper chains); a hit on any of those is a compromise, not a warning - 2For Cluster A (pip
aseitylabdonutautosellsrc campaign extension): uninstall on hit and image the host - the native C-extension infostealer landed compiled binary code on disk, so a Python uninstall does not clean it. Rotate every credential the installer user had access to. Because C2 resolves through a Polygon RPC query against wallet0x9c0a507300fd902787bb193d80fca5ce6e1bff9a, a domain-only egress denylist is insufficient - block the IOC domains from yesterdays record (thisisafalsepositive.st,sltnnt.ru) AND block outbound Polygon RPC (polygon-rpc.com,rpc-mainnet.matic.network,polygon-mainnet.g.alchemy.com,polygon-mainnet.infura.io`) from build/CI networks. Add a lockfile-lint rule for the 6 known package names now. The campaign is scaling - expect further packages - 3*For Cluster B (npm hardhat- pino-impersonator Ethereum lure)**: uninstall
hardhat-lock,hardhat-zet,mini-hardhat,hardhat-capon hit. Because auto-execution happens onrequire, presence innode_modulesafternpm installis enough to consider the host compromised even without invoking the package explicitly. Rotate every credential accessible from the developer workstation, including any Ethereum wallets, mnemonic phrases, private keys, and CI/CD tokens - the historical Hardhat-lure campaigns explicitly targeted these. Block outbound HTTPS toipinfo-encrypted-v1.vercel.appfrom developer and CI networks. Reject any dependency author claiminghello@jsonspack.comorjsonspack.comas a bug tracker. Consider auditing every internal Hardhat plugin dependency by hand - the operator will iterate names - 4*For Cluster C (npm nebula-
.kntratWindows RAT dropper)**: uninstallnebula-llm,nebulaai-sdk,nebula-sdk,nebulajs-api,llm-nebulaon hit and image any Windows host that ran an install - the RAT is running as%LOCALAPPDATA%\Microsoft\Conhost\conhost.exemasquerading as the real Console Host. Rotate everything the installer user had access to. Block outbound HTTPS/TCP to65.87.7.132from developer and CI networks. Add a Sysmon/EDR rule for%LOCALAPPDATA%\Microsoft\Conhost\conhost.exeexecution (the real conhost lives in%SystemRoot%\System32) and PE files with a section named.kntrat. Consider hunting historical process trees for the impersonator path - 5*For Cluster D (npm fabric- Minecraft credential stealer)*: uninstall
fabric-native-loader,fabric-render-bridge,fabric-asset-pipelineon hit. Rotate all Mojang/Microsoft Minecraft launcher credentials from a clean device - the stealer extracts accessTokens, refreshTokens, and clientTokens from official launcher, PrismLauncher, MultiMC, TLauncher, Modrinth, PolyMC, GDLauncher. Block outbound HTTPS to `discord.com/api/webhooks/1554065488726990909/(this specific webhook ID) at the network level; consider blockingdiscord.com/api/webhooks/*` from CI networks entirely as a durable defence against Discord-webhook-based exfil. Add the 3 package names to your lockfile-lint blocklist - 6For Cluster E (npm chalk-figlet family RuntimeBroker.exe dropper): uninstall
chalk-figlet,figlet-chalk-renderon hit. Block outbound HTTP tohttp://104.234.65.75:700/*at the network level (bare-IP, port 700 - trivially blockable). Add a Sysmon/EDR rule for a file namedRuntimeBroker.exeexecuted from%TEMP%/%LOCALAPPDATA%\Temp(the real RuntimeBroker.exe lives only in%SystemRoot%\System32). The CI-env-detection gate means CI runs will report a clean install - do not use CI logs as the exclusive detection surface for these packages - 7For Cluster F (npm
native-env+dotenv-nativeJPEG-EXIF steganography): uninstall both on hit. Windows-only, but the payload dispatcher is a stealthy wscript.exe → PowerShell chain that most default EDR rules do not flag. Block or auditwscript.exespawned as a child ofnode.exeornpm.exein EDR. Rotate every credential the installer user had. Because the loader lives in both the library import and the CLI entry, arequire("dotenv-native")OR adot2envCLI call is enough - anpm install --ignore-scriptsalone does NOT prevent the payload firing at first import. Reject the fake package identitynode-env-buffer@2.2.6as a dependency name - it is a common bundle-name lure - 8For Cluster G (npm
test-agency-assignmentprocess-hollowing dropper): uninstall on hit. Windows-only.--ignore-scriptsin CI blocks the postinstall trigger but not manual runs. Watch forwscript.exe 4444.vbsexecution paths and%TEMP%\pf<rand>.datfiles in EDR. The process-hollowing intent means a compromised host may show a running legitimate-looking process with malicious code inside - assume compromise on any install - 9For Cluster H (npm
items-validatorin-process persistent loader): uninstall AND kill any Node.js process that ranitems-validatorcode - the loader pollsgame.spawnrealm.comin-process, sonpm uninstallalone is not enough. Block outbound HTTPS togame.spawnrealm.comand audit any Node process still holding that reference - 10For Cluster I (npm
rai6jaisahthaghee5ou-loader-packagebrowser XSS loader): uninstall on hit. If the package was included in a browser bundle that shipped to production, treat as a full XSS incident: rotate any auth tokens visitors could have leaked, audit for suspicious sessions, block outbound HTTPS tonee1ahnaw7.xsses.linkat the edge. Because the loader targetsdocument, server-only Node use had no filesystem impact - the risk is exclusively client-side - 11For Cluster J (npm
simple-date-formatter-new-12OAST SSRF probe): uninstall on hit. Recon-only payload (SSRF response echoed to.oast.funcollector), so the risk is that the operator has a map of your CI hosts and network topology near Baidu-internal ranges. Block outbound to*.oast.funand*.oastify.com(Burp Collaborator zones) from CI. Add the package name to your lockfile-lint blocklist; watch for furthersimple-date-formatter-new-<N>iterations - 12For Cluster K (npm CWE-506 boilerplate batch): uninstall on hit. Without payload analysis assume real infostealer/RCE at time of quarantine - image the host, rotate installer-user credentials, check outbound telemetry from the install window. Add all 4 names to lockfile-lint.
img-to-nativeandnative-runnerare close-adjacent to Cluster F - watch for a payload write-up landing on either - 13For every
npm installin CI, prefer--ignore-scriptsand enforce at runner level; that blocks Clusters E, F, G postinstall triggers but not Clusters B, H, I (which fire at import). For everypip install, prefer resolving from a curated internal mirror. Reject packages whose install-time or import-time behaviour includes a network fetch. Keep prior egress blocks in place:ltidi.storage.googleapis.com,oob.algamil7x.xyz,eo8f3m3ho26a0nm.m.pipedream.net,mkicom.com,124.221.154.135,104.234.65.75,*.oast.fun,*.oastify.com, Polygon RPC endpoints. Add for today:65.87.7.132,ipinfo-encrypted-v1.vercel.app,game.spawnrealm.com,nee1ahnaw7.xsses.link, Discord webhook ID1554065488726990909
References
- GitHubGitHub Advisory Database - recent malware advisoriesgithub.com
- GitHubGHSA-jv9w-2v63-767g - pip aseitylab (Cluster A - donutautosellsrc campaign day 3, same wallet + payload hash)github.com
- OSVMAL-2026-17240 - pip aseitylab campaign metadataosv.dev
- GitHubGHSA-crqg-xv46-qmmw - npm hardhat-lock (Cluster B - pino-impersonator Ethereum-dev lure, 4MB obfuscated blob)github.com
- GitHubGHSA-qqvr-prmw-6pq2 - npm hardhat-zet (Cluster B - pino impersonator, "Robert King" jsonspack.com attribution)github.com
- GitHubGHSA-wxx2-jv4c-38wh - npm mini-hardhat (Cluster B - detached child process, ipinfo-encrypted-v1.vercel.app C2)github.com
- GitHubGHSA-3jrx-49jf-x2rp - npm hardhat-cap (Cluster B - CWE-506 boilerplate, likely same operator family)github.com
- OSVMAL-2026-17236 - npm mini-hardhat OSV recordosv.dev
- GitHubGHSA-5ph8-m4r7-g739 - npm nebula-llm (Cluster C - .kntrat Windows PE RAT dropper, 65.87.7.132 C2)github.com
- GitHubGHSA-57f4-h93r-jvh6 - npm nebulaai-sdk (Cluster C - same .kntrat RAT pattern, 65.87.7.132 C2, syskiel/kntrat-e reference)github.com
- GitHubGHSA-fm5g-6rr8-p9vq - npm nebula-sdk (Cluster C - CWE-506 boilerplate, same operator name family)github.com
- GitHubGHSA-2gr6-gxvx-3594 - npm nebulajs-api (Cluster C - CWE-506 boilerplate, same operator name family)github.com
- GitHubGHSA-8g48-f52v-xggv - npm llm-nebula (Cluster C-adjacent - obfuscated preinstall variant, TEA/xorshift constants)github.com
- GitHubGHSA-h76r-hhqx-cjq3 - npm fabric-native-loader (Cluster D - Minecraft credential stealer, Discord webhook 1554065488726990909)github.com
- GitHubGHSA-r54m-4q33-rjvr - npm fabric-render-bridge (Cluster D - Minecraft credential stealer, same webhook)github.com
- GitHubGHSA-2h5p-2j55-g9r4 - npm fabric-asset-pipeline (Cluster D - RC4-decoded Discord webhook, Minecraft launcher account theft)github.com
- GitHubGHSA-85m5-qg46-qg28 - npm chalk-figlet (Cluster E - RuntimeBroker.exe dropper, 104.234.65.75:700 bare-IP HTTP)github.com
- GitHubGHSA-frpq-rj8q-hpr4 - npm figlet-chalk-render (Cluster E - same 104.234.65.75:700 dropper, CI-detection gate)github.com
- GitHubGHSA-9p6x-527c-vh8p - npm native-env (Cluster F - JPEG APP13 steganography, node-env-buffer bundle identity)github.com
- GitHubGHSA-438j-7xq6-grfr - npm dotenv-native (Cluster F - JPEG APP1/EXIF 0xFFED steganography, dotenv typosquat)github.com
- GitHubGHSA-7x83-rfhr-656r - npm test-agency-assignment (Cluster G - wscript.exe → PowerShell process-hollowing dropper)github.com
- GitHubGHSA-hvv9-35pw-8qvf - npm items-validator (Cluster H - in-process persistent loader, game.spawnrealm.com C2)github.com
- GitHubGHSA-hhf7-grh4-575w - npm rai6jaisahthaghee5ou-loader-package (Cluster I - browser XSS injector, nee1ahnaw7.xsses.link)github.com
- GitHubGHSA-v6p6-9wrj-f56p - npm simple-date-formatter-new-12 (Cluster J - Baidu SSRF probe, .oast.fun OOB)github.com
- GitHubGHSA-xp76-38xh-m8wc - npm @digift/cli (Cluster K - CWE-506 boilerplate, likely dep-confusion)github.com
- GitHubGHSA-pv7p-ghgv-268x - npm img-to-native (Cluster K - CWE-506 boilerplate, native-* naming adjacency)github.com
- GitHubGHSA-jxw5-69p3-hpm4 - npm native-runner (Cluster K - CWE-506 boilerplate, native-* naming adjacency)github.com
- GitHubGHSA-mh9w-qr45-6wrq - npm vite-plugin-crypto (Cluster K - CWE-506 boilerplate, Vite plugin lure)github.com
- PolygonScanPolygonscan - donutautosellsrc campaign wallet 0x9c0a507300fd902787bb193d80fca5ce6e1bff9apolygonscan.com
- SocketSocket - Malicious npm Package Targets Ethereum Developers (historical Hardhat lure context)socket.dev