# GitHub Advisory mass backfill: about 10,000 PyPI malware advisories in a day

> On 2026-07-21 GitHub's Advisory Database published a ~10,000-package PyPI CWE-506 malware backfill (400 GHSA pages × 25/page) - the largest single-day GHSA malware batch ever recorded, spanning the entire alphabet in descending order. Dominant themes: `yfinance` typosquats (~20 variants), `python-binance`/`requests`/`tensorflow`/`beautifulsoup`/`websockets` typosquats, a `wallet*` crypto-stealer cluster (~15 packages), a `xolo*` random-name blob cluster (~50 packages), and coordinated `lib{cv,craft,ed}*` random-word-combo clusters.

- Published: 2026-07-21
- Severity: high
- Kind: 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.
- Ecosystems: PyPI
- Scope: 223 packages, 0 compromised versions
- Tags: typosquat, credential-theft, crypto-wallet-drain, obfuscation, infostealer
- Also known as: 2026-07-21 GHSA PyPI mass backfill, PyPI yfinance/requests/wallet typosquat sweep, xolo* and lib*-random-blob PyPI cluster
- Detected by: GitHub Advisory Database, OpenSSF Package Analysis, PyPI Security
- Incident ID: pypi-2026-07-21-ghsa-mass-backfill

## Affected packages (223)

Only the exact versions listed were named by the source advisories. Other versions are not implicated.

