GitHub Advisory malware sweep, 16 October 2026
GHSA 2026-10-15/16 batch (20 advisories). PyPI agentaix wave 2 adds py-worm+py-wormgpt+py-sock2 with GitHub-raw stage-2 and googleforum.pythonanywhere.com C2. npm Wix dep-confusion wave 3 ships util-foriepft reusing the K8s-SA-token-theft thunderboltRegistry.js family. seapy-ops adds concealed-upload + in-memory exec; getpubip infostealer.
Published 16 Oct 2026
Every version named by the advisory is in the scanner, so a lockfile check finds it directly.
- Severity
- High
- Type
- Advisory sweep
- Published
- 16 Oct 2026
- Ecosystems
- npmPyPI
- Detected by
- GitHub Advisory Database, OpenSSF malicious-packages, kam193/bad-packages, InvisiRisk, OpenSSF Package Analysis, smiling-hyena, npm security, PyPI security
- Also known as
- 2026-10-16 GHSA sweep, agentaix operator wave 2 (py-worm, py-wormgpt, py-sock2), 2026-10-agentaix campaign wave 2
- Source
- github.com
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.
The full picture
Between 2026-10-15 06:00 UTC (yesterdays sweep cutoff) and 2026-10-16 06:00 UTC (todays ingest-window start), the GitHub Advisory Database and OpenSSF malicious-packages published 20 fresh malware advisories across npm and PyPI, split roughly evenly: 11 npm (7 of them from the Baileys lure wave 4) and 9 PyPI. Todays material is largely a continuation of week-running operators rather than a new wave; four of eight clusters are explicit continuations of operators tracked across this weeks sweeps.
Headlines
PyPI agentaix operator wave 2 (Cluster A): three new first-publish RAT packages py-worm+py-wormgpt+py-sock2 extend the 2026-10-11 agentaix+agent-vx+media-manager5 cluster to 6 total packages / 8 versions, sharing the campaign tag 2026-10-agentaix and the googleforum.pythonanywhere.com C2 - and now with a disclosed GitHub-attacker-account IOC. On import of py-worm's agentaix module, the package downloads a mutable Python file from raw.githubusercontent.com/anonrider404/pypl/9395c5802b11bc088925d7adf6e2f66b8b0709fd/readme.txt (also fetched via the refs/heads/main/readme.txt branch form) and runs it hidden on Windows. The remote file is a remote file-management client with Windows-registry persistence and C2-style polling. Versions 0.1.0 and 2.0.0 run the download during import; 2.0.1 moves it to a background thread (anti-sandbox refinement over 2 versions). Because anonrider404/pypl is a live GitHub repo under attacker control, the stage-2 payload is mutable - the operator can swap it between the time GHSA ingested the record and the time a victim actually runs the package.
npm Wix dep-confusion operator wave 3 (Cluster B): util-foriepft@1.0.0 carries a thunderboltRegistry.js payload the OSSF record explicitly calls "nearly identical to the payload of css-overscroll-contain@1.0.1" (that 2026-10-09 Cluster B package read /var/run/secrets/kubernetes.io/serviceaccount/token, scraped env vars matching secret-like patterns, and attempted unshare --user --mount + devtmpfs/cgroup/release_agent container-escape). Same dxpoc.gt.tc collector. Same operator (regex33-hackerone on npm). This is the third Wix-targeting slug in two weeks and the second to carry the K8s SA-token-stealing payload family.
Confirmed-payload carve-outs within the sweep
- Cluster C
seapy-ops(PyPI, 8 versions1.0.0-1.2.2) - concealed-upload tool with symlink-target exfiltration and server-side path-traversal writes in 1.0.0-1.1.2, pivoted to REPL-impersonation + in-memory Base64/gzip code execution in 1.2.1-1.2.2. C2 at*.space-z.ai(same apex as the 2026-10-14pyyiREPL C2). SHA-256 payloads disclosed forseapy/cli.pyon each version. - Cluster D
getpubip(PyPI, 3 versions0.1.0-0.1.2) - obfuscated import-time infostealer downloading fromapi-bsx.pages.dev/downloadwith "similarities to campaign2026-10-fontcase" (yesterday`s Cluster B carve-out). Behavioural reasons: remote-executable download, infostealer, browser-data exfiltration, obfuscation. - Cluster E 3-package
proxyrubikaoperator (PyPI) - Android-targeted file exfiltration against the Rubika messaging-service user base. Dev-fleet exposure low (not a typical developer dependency), but the installer`s files are exfiltrated.
Probes and typosquats
Cluster F @flexmr/ui@99.99.99 + @flexmr/utils - dep-confusion probe against FlexMR (UK market research). HTTP beacon to 177.7.60.239:48080 + DNS canary under oob.recon.dev. Cluster G tailwindcss-form + tailwindcss-uniform - Tailwind-form typosquat operators continued -form/-uniform sibling-pair signature. **Cluster H** 7-package Baileys lure wave 4 - CWE-506 boilerplate takedowns under new scopes @developmentyora/ and @celestial-community/` plus Indonesian/Kenyan-themed standalone slugs.
Classification
sweep. Severity high taken as a whole, driven by Cluster A (confirmed RAT with mutable GitHub-raw stage-2 + Windows registry persistence; 6-package operator continuity), Cluster B (confirmed shared payload with K8s-SA-token-stealing css-overscroll-contain family), Cluster C (functional file exfiltration + in-memory code execution + 8-version iteration), and Cluster D (confirmed functional infostealer with browser-data target + stage-2 URL + fontcase-campaign kinship). Clusters E through H are medium on their own and do not reduce overall sweep severity.
Discovery
GitHub Advisory Database, OpenSSF malicious-packages, kam193/bad-packages (7 of 11 PyPI records), InvisiRisk, Inc. (Cluster F @flexmr/ui finder), ossf-package-analysis (Cluster F @flexmr/utils), smiling-hyena (Cluster C seapy-ops finder), npm security, PyPI security.
20 packages 32 versions
- npm@celestial-community/baileys0.0.0→
- npm@developmentyora/baileyss0.0.0→
- npm@developmentyora/yorakids0.0.0→
- npm@flexmr/ui99.99.99→
- npm@flexmr/utils1.0.03.0.12→
- npmasistenyorstore0.0.0→
- npmbungoma0.0.0→
- PyPIgetpubip0.1.00.1.10.1.2→
- npmkiyoramarkets0.0.0→
- PyPIproxy-rubikis0.1.0→
- PyPIproxyrobika0.1.0→
- PyPIproxyrubika0.1.0→
- PyPIpy-sock20.1.0→
- PyPIpy-worm0.1.02.0.02.0.1→
- PyPIpy-wormgpt1.0.0→
- PyPIseapy-ops1.0.01.0.11.0.21.1.01.1.11.1.21.2.11.2.2→
- npmtailwindcss-form0.0.0→
- npmtailwindcss-uniform0.0.0→
- npmutil-foriepft1.0.0→
- npmxmd-baileys0.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.
What it does if you installed it
- Cluster A - PyPI
agentaixoperator wave 2: 3-package first-publish RAT clusterpy-worm+py-wormgpt+py-sock2(malicious-package, confirmed persistent RAT + remote code execution + autorun persistence + GitHub-raw second-stage download; samegoogleforum.pythonanywhere.comC2 as 2026-10-11 cluster):py-worm(0.1.0, 2.0.0, 2.0.1; GHSA-483q-j87r-c97c, OSV MAL-2026-17883),py-wormgpt(1.0.0; GHSA-q9mx-j265-447m, OSV MAL-2026-17886),py-sock2(0.1.0; GHSA-mrm7-9jxf-vx65, OSV MAL-2026-17881). All three carry the campaign tag2026-10-agentaixand share the IOC domaingoogleforum.pythonanywhere.comwith the 2026-10-11 cluster (agentaix,agent-vx,media-manager5), bringing the operator to 6 packages / 8 versions total since 2026-10-10.py-wormadds a disclosed second-stage: on import of theagentaixmodule (yes, the same module name - the operator reused the lure name internally), the package downloads a mutable Python file fromhttps://raw.githubusercontent.com/anonrider404/pypl/9395c5802b11bc088925d7adf6e2f66b8b0709fd/readme.txt(also fetched via therefs/heads/main/readme.txtbranch form) and runs it hidden on Windows. Versions 0.1.0 and 2.0.0 do this during import; version 2.0.1 does it in a background thread (anti-sandbox refinement over 2 versions). The remote file reportedly includes a remote file-management client with registry-based persistence, C2-style polling of thegoogleforum.pythonanywhere.comdomain, and capabilities for file transfer, deletion, and command execution. The record notes that the remote files contents at the time of victim execution have not been established (anonrider404/pyplis a live GitHub repo under attacker control - the operator can change whatreadme.txtserves at any time). Reporterkam193(Kamil Mańkowski) credits ESTsecurity-adjacent and OpenSSF for the finders. Severityhigh` for this cluster (persistent RAT with mutable GitHub-raw stage-2 server + Windows registry persistence + explicit RAT behaviour; the 6-package operator continuity across 2 waves and a disclosed GitHub-attacker-account IOC makes this one of the stronger PyPI RAT campaigns of October) - Cluster B - npm Wix dep-confusion operator wave 3:
util-foriepft@1.0.0(dependency-confusion, confirmed install-time host-command exfiltration viathunderboltRegistry.jspayload nearly identical to 2026-10-09css-overscroll-contain@1.0.1family, samedxpoc.gt.tccollector, SHA-256 payload hash disclosed):util-foriepft(1.0.0; GHSA-jc4x-j69j-jf5c, OSV MAL-2026-17878, published 2026-10-08 17:34 UTC by npm userregex33-hackerone, still available 2026-10-11, GHSA-ingested 2026-10-15). Shadows Wix-internal registry module names viaregistry-manifest.min.json(SHA-256c8e3101a375550ae7559c94b2720f81dc63cac44c4c8aace17211e5eed71751d) that calls out Wix-internal modules. On module load,thunderboltRegistry.js(SHA-2560bebf66b8f89240b99cbe6dadc92023156e6155740e272d3e7a43aa138b8b675) runs host commands viachild_processand POSTs their output todxpoc[.]gt[.]tc. The OSSF record explicitly says this payload is nearly identical to the payload ofcss-overscroll-contain@1.0.1published from the same account - that package (MAL-2026-17705, 2026-10-09 Cluster B) read/var/run/secrets/kubernetes.io/serviceaccount/token, scraped env vars matching secret-like patterns, and attemptedunshare --user --mount+devtmpfs/cgroup/release_agentcontainer-escape. Operator continuity makes this slug a direct wave-3 extension (wave 1:css-jptvix-polyfill+appsecc.com/json 2026-10-07; wave 2:wix-reg-poc-bypass+css-overscroll-containon 2026-10-09; wave 3:util-foriepftsurfaced today). Severityhighfor this package (confirmed shared payload with the K8s-SA-token-stealingcss-overscroll-containfamily; any installing pod must assume the same tokens and env-vars were scraped and the same container-escape attempted) - *Cluster C - PyPI
seapy-ops8-version concealed-upload tool with in-memory Base64/gzip code execution + REPL impersonation (malicious-package, confirmed file exfiltration + remote-code execution, 2-stage version-split payload design, `.space-z.aiC2)**:seapy-ops(1.0.0, 1.0.1, 1.0.2, 1.1.0, 1.1.1, 1.1.2, 1.2.1, 1.2.2; GHSA-5j6r-jv3q-c93f, OSV MAL-2026-17880, findersmiling-hyena). Advertised as a "local file analyzer". Versions 1.0.0 through 1.1.2 hide folder-collection and upload behind an unlock gate: once unlocked, the tool recursively uploads eligible files from the working directory to a configured remote server. A hidden prompt command also uploads the folder before the first prompt. Symlinks can expose content outside the directory, and server-supplied result paths can write files outside the working directory (path traversal on writes). Versions 1.2.1 and 1.2.2 shift the payload: the tool shows a Python REPL that silently sends eligible single-token input to a server as an unlock password, then fetches Base64-encoded, gzip-compressed code, runs it in memory, and calls its main function. Loader errors are disguised as file-not-found errors (failure-concealment). Confirmed C2 domains:preview-chat-960504a9-b4e0-4b69-bc80-6ac3d4fa4ae0.space-z.aiandb196q82k8891-d.space-z.ai. Thespace-z.aiapex was previously named in the 2026-10-14 sweep (Cluster DpyyiREPL C2 - same operator profile across REPL-impersonation campaigns). SHA-256 payloads forseapy/cli.pyon each affected version are listed in the OSV record. Severityhigh` for this package (functional file exfiltration + working in-memory Base64/gzip code loader + 8-version iteration; REPL-impersonation is a sophisticated anti-analysis primitive beyond CWE-506 boilerplate) - Cluster D - PyPI
getpubip3-version infostealer with "api-bsx.pages.dev" second-stage URL and campaign-link to yesterday`s fontcase (malicious-package, confirmed infostealer + browser-data exfiltration + obfuscation + remote-executable download):getpubip(0.1.0, 0.1.1, 0.1.2; GHSA-7j9m-mhr6-9jj6, OSV MAL-2026-17884, campaign2026-10-getpubip, reporterkam193). On import, obfuscated code downloads and executes an infostealer. Record notes "some similarities with the campaign2026-10-fontcase" - fontcase was yesterdays Cluster B carve-out from the 2026-10-14 sweep (3-packagefontcase/sysdiagd/pyyicluster, also kam193-reported). IOCs: domainapi-bsx.pages.dev, URLhttps://api-bsx.pages.dev/download(a Cloudflare Pages deployment under attacker control - throwaway edge hosting). Behavioural reasons: downloads and executes a remote executable, infostealer, browser-data exfiltration, obfuscation. Also linked via Triage analysistria.ge/261015-hppmhsgx51. Severityhigh` for this package (confirmed functional infostealer with browser-data target + disclosed stage-2 URL + fontcase-campaign kinship) - Cluster E - PyPI 3-package
proxyrubikaoperator cluster with Android-targeted file exfiltration (malicious-package, confirmedfiles-exfiltration+target:androidbehaviour; shared campaign tag2026-10-proxyrubika, no C2 disclosed in record):proxyrobika(0.1.0; GHSA-ch77-7g6p-3v7x, OSV MAL-2026-17889),proxy-rubikis(0.1.0; GHSA-j493-92mg-8qj9, OSV MAL-2026-17887),proxyrubika(0.1.0; GHSA-rmvf-4vh2-pv34, OSV MAL-2026-17885). All three share the campaign tag2026-10-proxyrubikaand the OSSF reasonsfiles-exfiltration+target:android. All reported bykam193; package names are slight variations of each other, consistent with a single-operator spray against the "Rubika" messaging-service user base (Rubika is a popular Iranian/Persian messaging and social app, so the Android focus and Persian-looking naming suggests the targets are Android-side Rubika accounts, not developers directly). Record body is terse: "The package contains code for automated files exfiltration." No HTTP endpoint, IP, or specific hash published beyond each tarballs source identifier. Severitymedium` for this cluster (confirmed file exfiltration behaviour but no disclosed C2 or payload details; the attack vector is unusual - the installer is likely a hobbyist Rubika-automation user who runs the package on their phone or workstation, not a typical dev-tooling consumer, so dev-fleet exposure is low) - *Cluster F - npm `@flexmr/
2-package dep-confusion probe:@flexmr/ui+@flexmr/utils(dependency-confusion, confirmed install-time HTTP beacon + DNS OAST canary +99.99.99sentinel version; InvisiRisk-flagged on@flexmr/uiand ossf-package-analysis-flagged on@flexmr/utils)**:@flexmr/ui@99.99.99(GHSA-ccxj-49h8-hp3q, OSV MAL-2026-17879, finder InvisiRisk, Inc.) and@flexmr/utils(1.0.0, 3.0.12; GHSA-f8pr-fqvq-vvxv, OSV MAL-2026-17888, finder ossf-package-analysis).@flexmr/ui@99.99.99is the canonical dep-confusion sentinel (99.99.99was the version pattern of the FlexMR dep-confusion probe operator - the package was published to npm 2026-10-13 and GHSA-registered 2026-10-15). Itsbeacon.js(SHA-256bdee8d65c1c5b40df70e851eda298aa0729f0a618e11d702a6e9a35285c4e2c3) runs duringpreinstall,install, andpostinstalllifecycle events, sends the package name, lifecycle event, a fixed token, and host identity details tohttp://177.7.60.239:48080, and encodes the hostname in a DNS query underoob.recon.dev("recon.dev" is a known bug-bounty / recon OAST brand - this is a bug-bounty-adjacent probe against FlexMR, a UK market-research platform).@flexmr/utils@1.0.0/3.0.12is a second scope slug flagged by OpenSSF Package Analysis for "executes commands associated with malicious behavior" (specific IOCs not disclosed on/utils; the 3.0.12 non-sentinel version is noteworthy - its a plausibly-realistic version jump rather than a99.xsentinel, so the operator may be probing both the canonical dep-confusion fingerprint and a plausible-looking version to beat an internal3.0.11). Severitymediumfor the cluster (dep-confusion probe tier, confirmed HTTPS beacon on/uibut no credential-stealing payload yet) - Cluster G - npm
tailwindcss-form+tailwindcss-uniform2-package typosquat continuation of the 2026-10-10 Tailwind-form operator (typosquat, CWE-506 boilerplate takedowns with no runtime analysis published; naming pattern directly extends 2026-10-10tailwind-animatecss-uniform/-formwave):tailwindcss-form(all versions; GHSA-c8m9-qwg6-5cv9) andtailwindcss-uniform(all versions; GHSA-r7f7-6833-rxh9). Both typosquat the real@tailwindcss/formsnpm package (the scoped form the Tailwind team maintains). The 2026-10-10 sweep (Cluster D in that write-up) noted the same operator publishedtailwind-animatecss-uniformandtailwind-animatecss-formas a continuation of the 2026-10-09tailwindcss-ui-extensions+tailwindcss-effects-kitcluster - todays pair drops the "animatecss" infix and goes with the simplertailwindcss-*form, closer to the real@tailwindcss/formsslug. The pattern of two sibling slugs (-formand-uniform) in each wave is the operators signature. GHSA bodies are CWE-506 "fully compromised" boilerplate with no IOCs. Severitymediumfor this cluster (install-time code execution risk per CWE-506 pattern, no vendor runtime analysis published) - *Cluster H - npm Baileys lure operator wave 4: 7 new scoped and standalone packages (malicious-package, CWE-506 boilerplate takedowns, no runtime analysis published; naming lineage continues the 2026-10-09 `@bellaxchuu/
+@xayz/libsignal-node+my-baileys+@kxafunc/xbails16-package Cluster D and the 2026-10-13 60+ package wave 3)**:xmd-baileys(all versions; GHSA-m3qf-j9rf-pqrh),@developmentyora/baileyss(all versions; GHSA-v8xh-mr86-2fpq),@developmentyora/yorakids(all versions; GHSA-xgr5-84p3-qqmf),@celestial-community/baileys(all versions; GHSA-5ghv-64gv-gv29),bungoma(all versions; GHSA-jj55-mvw9-496r),kiyoramarkets(all versions; GHSA-23wg-cgvp-f8w7),asistenyorstore(all versions; GHSA-qgh5-36wr-3vvw). Three slugs are explicit Baileys-brand-impersonations (xmd-baileys,@developmentyora/baileyss,@celestial-community/baileys);@developmentyora/yorakidsis the sibling slug under the same new@developmentyorascope and ties the fourth non-baileys-named slug into the cluster.bungoma,kiyoramarkets,asistenyorstoreare the three standalone-slug entries whose GHSA bodies are identical boilerplate - the naming has an Indonesian/Yoruba/Swahili theme (Bungoma is a town in Kenya, Kiyora is an Indonesian retailer, "asisten yor store" reads as Indonesian for "assistant yor store") consistent with earlier Baileys-operator "lunexindonesia" and@fer2809fl/baileys/arsya-baileysIndonesian-naming fingerprints from the 2026-10-10 wave. All 7 CWE-506 boilerplate advisories with no published IOCs. Severitymediumfor this cluster (coordinated wave-4 co-publication confirmed by naming + scope pattern, runtime payload family consistent with prior Baileys-lure waves but todays specific payload not yet documented in the GHSA bodies) - Operator continuity: this sweep extends several week-running operators rather than introducing new ones.
agentaixoperator is confirmed-continuing from the 2026-10-11 cluster (same campaign tag, samegoogleforum.pythonanywhere.comC2; todays wave now has a disclosed GitHub-attacker-account IOCanonrider404/pyplwith mutable second-stage viareadme.txt). **Wix dep-confusion operator** continues from the 2026-10-07/09 clusters (samethunderboltRegistry.jspayload family +dxpoc.gt.tcexfil - with the OSSF record explicitly sayingutil-foriepft's payload is nearly identical tocss-overscroll-contain@1.0.1). **Tailwind-form typosquat operator** continues from 2026-10-09/10 waves (same-form/-uniformsibling-pair signature). **Baileys lure operator** continues from the 2026-10-09 16-package cluster through the 2026-10-13 60+ package wave 3 (todays wave 4 adds 7 packages; the Indonesian/Kenyan naming lineage is the operator continuity signal).kam193continues as top PyPI reporter - today reportspy-worm,py-wormgpt,py-sock2,getpubip, and the 3proxyrubikavariants (7 of 11 PyPI advisories). No new activity from:priyashareekAccenture+@newspage dep-confusion operator (quiet since 2026-10-14),dumtbanorderly-plugin GitHub Actions CI-token-abuse operator (quiet since 2026-10-14),kingsize+limbomail.com+lunexindonesia/node-net-pooldiscord-mfa Windows-RAT campaign,conx3993operator (yesterdays 5-packagerealwbx.comdep-confusion cluster quiet),saekafraud-tool campaign (yesterdays PyPI credit-card checker quiet),185.158.107.175operator,64.181.165.115operator,hardhat-optionoperator,wgkitRubyGems operator,xwise8887,sharpnescrates.io,@tunstock/remact-dom,nfjbill,@bitwardne/*,reaperhackbot256f,ig-gox,s4yhiioperator. New disclosed attacker-controlled hosts today:anonrider404/pyplGitHub repo (Cluster Apy-wormsecond-stage),api-bsx.pages.devapex +/downloadpath (Cluster Dgetpubipsecond-stage),177.7.60.239:48080(Cluster F@flexmr/uiHTTP beacon),oob.recon.devapex (Cluster F@flexmr/uiDNS OAST canary). TensorLake AI maintainer compromise (2026-10-08 carve-out) remains quiet attensorlake@0.5.145with no wave-2 republish
Clean-up steps
- For Cluster A (
agentaixPyPI operator wave 2 -py-worm+py-wormgpt+py-sock2): grep everyrequirements.txt,pyproject.toml,Pipfile.lock,poetry.lock,uv.lock,pdm.lock,conda envforpy-worm(0.1.0,2.0.0,2.0.1),py-wormgpt(1.0.0), andpy-sock2(0.1.0). On ANY hit: treat the installing host as having run a persistent RAT with GitHub-raw stage-2 download. Rotate every credential reachable from the hosts Python runtime (API tokens, SSH/GPG keys unlocked during the install window, cloud SDK credentials, env-exported secrets). On Windows hosts, check for registry persistence underHKCU\Software\Microsoft\Windows\CurrentVersion\Runand Scheduled Tasks (the record notes "registry-based persistence"); thepy-worm@2.0.1background-thread variant means the hidden Python process may still be running after the install call returned. Add egress blocks:googleforum.pythonanywhere.comexact subdomain (do NOT blanket-blockpythonanywhere.comapex - it is a legitimate PaaS),raw.githubusercontent.com/anonrider404/pypl/*path (block the specific attacker-controlled repo path at egress proxies), andgithub.com/anonrider404/pyplrepo access on build hosts. Report theanonrider404GitHub account to GitHub for abuse takedown. Also audit for leftover autorun entries that match the operator signature from the 2026-10-11 Cluster B (sameagentaixcampaign tag):~/.config/autostart/on Linux,~/Library/LaunchAgents/on macOS, user-level cron /systemd --user. The 6-package operator continuity means a host that installed one may have been retargeted with another; grep for the full setagentaix,agent-vx,media-manager5,py-worm,py-wormgpt,py-sock2` together - For Cluster B (
util-foriepftnpm Wix dep-confusion operator wave 3): grep everypackage.json,package-lock.json,yarn.lock,pnpm-lock.yamlforutil-foriepft(version1.0.0). On hit: assume the same K8s SA-token theft + env-variable scraping + container-escape attempt ascss-overscroll-contain@1.0.1(the OSSF record explicitly says the payload is nearly identical). On any pod/node that resolved the package, rotate the Kubernetes service-account token, rotate every env-exported credential the pod could reach, audit/proc/self/mountinfofor lingering attacker mounts, and treat the pod image as compromised and rebuild from known-good. Add egress blocks ondxpoc.gt.tcapex (already in the standing denylist from 2026-10-09 - do not remove) and add detection rules for the IOC filesthunderboltRegistry.js(SHA-2560bebf66b8f89240b99cbe6dadc92023156e6155740e272d3e7a43aa138b8b675) andregistry-manifest.min.json(SHA-256c8e3101a375550ae7559c94b2720f81dc63cac44c4c8aace17211e5eed71751d) under any npm package name. If your org publishes under Wix-internal*Registry*names (thunderboltRegistry,corvidRegistry,editorRegistry,siteAssetsRegistry), scope-lock the internal registry (npm config set @your-wix-scope:registry https://internal-registry) and hold the public slugs with placeholder packages at a safe version. Report npm userregex33-hackeronefor the published nameutil-foriepft@1.0.0as the same operator who shippedcss-overscroll-contain - For Cluster C (
seapy-opsPyPI 8-version concealed-upload tool): grep forseapy-ops(any of 1.0.0, 1.0.1, 1.0.2, 1.1.0, 1.1.1, 1.1.2, 1.2.1, 1.2.2). On hit: preserve the host for forensic review. For versions 1.0.0-1.1.2, assume the recursive upload has fired against the directory whereseapywas run (and against any symlink targets outside that directory); treat all files in those directories as having left the host. For versions 1.2.1-1.2.2, assume the single-token REPL input was captured as a password AND the in-memory Base64/gzip code loader fired - the actual payload is undocumented, so treat the host as compromised and rotate every credential reachable from it. Add egress blocks:space-z.aiapex (already in the standing denylist from 2026-10-14 - keep it),preview-chat-960504a9-b4e0-4b69-bc80-6ac3d4fa4ae0.space-z.aiandb196q82k8891-d.space-z.aiexact subdomains. Add detection rules forseapy/cli.pywith any of the 8 published SHA-256 hashes (listed in the OSV record). The REPL-impersonation primitive (a prompt that looks like Python`s built-in REPL but silently exfils typed tokens) is novel enough to call out in security awareness: contributors should treat any Python prompt from an unexpected source with the same suspicion as a sudo prompt from an unexpected source - For Cluster D (
getpubipPyPI infostealer): grep forgetpubip(any of 0.1.0, 0.1.1, 0.1.2). On hit, assume the obfuscated import-time payload fired - the browser-data target means Chrome/Firefox/Edge profile credentials, cookies, and saved sessions are presumed exfiltrated. Rotate every login on the host and clear browser profiles. Add egress blocks:api-bsx.pages.devapex +/downloadpath.pages.devis Cloudflare Pages (legitimate edge hosting) - block the specificapi-bsxsubdomain, do NOT blanket-blockpages.devapex. Reference Triage reporttria.ge/261015-hppmhsgx51for dynamic-analysis IOCs. The campaign kinship with yesterdaysfontcase(2026-10-14 Cluster B carve-out) means hosts that installedfontcaseorsysdiagdorpyyishould also be audited forgetpubip` by the same operator profile - For Cluster E (3-package
proxyrubikaPyPI Android file-exfiltration cluster): grep forproxyrobika(0.1.0),proxy-rubikis(0.1.0),proxyrubika(0.1.0). On hit: file exfiltration from the installers working directory is the confirmed behaviour; the Android target (target:androidOSSF reason) suggests this is more likely a Rubika-messaging-user tool than a dev-tooling library, so a corporate dev-host hit is unusual and the host should be preserved for forensic review (fraud/account-theft side rather than dev-credential compromise). No specific C2 endpoint disclosed in the record, so apply standard removal + credential-rotation hygiene until a vendor publishes a runtime analysis. The three variations of the same name (one correct spellingproxyrubika, one transposedproxyrobika, one pluralisedproxy-rubikis) are the operators signature - watch for a wave 2 under further Rubika-themed slugs - For Cluster F (
@flexmr/ui+@flexmr/utilsnpm dep-confusion probe): grep for@flexmr/ui@99.99.99and@flexmr/utils(1.0.0, 3.0.12). On hit, the@flexmr/ui@99.99.99beacon fired duringpreinstall/install/postinstalland sent host identity plus a fixed token tohttp://177.7.60.239:48080(plus a DNS canary tooob.recon.dev). Treat as recon-tier - no credential-stealing payload confirmed yet - but the@flexmr/*scope is the signal that FlexMR (a UK market-research platform) is being probed. If your org is FlexMR or uses@flexmr/*internally, scope-lock the internal registry and hold the public slugs with placeholders. Add egress blocks:177.7.60.239:48080exact IP+port andoob.recon.devapex (recon.dev is a known bug-bounty / OAST brand, so this may be a legitimate bug-bounty probe - but still block from CI/build hosts). Detection rule forbeacon.jsSHA-256bdee8d65c1c5b40df70e851eda298aa0729f0a618e11d702a6e9a35285c4e2c3under any npm package name. The@flexmr/utils1.0.0 + 3.0.12 non-sentinel pair is unusual for dep-confusion (operator probing both the canonical99.xfingerprint and a plausible-looking version to beat an internal3.0.11) - teach contributors that a3.0.12with no prior history and a jump from1.0.0to3.0.12is also a suspect dep-confusion signature - For Cluster G (
tailwindcss-form+tailwindcss-uniformnpm typosquats): grep fortailwindcss-formandtailwindcss-uniform(both all versions). On hit, remove and treat as CWE-506 install-time compromise until a vendor publishes a runtime analysis. The real packages a developer wants are@tailwindcss/forms(the scoped form the Tailwind team maintains) - a wide suspicion of any non-scopedtailwindcss-*package is reasonable given this operators continued wave count. Teach contributors that unscopedtailwindcss-form/-uniform/-animatecss-*are suspect by default; the scoped forms (@tailwindcss/forms,@tailwindcss/typography,@tailwindcss/aspect-ratio,@tailwindcss/container-queries`) are the real artefacts - For Cluster H (Baileys lure operator wave 4 - 7 npm packages): grep every
package.json,package-lock.json,yarn.lock,pnpm-lock.yamlforxmd-baileys,@developmentyora/baileyss,@developmentyora/yorakids,@celestial-community/baileys,bungoma,kiyoramarkets,asistenyorstore(all all-versions). CWE-506 boilerplate advisory means the specific payload is undocumented in these GHSAs; treat the install as credential-compromised until Socket or a vendor publishes a runtime analysis. Watch for a wave-5 under new scopes@developmentyora/*and@celestial-community/*and under additional Indonesian/Kenyan/Swahili-named standalone slugs (the operators naming lineage from the 2026-10-10@fer2809fl/baileys+arsya-baileyswave through the 2026-10-13 60+ package wave 3). Add detection rules for any npm package containingbaileys,bailey,xbails,libsignal-node, orwhiskeysocketssubstrings outside the real@whiskeysocketsscope - this is the Baileys lure operators primary brand-impersonation surface - NEW outbound denylist entries for CI/build-host egress proxies today:
raw.githubusercontent.com/anonrider404/pypl/*path (Cluster Apy-wormsecond-stage; block the specific attacker-controlled repo path at egress proxies, do NOT blanket-blockraw.githubusercontent.comapex),api-bsx.pages.devapex +/downloadpath (Cluster Dgetpubipsecond-stage;pages.devapex is Cloudflare Pages legit, block the specific subdomain),177.7.60.239:48080exact IP+port (Cluster F@flexmr/uiHTTP beacon),oob.recon.devapex (Cluster F@flexmr/uiDNS OAST canary). Also block the specificanonrider404GitHub account at build-host egress and report for abuse takedown. Keep prior egress blocks in place:googleforum.pythonanywhere.comexact subdomain (2026-10-11),space-z.aiapex +preview-chat-960504a9-b4e0-4b69-bc80-6ac3d4fa4ae0.space-z.ai+b196q82k8891-d.space-z.aisubdomains (2026-10-14),dxpoc.gt.tcapex (2026-10-09 Wix cluster),realwbx.comapex +/ip.php+/ippaths (2026-10-15),uncoder.eu.orgapex +/cc-checker/api.phppath (2026-10-15),accenture-npm.azurewebsites.net+/test+/async+/mfe,limbomail.comapex +github.com/lunexindonesia/node-net-pool+github.com/trktgq0wbre1/node-net-pool,github.com/unicodeces/font-atlas,collector.oob.s4yhii.com+*.oob.s4yhii.com+s4yhii.comapex,64.181.165.115/dc,167.88.172.33:8087+jsonspack.com,goxtools.shopapex,minhdong.siteapex + GitHub userVangBanLaNhat,45.138.12.177:8089,185.158.107.175:8787,ltidi.storage.googleapis.com/depenconf/,oob.s4yhii.com:9999/native,*.oast.pro/*.oast.me/*.oast.fun/*.oast.site/*.oastify.com,frjmzbjbhwvtdnsuodmu.supabase.co,api.npoint.ioapex,tele.metry.orgin.net,morroncr0w.io,api.telegram.orgon untrusted CI/build hosts,appsecc.com,webhook.site/*,nfjbill.ren,storage.googleapis.com/depenconf/,10.0.19.0/24+10.0.49.0/24,api.nm-streetwear.space, Discord webhook URL pattern,ipify.org+ifconfig.me,gitflic.ru,api.wagmiwallet.org,backend-cybersecuritydashboard.onrender.com, Monero mining pools, Ethereum/Sepolia/Arbitrum/Polygon RPC endpoints,chinazhangsan.ccwu.cc,fabric-npm.gm-service.xyz,jsonkeeper.com,npm-canary.aveliscare.com,meta.brs.cx,s3://pkusinski-external/, AWS account631484165566, Slack bot-token exfil patterns,s85r5k14qk.execute-api.us-east-1.amazonaws.com/prod/hook,tuamaeaquelaursa.com,45.138.0.0/16RubyGems wgkit CIDRs
Sources
- GitHub Advisory Database - recent malware advisoriesgithub.com
- GHSA-483q-j87r-c97c - pypi py-worm (Cluster A - agentaix operator wave 2, campaign 2026-10-agentaix, anonrider404/pypl GitHub-raw stage-2, Windows registry persistence, MAL-2026-17883)github.com
- OSSF malicious-packages MAL-2026-17883 raw record (py-worm IOCs: googleforum.pythonanywhere.com, raw.githubusercontent.com/anonrider404/pypl paths, finder kam193)raw.githubusercontent.com
- GHSA-q9mx-j265-447m - pypi py-wormgpt (Cluster A - agentaix operator wave 2, MAL-2026-17886)github.com
- GHSA-mrm7-9jxf-vx65 - pypi py-sock2 (Cluster A - agentaix operator wave 2, MAL-2026-17881)github.com
- kam193 bad-packages entry for py-worm (reporter`s own detail page for the PyPI advisory)bad-packages.kam193.eu
- GHSA-jc4x-j69j-jf5c - npm util-foriepft (Cluster B - Wix dep-confusion wave 3, thunderboltRegistry.js SHA-256 0bebf66b..., dxpoc.gt.tc exfil, nearly identical to css-overscroll-contain@1.0.1 MAL-2026-17705 payload, MAL-2026-17878)github.com
- OSSF malicious-packages MAL-2026-17878 raw record (util-foriepft IOCs: dxpoc.gt.tc, thunderboltRegistry.js SHA-256 hashes)raw.githubusercontent.com
- GHSA-5j6r-jv3q-c93f - pypi seapy-ops (Cluster C - 8-version concealed-upload + REPL impersonation + in-memory Base64/gzip code exec, space-z.ai C2, MAL-2026-17880)github.com
- OSSF malicious-packages MAL-2026-17880 raw record (seapy-ops IOCs: preview-chat-960504a9-b4e0-4b69-bc80-6ac3d4fa4ae0.space-z.ai, b196q82k8891-d.space-z.ai, finder smiling-hyena, 8 SHA-256 hashes for seapy/cli.py)raw.githubusercontent.com
- GHSA-7j9m-mhr6-9jj6 - pypi getpubip (Cluster D - obfuscated infostealer, api-bsx.pages.dev/download stage-2, similarities to campaign 2026-10-fontcase, MAL-2026-17884)github.com
- OSSF malicious-packages MAL-2026-17884 raw record (getpubip IOCs: api-bsx.pages.dev, /download URL, finder kam193)raw.githubusercontent.com
- Triage dynamic-analysis report tria.ge/261015-hppmhsgx51 (getpubip)tria.ge
- GHSA-ch77-7g6p-3v7x - pypi proxyrobika (Cluster E - Android file-exfil cluster, campaign 2026-10-proxyrubika, MAL-2026-17889)github.com
- GHSA-j493-92mg-8qj9 - pypi proxy-rubikis (Cluster E - Android file-exfil cluster, MAL-2026-17887)github.com
- GHSA-rmvf-4vh2-pv34 - pypi proxyrubika (Cluster E - Android file-exfil cluster, MAL-2026-17885)github.com
- GHSA-ccxj-49h8-hp3q - npm @flexmr/ui (Cluster F - 99.99.99 sentinel dep-confusion, 177.7.60.239:48080 + oob.recon.dev beacon, InvisiRisk finder, MAL-2026-17879)github.com
- OSSF malicious-packages MAL-2026-17879 raw record (@flexmr/ui IOCs: 177.7.60.239:48080, oob.recon.dev, beacon.js SHA-256 bdee8d65...)raw.githubusercontent.com
- GHSA-f8pr-fqvq-vvxv - npm @flexmr/utils (Cluster F - 1.0.0 + 3.0.12 non-sentinel dep-confusion, ossf-package-analysis flag, MAL-2026-17888)github.com
- GHSA-c8m9-qwg6-5cv9 - npm tailwindcss-form (Cluster G - Tailwind-form typosquat continuation, CWE-506 boilerplate)github.com
- GHSA-r7f7-6833-rxh9 - npm tailwindcss-uniform (Cluster G - Tailwind-uniform typosquat continuation, CWE-506 boilerplate)github.com
- GHSA-m3qf-j9rf-pqrh - npm xmd-baileys (Cluster H - Baileys lure wave 4, CWE-506 boilerplate)github.com
- GHSA-v8xh-mr86-2fpq - npm @developmentyora/baileyss (Cluster H - Baileys lure wave 4, CWE-506 boilerplate)github.com
- GHSA-xgr5-84p3-qqmf - npm @developmentyora/yorakids (Cluster H - Baileys lure wave 4, same scope as /baileyss, CWE-506 boilerplate)github.com
- GHSA-5ghv-64gv-gv29 - npm @celestial-community/baileys (Cluster H - Baileys lure wave 4, CWE-506 boilerplate)github.com
- GHSA-jj55-mvw9-496r - npm bungoma (Cluster H - Baileys lure wave 4 Indonesian/Kenyan-themed slug, CWE-506 boilerplate)github.com
- GHSA-23wg-cgvp-f8w7 - npm kiyoramarkets (Cluster H - Baileys lure wave 4 Indonesian-themed slug, CWE-506 boilerplate)github.com
- GHSA-qgh5-36wr-3vvw - npm asistenyorstore (Cluster H - Baileys lure wave 4 Indonesian-themed slug, CWE-506 boilerplate)github.com
- DependencyWatch: multi-2026-10-15-ghsa-malware-sweep (prior-day context: conx3993 realwbx.com dep-confusion, saeka PyPI credit-card checker, babel-polyfill-plugin-corejs2 + eth-react-provider Amazon Inspector backfill)dependencywatch.io
- DependencyWatch: multi-2026-10-14-ghsa-malware-sweep (fontcase/sysdiagd/pyyi carve-outs - Cluster D getpubip is the next kam193 campaign in the same lineage)dependencywatch.io
- DependencyWatch: multi-2026-10-11-ghsa-malware-sweep (agentaix wave 1 - 3 packages agentaix/agent-vx/media-manager5, same campaign tag and C2 as today`s wave 2)dependencywatch.io
- DependencyWatch: multi-2026-10-09-ghsa-malware-sweep (Wix dep-confusion wave 2 - css-overscroll-contain K8s SA-token theft, same payload family as today`s util-foriepft)dependencywatch.io
- DependencyWatch: multi-2026-10-13-ghsa-malware-sweep (Baileys lure wave 3 60+ packages, same operator lineage as today`s Cluster H wave 4)dependencywatch.io
- DependencyWatch: npm-2026-10-08-tensorlake-maintainer-compromise (standing watch, no wave 2)dependencywatch.io
Check your lockfile against this and every other incident.
Paste a lockfile and it is matched on your own device against every compromised version we track. Nothing is uploaded and there is no account.