GitHub Advisory malware sweep, 2 September 2026
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.
Published 2 Sept 2026
Every version named by the advisory is in the scanner, so a lockfile check finds it directly.
- Severity
- High
- Type
- Advisory sweep
- Published
- 2 Sept 2026
- Ecosystems
- npmPyPI
- 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
- 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
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 hashcf3a48b4…d869, VT file hashd49fa539…b878envprovision@1.2.0-1.4.0- re-catalogued 2026-08-26 as2026-08-envprovisioncampaign identifiersyswatch@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).
4 packages 4 versions
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
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
Clean-up steps
- Grep 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 - For 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 - For 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 - For 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 - For 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 - For 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 - Verify 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
Sources
- GHSA-mpch-m5gg-4894 - syswatch (PyPI Snow Stealer, 2026-08-envprovision campaign wave 3)github.com
- GHSA-45hh-8cg6-r5qp - eslint-rxjs (npm typosquat of eslint-plugin-rxjs, malicious domain callback)github.com
- GHSA-h2w3-x32h-cpqq - eyiouss (npm CWE-506 takedown)github.com
- GHSA-vfw8-w58v-xv38 - twapfetch (npm CWE-506 takedown, DeFi TWAP-shape name)github.com
- GitHub Advisory Database - recent npm malware advisoriesgithub.com
- GitHub Advisory Database - recent PyPI malware advisoriesgithub.com
- OpenSSF malicious-packages repositorygithub.com
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.