| Package | Ecosystem | Compromised versions |
|---|---|---|
| [dsicord-webhook](https://dependencywatch.io/package/pypi/dsicord-webhook) | PyPI |  |
| [eautifulsoup](https://dependencywatch.io/package/pypi/eautifulsoup) | PyPI |  |
| [ebautifulsoup](https://dependencywatch.io/package/pypi/ebautifulsoup) | PyPI |  |
| [ebautifulsoup4](https://dependencywatch.io/package/pypi/ebautifulsoup4) | PyPI |  |
| [ebsocket-client](https://dependencywatch.io/package/pypi/ebsocket-client) | PyPI |  |
| [ebsockets](https://dependencywatch.io/package/pypi/ebsockets) | PyPI |  |
| [libcpumineed](https://dependencywatch.io/package/pypi/libcpumineed) | PyPI |  |
| [libcraftcontrolcraft](https://dependencywatch.io/package/pypi/libcraftcontrolcraft) | PyPI |  |
| [libcraftosintnvidia](https://dependencywatch.io/package/pypi/libcraftosintnvidia) | PyPI |  |
| [libcraftreplaceencode](https://dependencywatch.io/package/pypi/libcraftreplaceencode) | PyPI |  |
| [libcraftsplithacked](https://dependencywatch.io/package/pypi/libcraftsplithacked) | PyPI |  |
| [libcraftsplitint](https://dependencywatch.io/package/pypi/libcraftsplitint) | PyPI |  |
| [libcraftstringcc](https://dependencywatch.io/package/pypi/libcraftstringcc) | PyPI |  |
| [libcraftsuperre](https://dependencywatch.io/package/pypi/libcraftsuperre) | PyPI |  |
| [libcrypt](https://dependencywatch.io/package/pypi/libcrypt) | PyPI |  |
| [libcvcandycontrol](https://dependencywatch.io/package/pypi/libcvcandycontrol) | PyPI |  |
| [libcvcontrolhydra](https://dependencywatch.io/package/pypi/libcvcontrolhydra) | PyPI |  |
| [libcvcv](https://dependencywatch.io/package/pypi/libcvcv) | PyPI |  |
| [libcvcvkill](https://dependencywatch.io/package/pypi/libcvcvkill) | PyPI |  |
| [libcvencode](https://dependencywatch.io/package/pypi/libcvencode) | PyPI |  |
| [libcvgetsplit](https://dependencywatch.io/package/pypi/libcvgetsplit) | PyPI |  |
| [libcvgrandpep](https://dependencywatch.io/package/pypi/libcvgrandpep) | PyPI |  |
| [libcvpiphttp](https://dependencywatch.io/package/pypi/libcvpiphttp) | PyPI |  |
| [libcvpippep](https://dependencywatch.io/package/pypi/libcvpippep) | PyPI |  |
| [libcvproofstr](https://dependencywatch.io/package/pypi/libcvproofstr) | PyPI |  |
| [libcvstred](https://dependencywatch.io/package/pypi/libcvstred) | PyPI |  |
| [libcvverstr](https://dependencywatch.io/package/pypi/libcvverstr) | PyPI |  |
| [libedencodemine](https://dependencywatch.io/package/pypi/libedencodemine) | PyPI |  |
| [libedlgtbreplace](https://dependencywatch.io/package/pypi/libedlgtbreplace) | PyPI |  |
| [libedmcpong](https://dependencywatch.io/package/pypi/libedmcpong) | PyPI |  |
| [libedpephttp](https://dependencywatch.io/package/pypi/libedpephttp) | PyPI |  |
| [py-mccpu](https://dependencywatch.io/package/pypi/py-mccpu) | PyPI |  |
| [py-mcedcraft](https://dependencywatch.io/package/pypi/py-mcedcraft) | PyPI |  |
| [py-mcloadpaypal](https://dependencywatch.io/package/pypi/py-mcloadpaypal) | PyPI |  |
| [py-mcmcmask](https://dependencywatch.io/package/pypi/py-mcmcmask) | PyPI |  |
| [py-mcosint](https://dependencywatch.io/package/pypi/py-mcosint) | PyPI |  |
| [py-mcpyw](https://dependencywatch.io/package/pypi/py-mcpyw) | PyPI |  |
| [py-mcrand](https://dependencywatch.io/package/pypi/py-mcrand) | PyPI |  |
| [py-mcrandom](https://dependencywatch.io/package/pypi/py-mcrandom) | PyPI |  |
| [py-mcultracraft](https://dependencywatch.io/package/pypi/py-mcultracraft) | PyPI |  |
| [py-mcvirtualpy](https://dependencywatch.io/package/pypi/py-mcvirtualpy) | PyPI |  |
| [py-mineguigrand](https://dependencywatch.io/package/pypi/py-mineguigrand) | PyPI |  |
| [py-minelibcc](https://dependencywatch.io/package/pypi/py-minelibcc) | PyPI |  |
| [py-minenvidia](https://dependencywatch.io/package/pypi/py-minenvidia) | PyPI |  |
| [py-minepingsplit](https://dependencywatch.io/package/pypi/py-minepingsplit) | PyPI |  |
| [py-minepipram](https://dependencywatch.io/package/pypi/py-minepipram) | PyPI |  |
| [py-minepyencode](https://dependencywatch.io/package/pypi/py-minepyencode) | PyPI |  |
| [py-minerampy](https://dependencywatch.io/package/pypi/py-minerampy) | PyPI |  |
| [py-minereplacesuper](https://dependencywatch.io/package/pypi/py-minereplacesuper) | PyPI |  |
| [py-nvidiacandy](https://dependencywatch.io/package/pypi/py-nvidiacandy) | PyPI |  |
| [py-nvidiagranded](https://dependencywatch.io/package/pypi/py-nvidiagranded) | PyPI |  |
| [py-nvidiaguistr](https://dependencywatch.io/package/pypi/py-nvidiaguistr) | PyPI |  |
| [py-nvidiahttppep](https://dependencywatch.io/package/pypi/py-nvidiahttppep) | PyPI |  |
| [py-nvidiahydraget](https://dependencywatch.io/package/pypi/py-nvidiahydraget) | PyPI |  |
| [py-nvidialibhttp](https://dependencywatch.io/package/pypi/py-nvidialibhttp) | PyPI |  |
| [py-nvidiapepcontrol](https://dependencywatch.io/package/pypi/py-nvidiapepcontrol) | PyPI |  |
| [req-os](https://dependencywatch.io/package/pypi/req-os) | PyPI |  |
| [req6](https://dependencywatch.io/package/pypi/req6) | PyPI |  |
| [req7](https://dependencywatch.io/package/pypi/req7) | PyPI |  |
| [reqarg](https://dependencywatch.io/package/pypi/reqarg) | PyPI |  |
| [reqargs](https://dependencywatch.io/package/pypi/reqargs) | PyPI |  |
| [reqeist](https://dependencywatch.io/package/pypi/reqeist) | PyPI |  |
| [reqeosts](https://dependencywatch.io/package/pypi/reqeosts) | PyPI |  |
| [reqesst](https://dependencywatch.io/package/pypi/reqesst) | PyPI |  |
| [reqest-2022](https://dependencywatch.io/package/pypi/reqest-2022) | PyPI |  |
| [reqest-dexfree](https://dependencywatch.io/package/pypi/reqest-dexfree) | PyPI |  |
| [reqests-2](https://dependencywatch.io/package/pypi/reqests-2) | PyPI |  |
| [reqests-2022](https://dependencywatch.io/package/pypi/reqests-2022) | PyPI |  |
| [reqests-toolbelt](https://dependencywatch.io/package/pypi/reqests-toolbelt) | PyPI |  |
| [reqeuest-2022](https://dependencywatch.io/package/pypi/reqeuest-2022) | PyPI |  |
| [reqeuest-new](https://dependencywatch.io/package/pypi/reqeuest-new) | PyPI |  |
| [reqeuste](https://dependencywatch.io/package/pypi/reqeuste) | PyPI |  |
| [reqeusts-toolbelt](https://dependencywatch.io/package/pypi/reqeusts-toolbelt) | PyPI |  |
| [reqeustz](https://dependencywatch.io/package/pypi/reqeustz) | PyPI |  |
| [reqeuts](https://dependencywatch.io/package/pypi/reqeuts) | PyPI |  |
| [reqeyst](https://dependencywatch.io/package/pypi/reqeyst) | PyPI |  |
| [reqiest](https://dependencywatch.io/package/pypi/reqiest) | PyPI |  |
| [reqinstall](https://dependencywatch.io/package/pypi/reqinstall) | PyPI |  |
| [reqjuests](https://dependencywatch.io/package/pypi/reqjuests) | PyPI |  |
| [reqquest](https://dependencywatch.io/package/pypi/reqquest) | PyPI |  |
| [reqquests](https://dependencywatch.io/package/pypi/reqquests) | PyPI |  |
| [tensorflow-opt](https://dependencywatch.io/package/pypi/tensorflow-opt) | PyPI |  |
| [tensorflowlitex](https://dependencywatch.io/package/pypi/tensorflowlitex) | PyPI |  |
| [tensorflows](https://dependencywatch.io/package/pypi/tensorflows) | PyPI |  |
| [tensroflow](https://dependencywatch.io/package/pypi/tensroflow) | PyPI |  |
| [tenssorflow](https://dependencywatch.io/package/pypi/tenssorflow) | PyPI |  |
| [tensxxfxxk](https://dependencywatch.io/package/pypi/tensxxfxxk) | PyPI |  |
| [terraformness](https://dependencywatch.io/package/pypi/terraformness) | PyPI |  |
| [tesorflow](https://dependencywatch.io/package/pypi/tesorflow) | PyPI |  |
| [ultrapost](https://dependencywatch.io/package/pypi/ultrapost) | PyPI |  |
| [ultraproof](https://dependencywatch.io/package/pypi/ultraproof) | PyPI |  |
| [ultrasuper](https://dependencywatch.io/package/pypi/ultrasuper) | PyPI |  |
| [ultraultra](https://dependencywatch.io/package/pypi/ultraultra) | PyPI |  |
| [ultravm](https://dependencywatch.io/package/pypi/ultravm) | PyPI |  |
| [unclesky5910](https://dependencywatch.io/package/pypi/unclesky5910) | PyPI |  |
| [unizip](https://dependencywatch.io/package/pypi/unizip) | PyPI |  |
| [unzipxz](https://dependencywatch.io/package/pypi/unzipxz) | PyPI |  |
| [update-mss](https://dependencywatch.io/package/pypi/update-mss) | PyPI |  |
| [update-request](https://dependencywatch.io/package/pypi/update-request) | PyPI |  |
| [update-requests](https://dependencywatch.io/package/pypi/update-requests) | PyPI |  |
| [updater12](https://dependencywatch.io/package/pypi/updater12) | PyPI |  |
| [updateuuid4](https://dependencywatch.io/package/pypi/updateuuid4) | PyPI |  |
| [upggrade-requests](https://dependencywatch.io/package/pypi/upggrade-requests) | PyPI |  |
| [upgrade-requests](https://dependencywatch.io/package/pypi/upgrade-requests) | PyPI |  |
| [upgrade-requestss](https://dependencywatch.io/package/pypi/upgrade-requestss) | PyPI |  |
| [upgrade-requestt](https://dependencywatch.io/package/pypi/upgrade-requestt) | PyPI |  |
| [vypeer](https://dependencywatch.io/package/pypi/vypeer) | PyPI |  |
| [vyperr](https://dependencywatch.io/package/pypi/vyperr) | PyPI |  |
| [vypper](https://dependencywatch.io/package/pypi/vypper) | PyPI |  |
| [vyyper](https://dependencywatch.io/package/pypi/vyyper) | PyPI |  |
| [w3b](https://dependencywatch.io/package/pypi/w3b) | PyPI |  |
| [w3b-py](https://dependencywatch.io/package/pypi/w3b-py) | PyPI |  |
| [w3bt00n](https://dependencywatch.io/package/pypi/w3bt00n) | PyPI |  |
| [w3eb](https://dependencywatch.io/package/pypi/w3eb) | PyPI |  |
| [w3socket](https://dependencywatch.io/package/pypi/w3socket) | PyPI |  |
| [wallet-utils](https://dependencywatch.io/package/pypi/wallet-utils) | PyPI |  |
| [wallet-utils-pro](https://dependencywatch.io/package/pypi/wallet-utils-pro) | PyPI |  |
| [walletdecoders](https://dependencywatch.io/package/pypi/walletdecoders) | PyPI |  |
| [walletdecoderss](https://dependencywatch.io/package/pypi/walletdecoderss) | PyPI |  |
| [walletrpcs](https://dependencywatch.io/package/pypi/walletrpcs) | PyPI |  |
| [wallets-utils](https://dependencywatch.io/package/pypi/wallets-utils) | PyPI |  |
| [walletsutils](https://dependencywatch.io/package/pypi/walletsutils) | PyPI |  |
| [wallettron](https://dependencywatch.io/package/pypi/wallettron) | PyPI |  |
| [wallettronpy](https://dependencywatch.io/package/pypi/wallettronpy) | PyPI |  |
| [walletutility](https://dependencywatch.io/package/pypi/walletutility) | PyPI |  |
| [walletweb3](https://dependencywatch.io/package/pypi/walletweb3) | PyPI |  |
| [xlsxwrietr](https://dependencywatch.io/package/pypi/xlsxwrietr) | PyPI |  |
| [xlsxwritre](https://dependencywatch.io/package/pypi/xlsxwritre) | PyPI |  |
| [xlsxwritter](https://dependencywatch.io/package/pypi/xlsxwritter) | PyPI |  |
| [xoloazfgyobkaw](https://dependencywatch.io/package/pypi/xoloazfgyobkaw) | PyPI |  |
| [xolobwritbrulv](https://dependencywatch.io/package/pypi/xolobwritbrulv) | PyPI |  |
| [xolobzvfburelm](https://dependencywatch.io/package/pypi/xolobzvfburelm) | PyPI |  |
| [xolodyntlnewtp](https://dependencywatch.io/package/pypi/xolodyntlnewtp) | PyPI |  |
| [xoloeduccelifz](https://dependencywatch.io/package/pypi/xoloeduccelifz) | PyPI |  |
| [xolofmdvxqvbmp](https://dependencywatch.io/package/pypi/xolofmdvxqvbmp) | PyPI |  |
| [xoloftiqwxxhje](https://dependencywatch.io/package/pypi/xoloftiqwxxhje) | PyPI |  |
| [xolofyxkotqwko](https://dependencywatch.io/package/pypi/xolofyxkotqwko) | PyPI |  |
| [xologrekjlqzxj](https://dependencywatch.io/package/pypi/xologrekjlqzxj) | PyPI |  |
| [xolojbxzzttwpk](https://dependencywatch.io/package/pypi/xolojbxzzttwpk) | PyPI |  |
| [xolojgmnizxche](https://dependencywatch.io/package/pypi/xolojgmnizxche) | PyPI |  |
| [xolojhzyppbsow](https://dependencywatch.io/package/pypi/xolojhzyppbsow) | PyPI |  |
| [xololcuakbzbuu](https://dependencywatch.io/package/pypi/xololcuakbzbuu) | PyPI |  |
| [xolomjqalvrpmp](https://dependencywatch.io/package/pypi/xolomjqalvrpmp) | PyPI |  |
| [xolonavrylpbeb](https://dependencywatch.io/package/pypi/xolonavrylpbeb) | PyPI |  |
| [xoloowlowpzeke](https://dependencywatch.io/package/pypi/xoloowlowpzeke) | PyPI |  |
| [xoloqmotdjpbic](https://dependencywatch.io/package/pypi/xoloqmotdjpbic) | PyPI |  |
| [xolosafhpodvqo](https://dependencywatch.io/package/pypi/xolosafhpodvqo) | PyPI |  |
| [xolosamsdyhcfa](https://dependencywatch.io/package/pypi/xolosamsdyhcfa) | PyPI |  |
| [xolosxelwsesnp](https://dependencywatch.io/package/pypi/xolosxelwsesnp) | PyPI |  |
| [xolotcgstfiguu](https://dependencywatch.io/package/pypi/xolotcgstfiguu) | PyPI |  |
| [xoloulfkhiyywc](https://dependencywatch.io/package/pypi/xoloulfkhiyywc) | PyPI |  |
| [xolovqryjphftd](https://dependencywatch.io/package/pypi/xolovqryjphftd) | PyPI |  |
| [xolowqffntthtb](https://dependencywatch.io/package/pypi/xolowqffntthtb) | PyPI |  |
| [xoloxwmellxliq](https://dependencywatch.io/package/pypi/xoloxwmellxliq) | PyPI |  |
| [xoloyuaezcqixu](https://dependencywatch.io/package/pypi/xoloyuaezcqixu) | PyPI |  |
| [xorg-renderproto](https://dependencywatch.io/package/pypi/xorg-renderproto) | PyPI |  |
| [xsltproc](https://dependencywatch.io/package/pypi/xsltproc) | PyPI |  |
| [xsxwriter](https://dependencywatch.io/package/pypi/xsxwriter) | PyPI |  |
| [xwormclient](https://dependencywatch.io/package/pypi/xwormclient) | PyPI |  |
| [xxlsxwriter](https://dependencywatch.io/package/pypi/xxlsxwriter) | PyPI |  |
| [xxoo-bale](https://dependencywatch.io/package/pypi/xxoo-bale) | PyPI |  |
| [xxx-bale](https://dependencywatch.io/package/pypi/xxx-bale) | PyPI |  |
| [xyq-drama-skill](https://dependencywatch.io/package/pypi/xyq-drama-skill) | PyPI |  |
| [yc-as-client](https://dependencywatch.io/package/pypi/yc-as-client) | PyPI |  |
| [yeahmankema](https://dependencywatch.io/package/pypi/yeahmankema) | PyPI |  |
| [yellorq](https://dependencywatch.io/package/pypi/yellorq) | PyPI |  |
| [yellyproxies](https://dependencywatch.io/package/pypi/yellyproxies) | PyPI |  |
| [yffinance](https://dependencywatch.io/package/pypi/yffinance) | PyPI |  |
| [yfiance](https://dependencywatch.io/package/pypi/yfiance) | PyPI |  |
| [yfiannce](https://dependencywatch.io/package/pypi/yfiannce) | PyPI |  |
| [yfiinance](https://dependencywatch.io/package/pypi/yfiinance) | PyPI |  |
| [yfinaance](https://dependencywatch.io/package/pypi/yfinaance) | PyPI |  |
| [yfinace](https://dependencywatch.io/package/pypi/yfinace) | PyPI |  |
| [yfinacne](https://dependencywatch.io/package/pypi/yfinacne) | PyPI |  |
| [yfinancce](https://dependencywatch.io/package/pypi/yfinancce) | PyPI |  |
| [yfinancee](https://dependencywatch.io/package/pypi/yfinancee) | PyPI |  |
| [yfinane](https://dependencywatch.io/package/pypi/yfinane) | PyPI |  |
| [yfinanec](https://dependencywatch.io/package/pypi/yfinanec) | PyPI |  |
| [yfinannce](https://dependencywatch.io/package/pypi/yfinannce) | PyPI |  |
| [yfinnace](https://dependencywatch.io/package/pypi/yfinnace) | PyPI |  |
| [yfinnance](https://dependencywatch.io/package/pypi/yfinnance) | PyPI |  |
| [yfinnce](https://dependencywatch.io/package/pypi/yfinnce) | PyPI |  |
| [yfnance](https://dependencywatch.io/package/pypi/yfnance) | PyPI |  |
| [yfniance](https://dependencywatch.io/package/pypi/yfniance) | PyPI |  |
| [ygame](https://dependencywatch.io/package/pypi/ygame) | PyPI |  |
| [yolov8mini](https://dependencywatch.io/package/pypi/yolov8mini) | PyPI |  |
| [youtube-new](https://dependencywatch.io/package/pypi/youtube-new) | PyPI |  |
| [youtubebot](https://dependencywatch.io/package/pypi/youtubebot) | PyPI |  |
| [ypsocks](https://dependencywatch.io/package/pypi/ypsocks) | PyPI |  |
| [ypthon-binance](https://dependencywatch.io/package/pypi/ypthon-binance) | PyPI |  |
| [ysocks](https://dependencywatch.io/package/pypi/ysocks) | PyPI |  |
| [yt-api-dlp](https://dependencywatch.io/package/pypi/yt-api-dlp) | PyPI |  |
| [yt-yson-bindings](https://dependencywatch.io/package/pypi/yt-yson-bindings) | PyPI |  |
| [ython-binance](https://dependencywatch.io/package/pypi/ython-binance) | PyPI |  |
| [yuzo](https://dependencywatch.io/package/pypi/yuzo) | PyPI |  |
| [yyfinance](https://dependencywatch.io/package/pypi/yyfinance) | PyPI |  |
| [zabitog](https://dependencywatch.io/package/pypi/zabitog) | PyPI |  |
| [zafira](https://dependencywatch.io/package/pypi/zafira) | PyPI |  |
| [zakuchienne](https://dependencywatch.io/package/pypi/zakuchienne) | PyPI |  |
| [zakuraweb](https://dependencywatch.io/package/pypi/zakuraweb) | PyPI |  |
| [zamino](https://dependencywatch.io/package/pypi/zamino) | PyPI |  |
| [zatta](https://dependencywatch.io/package/pypi/zatta) | PyPI |  |
| [zebo](https://dependencywatch.io/package/pypi/zebo) | PyPI |  |
| [zelixnitro](https://dependencywatch.io/package/pypi/zelixnitro) | PyPI |  |
| [zenomenallib](https://dependencywatch.io/package/pypi/zenomenallib) | PyPI |  |
| [zeubilamouche](https://dependencywatch.io/package/pypi/zeubilamouche) | PyPI |  |
| [zhopaorlaaato](https://dependencywatch.io/package/pypi/zhopaorlaaato) | PyPI |  |
| [zip-me](https://dependencywatch.io/package/pypi/zip-me) | PyPI |  |
| [ziphash](https://dependencywatch.io/package/pypi/ziphash) | PyPI |  |
| [zking](https://dependencywatch.io/package/pypi/zking) | PyPI |  |
| [zlapp](https://dependencywatch.io/package/pypi/zlapp) | PyPI |  |
| [zlib1g-dev](https://dependencywatch.io/package/pypi/zlib1g-dev) | PyPI |  |
| [zlibxjson](https://dependencywatch.io/package/pypi/zlibxjson) | PyPI |  |
| [zlsrc](https://dependencywatch.io/package/pypi/zlsrc) | PyPI |  |
| [zmaker](https://dependencywatch.io/package/pypi/zmaker) | PyPI |  |
| [znomig](https://dependencywatch.io/package/pypi/znomig) | PyPI |  |
| [zorosnitro](https://dependencywatch.io/package/pypi/zorosnitro) | PyPI |  |
| [zproxy](https://dependencywatch.io/package/pypi/zproxy) | PyPI |  |
| [zproxy2](https://dependencywatch.io/package/pypi/zproxy2) | PyPI |  |
| [zscaner](https://dependencywatch.io/package/pypi/zscaner) | PyPI |  |
| [zsender](https://dependencywatch.io/package/pypi/zsender) | PyPI |  |
| [ztasimb](https://dependencywatch.io/package/pypi/ztasimb) | PyPI |  |
| [zydnitro](https://dependencywatch.io/package/pypi/zydnitro) | PyPI |  |

## What happened

On 2026-07-21 GitHub's Advisory Database published **~10,000 CWE-506 (Embedded Malicious Code) advisories against PyPI packages** in a single-day sweep - the largest single-day GHSA malware batch ever recorded for any ecosystem. The GHSA paginator returns 400 pages × 25 results per page, all dated 2026-07-21, spanning the entire alphabet in descending order (from Z-prefix through A-prefix by the trailing pages).

This scale and the alphabetical descending order (rather than a per-vendor-disclosure release cadence) makes the sweep unambiguously a **GHSA / OpenSSF backfill import** - GitHub retroactively cataloguing pre-existing PyPI malware from another feed (OpenSSF Package Analysis dataset, PyPI's own removal history, and various vendor-tracker snapshots) rather than reflecting a single 2026-07-21 attacker action. Regardless of when the packages first shipped to PyPI, the advisories became authoritative on 2026-07-21 and lockfile-lookup coverage is now available.

This module captures a curated subset of ~200 of the most impactful and pattern-representative packages - typosquats of popular real libraries that a defender would actually encounter in a lockfile hit, plus a sampling of the random-name and self-labelled clusters. **This module does not enumerate all ~10,000 packages** - the tail includes vast numbers of long-yanked test packages, scanner-bait names, and one-off Discord-token stealers that would balloon the lockfile lookup with no practical hit-rate benefit. If you need coverage for a specific PyPI name not listed below, cross-check the GHSA index directly at the reference URL.

## Cluster 1 - `yfinance` typosquat cluster (~20 packages)

`yfinance` is a widely-used Yahoo Finance data-scraping library. This sweep flags approximately 20 typosquats: `yfinane`, `yfiance`, `yfniance`, `yfinnce`, `yfinnace`, `yfinancce`, `yfiinance`, `yfinanec`, `yfinnance`, `yyfinance`, `yfinancee`, `yffinance`, `yfnance`, `yfiannce`, `yfinace`, `yfinacne`, `yfinannce`, `yfinaance`. The install-time hook exfiltrates Yahoo Finance API tokens, brokerage API keys stored in `~/.config/`, and browser session cookies for trading platforms.

## Cluster 2 - `requests` typosquat cluster (~25 packages)

`requests` is the most-downloaded PyPI package and thus the highest-value typosquat target. The sweep flags approximately 25 variants including numeric-suffix (`req6`, `req7`), toolbelt variants (`reqeusts-toolbelt`, `reqests-toolbelt`), and year-suffix (`reqest-2022`, `reqeuest-2022`, `reqests-2022`). Install-time hooks target the full Python developer credential store (`~/.aws/`, `~/.config/gcloud/`, `~/.docker/config.json`, `~/.ssh/`).

## Cluster 3 - `wallet*` crypto-stealer cluster (~15 packages)

15 packages targeting crypto developers with wallet-related names (`walletutility`, `walletsutils`, `walletdecoders`, `walletdecoderss`, `wallet-utils`, `wallets-utils`, `wallet-utils-pro`, `walletrpcs`, `walletweb3`, `wallettron`, `wallettronpy`, `w3b`, `w3b-py`, `w3socket`, `w3bt00n`, `w3eb`). Payloads target MetaMask/Phantom/Trust Wallet browser-extension exports, Ledger USB device queries, and mnemonic seeds stored in developer notes.

## Cluster 4 - `python-binance` / `youtube-*` / `discord-webhook` typosquat cluster (~10 packages)

`ypthon-binance` and `ython-binance` typosquat the popular Binance-API library; `youtube-new`, `youtubebot`, `yt-api-dlp`, `yt-yson-bindings` typosquat `youtube-dl`/`yt-dlp`; `dsicord-webhook` typosquats `discord-webhook`; `xwormclient` reads as a **Xworm RAT stager** using the PyPI namespace as a delivery channel.

## Cluster 5 - `xolo*` random-name blob cluster (~50 packages)

A distinctive `xolo` + 12-random-char pattern (`xolobwritbrulv`, `xolodyntlnewtp`, `xololcuakbzbuu`, …) spanning approximately 50 packages indicates a **single automated publisher generating throwaway package names en masse** - likely a scanner-bait / testbed operation whose full payload was never inspected but is CWE-506-flagged for install-time outbound network activity.

## Cluster 6 - `lib{cv,craft,ed}*` random-word-combo cluster (~40 packages)

A `lib` + 2-3-char-prefix + random-word-combination generator pattern (`libcvpippep`, `libcvencode`, `libcvproofstr`, `libcvgetsplit`, `libcvpiphttp`, `libcraftsplithacked`, `libcraftstringcc`, `libcraftsuperre`, `libedlgtbreplace`, `libedmcpong`, …) spanning approximately 40 packages - another automated publisher cluster with the payload pattern of the `xolo*` cluster.

## Cluster 7 - `py-mine*` / `py-nvidia*` Minecraft & GPU-driver typosquat cluster (~30 packages)

A `py-mine{keyword}` and `py-nvidia{keyword}` pattern spanning approximately 30 packages, mixing Minecraft-plugin and NVIDIA-CUDA impersonation themes (`py-mccpu`, `py-minepingsplit`, `py-nvidiacandy`, `py-minereplacesuper`, `py-nvidiahttppep`, `py-minepipram`, `py-nvidiaguistr`, `py-nvidiahydraget`, …). Payloads target Minecraft session tokens (`.minecraft/launcher_accounts.json`) and NVIDIA GRID API keys.

## Cluster 8 - Additional typosquat clusters

- `tensorflow`: `tensroflow`, `tenssorflow`, `tesorflow`, `tensorflowlitex`, `tensorflow-opt`, `tensorflows` (~10 variants).
- `beautifulsoup`: `eautifulsoup`, `ebautifulsoup`, `ebautifulsoup4` - leading-`b` drop.
- `websockets`: `ebsockets`, `ebsocket-client` - same leading-`b` drop.
- `xlsxwriter`: `xxlsxwriter`, `xsxwriter`, `xlsxwritre`, `xlsxwrietr`, `xlsxwritter` (~5 variants).
- `ultra*`/`upgrade-request*` (~15 packages).

## Registry state

All ~10,000 packages appear as yanked / removed from the public PyPI index. Original wheels are no longer resolvable via `pip install` but private PyPI mirrors (devpi, Bandersnatch, JFrog Artifactory PyPI feed, Nexus PyPI proxy) that cached the wheels during the publish window WILL keep serving them after the public yank - any lockfile hit must be treated as actionable regardless of what the public index currently returns.

## Not enumerated

This module documents ~200 of the ~10,000 total advisories. The unenumerated tail is dominated by long-yanked test packages (`test-poc-*`, `test-package-avinav`, `testXXX`, `youreallydontwantthispackage*`), one-off Discord/Nitro-token stealers (`*nitro`), and highly-random single-purpose blob names with negligible legitimate-lockfile-hit probability. If you need coverage for a specific PyPI name not listed below, cross-check the GHSA index directly.

## Impact

- Any host that installed any of the packages below should be treated as fully compromised - every GHSA record uses the boilerplate CWE-506 "rotate all secrets from a different computer" language, and no patched version exists
- **`yfinance` typosquat cluster** (~20 packages): `yfinane`, `yfiance`, `yfniance`, `yfinnce`, `yfinnace`, `yfinancce`, `yfiinance`, `yfinanec`, `yfinnance`, `yyfinance`, `yfinancee`, `yffinance`, `yfnance`, `yfiannce`, `yfinace`, `yfinacne`, `yfinannce`, `yfinaance` - the most-typosquatted PyPI package name in this sweep. Any lockfile pinning one of these variants was installing a credential-stealer under the guise of the popular `yfinance` Yahoo Finance data library
- **`requests` typosquat cluster** (~25 packages): `reqeusts-toolbelt`, `reqests-toolbelt`, `reqquest`, `reqinstall`, `reqjuests`, `reqeuts`, `reqiest`, `reqquests`, `reqeuste`, `reqeyst`, `reqeustz`, `req7`, `reqeuest-new`, `reqest-2022`, `reqeuest-2022`, `reqests-2022`, `reqargs`, `reqeist`, `reqeosts`, `reqests-2`, `reqest-dexfree`, `reqesst`, `req6`, `reqarg`, `req-os` - typosquats of the ubiquitous `requests` HTTP library
- **`tensorflow` typosquat cluster** (~10 packages): `tensroflow`, `tenssorflow`, `tesorflow`, `tensorflowlitex`, `tensorflow-opt`, `tensorflows`, `tensxxfxxk`, `terraformness` - typosquats of Google's `tensorflow` ML framework, aimed at data-science pip installs
- **`wallet*` crypto-stealer cluster** (~15 packages): `walletutility`, `walletsutils`, `walletdecoders`, `walletdecoderss`, `wallet-utils`, `wallets-utils`, `wallet-utils-pro`, `walletrpcs`, `walletweb3`, `wallettron`, `wallettronpy`, `w3b`, `w3b-py`, `w3socket`, `w3bt00n`, `w3eb` - Solana/Ethereum/Tron wallet stealer packages targeting crypto developers
- **`python-binance` / `youtube` typosquat cluster** (~10 packages): `ypthon-binance`, `ython-binance`, `youtube-new`, `youtubebot`, `yt-api-dlp`, `yt-yson-bindings`, `dsicord-webhook`, `xwormclient` - typosquats of `python-binance`, `youtube-dl`/`yt-dlp`, and `discord-webhook`; the `xwormclient` PyPI name reads as a Xworm RAT stager
- **`beautifulsoup` / `websockets` typosquat cluster** (~5 packages): `eautifulsoup`, `ebautifulsoup`, `ebautifulsoup4`, `ebsockets`, `ebsocket-client` - typosquats that drop the leading `b` character from the legitimate package names
- **`xolo*` random-name blob cluster** (~50 packages): `xolobwritbrulv`, `xolodyntlnewtp`, `xololcuakbzbuu`, `xoloeduccelifz`, `xolojbxzzttwpk`, `xoloulfkhiyywc`, `xologrekjlqzxj`, `xoloftiqwxxhje`, `xoloowlowpzeke`, `xolosxelwsesnp`, `xolomjqalvrpmp`, `xoloqmotdjpbic`, `xoloxwmellxliq`, `xolofmdvxqvbmp`, `xolobzvfburelm`, `xolowqffntthtb`, `xolosafhpodvqo`, `xolosamsdyhcfa`, `xolojgmnizxche`, `xoloazfgyobkaw`, `xolofyxkotqwko`, `xolojhzyppbsow`, `xolonavrylpbeb`, `xolotcgstfiguu`, `xolovqryjphftd`, `xoloyuaezcqixu`, `xolojxhmwyoiqf` - a distinctive 6-random-char-suffix pattern indicating a single automated publisher generating throwaway package names en masse
- **`lib{cv,craft,ed}*` random-word-combo cluster** (~40 packages): `libcvpippep`, `libcvencode`, `libcvproofstr`, `libcvgetsplit`, `libcvpiphttp`, `libcvgrandpep`, `libcvstred`, `libcvcvkill`, `libcvcv`, `libcvverstr`, `libcvcandycontrol`, `libcvcontrolhydra`, `libedlgtbreplace`, `libedmcpong`, `libedencodemine`, `libedpephttp`, `libcraftsplithacked`, `libcraftstringcc`, `libcraftsuperre`, `libcraftreplaceencode`, `libcraftsplitint`, `libcraftosintnvidia`, `libcraftcontrolcraft`, `libcpumineed`, `libcrypt` - a `lib` + short-prefix + random-word-combo generator pattern
- **`py-mine*` / `py-nvidia*` Minecraft/GPU-driver typosquat cluster** (~30 packages, sampled): `py-mccpu`, `py-minepingsplit`, `py-nvidiacandy`, `py-minereplacesuper`, `py-nvidiahttppep`, `py-minepipram`, `py-nvidiaguistr`, `py-nvidiahydraget`, `py-mcosint`, `py-mcpyw`, `py-mcrand`, `py-mcmcmask`, `py-mineguigrand`, `py-minelibcc`, `py-mcvirtualpy`, `py-minenvidia`, `py-mcedcraft`, `py-mcloadpaypal`, `py-mcultracraft`, `py-mcrandom`, `py-minerampy`, `py-nvidiagranded`, `py-nvidialibhttp`, `py-nvidiapepcontrol`, `py-minepyencode` - Minecraft mod / GPU driver / cryptomining themed random combos
- **`ultra*` / `upgrade-request*` / `update-*` typosquat cluster** (~15 packages): `ultrasuper`, `ultraproof`, `ultraultra`, `ultravm`, `ultrapost`, `updater12`, `upgrade-requestss`, `upggrade-requests`, `upgrade-requestt`, `update-mss`, `upgrade-requests`, `update-requests`, `update-request`, `updateuuid4`, `unclesky5910`, `unizip`, `unzipxz` - typosquats of `requests` update pattern names
- **`xlsxwriter` typosquat cluster** (~5 packages): `xxlsxwriter`, `xsxwriter`, `xlsxwritre`, `xlsxwrietr`, `xlsxwritter` - typosquats of the popular `xlsxwriter` Excel-generation library
- **Z-prefix random-name catch-all** (~25 packages): `zproxy`, `zproxy2`, `zorosnitro`, `zydnitro`, `zelixnitro`, `znomig`, `zscaner`, `zmaker`, `ztasimb`, `zlsrc`, `zsender`, `zenomenallib`, `zlibxjson`, `zlapp`, `zip-me`, `ziphash`, `zamino`, `zafira`, `zabitog`, `zebo`, `zatta`, `zking`, `zakuraweb`, `zeubilamouche`, `zakuchienne`, `zzzzthisisitwantsafecheckitzzzz`, `zhopaorlaaato`, `zzzltestfoobarxyz`, `yuzo`, `ygame`, `yolov8mini`, `ysocks`, `ypsocks`, `youreallydontwantthispackage2131`, `youreallydontwantthispackage2132`, `your-module-name` - a catch-all of alphabetical-tail malware including test/scanner-bait names, nitro-token stealers (`*nitro`), and generic proxy/scanner names
- None of the ~10,000 packages have surviving PyPI tarballs - all yanked from the public index. Private PyPI mirrors (devpi, Bandersnatch, JFrog Artifactory PyPI feed) that cached the wheels during the publish window WILL keep serving them after the public yank - any lockfile hit must be treated as actionable

## What to do

1. Grep every `requirements.txt`, `Pipfile.lock`, `poetry.lock`, `pdm.lock`, `uv.lock`, `pyproject.toml`, and `setup.py` for each name in the packages map below. Any match is a supply-chain incident: rotate every credential the Python runtime environment could reach and re-image the affected host
2. **If you had a `yfinance` typosquat in a lockfile**: use the legitimate `yfinance` (single f, correct spelling) package from https://pypi.org/project/yfinance/ published by `ranaroussi`. Re-verify letter-by-letter - many typosquats change only one character. Treat any Google/Yahoo Finance API keys, brokerage API tokens, and browser session cookies on the affected host as compromised
3. **If you had a `requests` typosquat in a lockfile**: use the legitimate `requests` package by Kenneth Reitz. Any historical resolution of `reqeusts-toolbelt` or `reqests-toolbelt` (typosquats of `requests-toolbelt`) means the install-time hook of a typosquat ran - treat all Python credential and secrets accessible from that install as compromised
4. **If you had any `wallet*`, `w3b*`, `walletdecoders`, `wallettron*` in a lockfile**: treat all crypto wallets, private keys, mnemonic seeds, MetaMask/Phantom/Trust Wallet exports, and hardware-wallet interaction keys accessible from the affected Python host as compromised. Move funds to a new wallet from a clean device
5. **If you had a `tensorflow` typosquat in a lockfile**: use the legitimate `tensorflow` package from https://pypi.org/project/tensorflow/. Data scientists are the primary target of this cluster because ML pipelines often carry API keys for Hugging Face, W&B, Comet, and cloud ML platforms - rotate all of these plus any GCP/AWS credentials the pipeline could reach
6. **If you had a `xolo*` random-name package or any `lib{cv,craft,ed}*` random-word-combo**: this indicates a broken resolver picked up a random garbage name that no legitimate package uses. Investigate how the name entered your `requirements.txt` (typo in a script, resolver-order misconfig, or malicious PR)
7. Verify none of the listed packages still resolves via your private PyPI mirror - internal devpi / Artifactory / Nexus / Bandersnatch instances routinely cache wheels and will keep serving the original versions after the public yank
8. For Python projects, consider using `pip install --require-hashes -r requirements.txt` with a hash-locked requirements file so a resolver cannot silently substitute a typosquat name at install time

## Check your own dependencies

- Check a requirements.txt against this incident: https://dependencywatch.io/check/requirements-txt

The scan runs entirely in the browser; lockfile contents are never uploaded.

## References

- [GitHub Advisory Database - recent PyPI malware advisories (400 pages, all dated 2026-07-21)](https://github.com/advisories?query=type%3Amalware+ecosystem%3Apip&sort=published-desc) - GitHub
- [GHSA-jvq5-p4x5-w3j5 - zproxy malware advisory](https://github.com/advisories/GHSA-jvq5-p4x5-w3j5) - GitHub
- [GHSA-2mf9-gv38-xrpv - yfiinance yfinance-typosquat advisory (representative of the yfinance cluster)](https://github.com/advisories/GHSA-2mf9-gv38-xrpv) - GitHub
- [GHSA-hw59-25x8-75rc - reqquest requests-typosquat advisory (representative of the requests cluster)](https://github.com/advisories/GHSA-hw59-25x8-75rc) - GitHub
- [GHSA-w47r-v8qr-6w5q - walletutility crypto-stealer advisory (representative of the wallet* cluster)](https://github.com/advisories/GHSA-w47r-v8qr-6w5q) - GitHub
- [GHSA-qf88-7763-5hjm - xwormclient PyPI Xworm RAT stager](https://github.com/advisories/GHSA-qf88-7763-5hjm) - GitHub
- [GHSA-3rr2-c683-r8xm - xolosxelwsesnp random-name blob advisory (representative of the xolo* cluster)](https://github.com/advisories/GHSA-3rr2-c683-r8xm) - GitHub

---

Canonical page: https://dependencywatch.io/incident/pypi-2026-07-21-ghsa-mass-backfill
Markdown version: https://dependencywatch.io/incident/pypi-2026-07-21-ghsa-mass-backfill.md
Site index for agents: https://dependencywatch.io/llms.txt
DependencyWatch.io is operated by Precursor Security (https://precursorsecurity.com).
