GitHub Advisory malware sweep - 2026-09-02 batch (PyPI `syswatch` Snow Stealer - third `2026-08-envprovision` campaign package + npm `eslint-rxjs@1.0.1` typosquat of `eslint-plugin-rxjs` + npm `eyiouss` + `twapfetch` CWE-506 boilerplate takedowns)
PyPI syswatch@1.0.0 is a third package in the 2026-08-envprovision Snow Stealer campaign (browser + wallet infostealer, sandbox evasion, log wiping on Windows). npm eslint-rxjs@1.0.1 typosquats eslint-plugin-rxjs (OpenSSF flagged: "communicates with a domain associated with malicious activity"). eyiouss and twapfetch are all-versions CWE-506 boilerplate npm takedowns.
- Detected by
- GitHub Advisory Database · OpenSSF malicious-packages · OpenSSF Package Analysis · Amazon Inspector
- Also known as
- 2026-09-02 GHSA sweep · 2026-08-envprovision wave 3 (syswatch) · eslint-rxjs eslint-plugin-rxjs typosquat
- Ecosystems
- npmPyPI
- Packages tracked
- 4
What happened
The 24 hours ending 2026-09-02 published 4 new npm+PyPI malware advisories. Headline: PyPI syswatch is a third package in the 2026-08-envprovision Snow Stealer campaign (browser + wallet infostealer on Windows with sandbox evasion and log wiping - see envprovision 2026-08-24 for the family writeup). The npm side is quieter: one credible eslint-plugin-rxjs typosquat with an OpenSSF "communicates with malicious domain" tag, and two boilerplate CWE-506 takedowns.
Cluster A - PyPI syswatch Snow Stealer (third 2026-08-envprovision wave)
| Package | Version | GHSA | Payload | Campaign | |---|---|---|---|---| | syswatch | 1.0.0 | GHSA-mpch-m5gg-4894 | Snow Stealer | 2026-08-envprovision |
Same operator, same payload family as envprovision. Attack chain (Windows-only):
pip install syswatch→ package installs cleanly- On first
import syswatch, the package downloads and installs a disguised Windows executable - The dropper cleans logs and deletes the downloaded stager to defeat forensic recovery
- Snow Stealer runs: enumerates browser saved-password / cookie / autofill stores (Chrome, Edge, Brave, Firefox), modifies cryptocurrency wallet binaries so future transaction-signing leaks keys, executes sandbox-evasion checks (process list, mouse-heuristics, VM registry-tell keys) to defeat dynamic analysis
- Persistent installation:
pip uninstall syswatchdoes NOT remove the dropped Windows binary
Campaign lineage: - envprovision@1.2.0 / 1.3.0 / 1.4.0 - published 2026-08-24, source hash cf3a48b4…d869, VT file hash d49fa539…b878 - envprovision@1.2.0-1.4.0 - re-catalogued 2026-08-26 as 2026-08-envprovision campaign identifier - syswatch@1.0.0 (this file, 2026-09-02)
This is the third distinct package in the same campaign in nine days. Expect a fourth brand within days.
Cluster B - npm eslint-rxjs typosquat of eslint-plugin-rxjs
| Package | Version | GHSA | OpenSSF flag | |---|---|---|---| | eslint-rxjs | 1.0.1 | GHSA-45hh-8cg6-r5qp | communicates with a domain associated with malicious activity |
Typosquats the legitimate eslint-plugin-rxjs (RxJS lint rules maintained by Cartant). The eslint-<name> vs eslint-plugin-<name> naming is a well-known npm dep-confusion vector because a developer editing .eslintrc.js often writes plugins: ['rxjs'] (which resolves to eslint-plugin-rxjs), but when installing npm install eslint-rxjs --save-dev the shortened form is a common muscle-memory typo. Any Angular / NgRx / RxJS-heavy shop is a candidate target.
Cluster C - npm CWE-506 boilerplate
| Package | Versions | GHSA | Note | |---|---|---|---| | eyiouss | all versions (>= 0) | GHSA-h2w3-x32h-cpqq | Keyboard-mash naming, generic RCE | | twapfetch | all versions (>= 0) | GHSA-vfw8-w58v-xv38 | DeFi TWAP-price-fetcher name shape (targeting algo / MEV / market-maker dev environments) |
All-versions CWE-506 takedowns with only the standard "considered fully compromised" advisory boilerplate. Defensive value is name-level.
Registry state
All 4 packages were flagged as malware on their respective registries on 2026-09-02. syswatch has been yanked from PyPI; the three npm packages have been added to the npm quarantine list.
Discovery credits
GitHub Advisory Database, OpenSSF malicious-packages, OpenSSF Package Analysis, Amazon Inspector. syswatch cross-referenced against bad-packages.kam193.eu/pypi/package/syswatch (Kamil Mańkowski's PyPI malware tracker).
Affected packages (4)
- npmeslint-rxjs1.0.1
- npmeyiouss0.0.0
- PyPIsyswatch1.0.0
- npmtwapfetch0.0.0
These are usually pulled in as transitive dependencies rather than installed directly. Check your whole tree at once - it runs in your browser and nothing is uploaded.
Impact
- Cluster A - PyPI
syswatchSnow Stealer (2026-09-02, 1 package, 1 version):syswatch@1.0.0(GHSA-mpch-m5gg-4894, campaign2026-08-envprovision). This is the third package tracked in the ongoing2026-08-envprovisionSnow Stealer campaign afterenvprovision@1.2.0-1.4.0(2026-08-24 / 2026-08-26). Payload chain: on Windows only, on import, the package downloads and installs a disguised executable, cleans logs to defeat forensic recovery, and drops Snow Stealer - a heavily obfuscated infostealer with sandbox-evasion routines that (a) enumerates browser saved-password / cookie / autofill stores (Chrome, Edge, Brave, Firefox), (b) modifies cryptocurrency wallet application binaries so subsequent transaction-signing flows leak keys, and (c) implements sandbox-evasion checks (process list, mouse-heuristics, VM registry-tell keys) that force dynamic analysis to actively fight the sample. Persistent installation behaviour: even afterpip uninstall syswatch, the dropped Windows binary continues to run. Package name (syswatch= "system watcher") targets operators / SREs who might grep PyPI for a Python system-monitoring library. Any Windows host that ranpip install syswatchsince 2026-09-02 needs re-imaging plus wallet-key rotation - the dropper cleans its own logs so post-hoc "we did not find IOCs on disk" is not a clean signal - Cluster B - npm
eslint-rxjs@1.0.1typosquat (2026-09-02, 1 package, 1 version):eslint-rxjs@1.0.1(GHSA-45hh-8cg6-r5qp, OpenSSFCWE-506). Typosquats the legitimateeslint-plugin-rxjs(RxJS lint rules maintained by Cartant) -eslint-*shorthand-style names are a well-known npm dep-confusion vector because Node developers routinely omit the-plugin-in imports and configs. OpenSSF Package Analysis flag: "the package communicates with a domain associated with malicious activity". All the highest-fingerprinted eslint config repos (Airbnb, StandardJS, ES bar, RxJS-style guides) are candidate targets. Any Angular / NgRx / RxJS-heavy team that addedeslint-rxjsto devDependencies (rather thaneslint-plugin-rxjs) should assume dev-workstation compromise - Cluster C - npm CWE-506 boilerplate takedowns (2026-09-02, 2 packages, no per-package IOCs):
eyiouss(GHSA-h2w3-x32h-cpqq) - keyboard-mash naming, generic RCE;twapfetch(GHSA-vfw8-w58v-xv38) - "twap fetch" reads as a DeFi TWAP-price-fetcher helper (targeting DeFi trader / MEV / algo bots). All-versions CWE-506 takedowns with only the standard "any computer that has this package installed or running should be considered fully compromised" advisory boilerplate - defensive value is name-level: any lockfile hit means uninstall
What to do
- 1Grep every lockfile (
package-lock.json,yarn.lock,pnpm-lock.yaml,requirements.txt,Pipfile.lock,poetry.lock,uv.lock) for:syswatch,eslint-rxjs,eyiouss,twapfetch. Uninstall on any hit and rebuild the lockfile against a clean cache - 2For Cluster A (
syswatchSnow Stealer - third2026-08-envprovisionwave): any Windows host that ranpip install syswatchneeds to be re-imaged. Rotate every browser saved-password, cookie, autofill entry, MFA seed, VPN / SSH / cloud-CLI credential on the host - all from a separate clean workstation. If the host held any cryptocurrency wallet, assume funds are at risk: transfer remaining balances to a fresh wallet generated on a known-clean machine before doing anything else. The Snow Stealer family also modifies wallet application binaries so any subsequent wallet install on the same host cannot be trusted - reinstall wallet software from the vendor after re-imaging, never restored from backup. Push the campaign hash lineage (see envprovision 2026-08-24 IOCs) to endpoint EDR blocklists. This is the third package in the same campaign in nine days - expect a fourth brand within days - 3For Cluster B (
eslint-rxjstyposquat): everypackage.jsonand eslint config in the codebase should be audited for"eslint-rxjs"and replaced with"eslint-plugin-rxjs"(the legitimate package). Ifeslint-rxjswas installed at any point, the dev workstation must be treated as compromised - the malicious variant "communicates with a domain associated with malicious activity" (OpenSSF Package Analysis flag), meaning outbound C2 was in place during the install window. Rotate npm / GitHub / cloud-CLI credentials on the dev workstation - 4For Cluster C (CWE-506 boilerplate): any lockfile hit for
eyioussortwapfetchmeans uninstall and rebuild.twapfetchis a targeted name for DeFi / TWAP / MEV algo trader dev environments - if the affected workstation held any hot wallet or trading-API key, rotate those first - 5For all
pip installruns in CI, prefer--no-build-isolation+ explicit--only-binarywhere possible. Note:syswatchtriggers on import (not install-time build), so--only-binarydoes not stop it - addsyswatch(and anyenvprovision-family variant) to your registry-mirror deny list - 6For all
npm installruns in CI, prefer--ignore-scripts- typosquats and dep-confusion pkgs still typically ship postinstall/preinstall hooks even when the primary payload lives in imported code - 7Verify none of the enumerated packages still resolves via your private mirror - internal caches (Nexus / Artifactory / Verdaccio / Sonatype / devpi) routinely keep serving yanked tarballs after the public takedown
References
- GitHubGHSA-mpch-m5gg-4894 - syswatch (PyPI Snow Stealer, 2026-08-envprovision campaign wave 3)github.com
- GitHubGHSA-45hh-8cg6-r5qp - eslint-rxjs (npm typosquat of eslint-plugin-rxjs, malicious domain callback)github.com
- GitHubGHSA-h2w3-x32h-cpqq - eyiouss (npm CWE-506 takedown)github.com
- GitHubGHSA-vfw8-w58v-xv38 - twapfetch (npm CWE-506 takedown, DeFi TWAP-shape name)github.com
- GitHubGitHub Advisory Database - recent npm malware advisoriesgithub.com
- GitHubGitHub Advisory Database - recent PyPI malware advisoriesgithub.com
- OpenSSFOpenSSF malicious-packages repositorygithub.com