Every week, our malware detection systems scan thousands of new and updated packages across public registries like npm and PyPI. This week was no exception. We confirmed 165 malicious packages between July 17 and July 24, 2026, across npm and PyPI, led by one high-velocity campaign and several new impersonation clusters.
Suurin yksittäinen tapahtuma oli bingo-ai on PyPI, again: nearly 85 versions confirmed in a 23-minute window on July 21, the same automated publishing pattern we flagged in this package last week.
We also confirmed further activity from gcli-control on PyPI, a package our research team profiled in detail this week: a fully-featured Windows RAT (keylogging, webcam/mic capture, clipboard monitoring, browser-credential theft, persistence) that routes its command-and-control through npoint.io, a free JSON-hosting service, rather than an attacker-owned domain. The initial burst (versions 0.1.0 to 0.7.1) escalated to full capability in about 13.5 hours on July 21–22. This week’s digest shows the campaign didn’t stop there: five more versions (0.8.0 through 0.12.0) followed at a steadier pace through July 23–24.
We also confirmed a nine-package Twilio impersonation cluster on npm (twilio-serverless, twilio-functions, twilio-internal, and others), all published July 21 with inflated version numbers, a classic dependency-confusion pattern. A second cluster targeted crypto/DeFi tooling on npm, nine packages including uniswap-sdk-v4, wagmi-reactja ethers-secure, published July 23.
Smaller but notable: a repeating “date formatting utility” naming theme across three separate campaigns, and n8n-nodes-pwn, a suspiciously named automation-node package confirmed July 22.
Tämä viikoittainen tilannekuva on osa jatkuvaa Haittakoodin tiivistelmä, jossa validoimme uusia uhkia ja tarjoamme toimintakelpoista tietoa auttaaksemme DevSecOps-tiimejä suojaamaan omia pipelineennen kuin vahinko tapahtuu. Puretaanpa, mitä havaitsimme tällä viikolla ja miksi se on tärkeää.
| ekosysteemi | Paketti | Vahvistettu |
|---|---|---|
| NPM | javas-crypto:2.0.4 | Heinäkuu 17, 2026 |
| NPM | shadxino:2.0.8 | Heinäkuu 17, 2026 |
| NPM | clover-codelab-remote-pay-cloud:99.9.9 | Heinäkuu 17, 2026 |
| NPM | hehehee:2.0.4 | Heinäkuu 17, 2026 |
| NPM | shadxino:2.0.9 | Heinäkuu 18, 2026 |
| NPM | relativity-pdfjs-dist:5.8.2 | Heinäkuu 20, 2026 |
| NPM | triage_bot_using_sdkv3:2.0.1 | Heinäkuu 19, 2026 |
| NPM | aftermath-finance:99.0.0 | Heinäkuu 19, 2026 |
| NPM | aftermath-sui:99.0.0 | Heinäkuu 19, 2026 |
| NPM | aftermathfi:99.0.0 | Heinäkuu 19, 2026 |
| NPM | @yuva2210/okx-poc-preinstall:1.0.1 | Heinäkuu 22, 2026 |
| NPM | @yuva2210/okx-poc-rce-impact:2.0.0 | Heinäkuu 22, 2026 |
| NPM | @yuva2210/okx-poc-rce-impact:1.0.0 | Heinäkuu 22, 2026 |
| NPM | twilio-serverless:99.99.99 | Heinäkuu 21, 2026 |
| NPM | twilio-functions:99.99.99 | Heinäkuu 21, 2026 |
| NPM | twilio-assets:99.99.99 | Heinäkuu 21, 2026 |
| NPM | twilio-internal:99.99.99 | Heinäkuu 21, 2026 |
| NPM | twilio-deploy:99.99.99 | Heinäkuu 21, 2026 |
| NPM | twiliointernal-messaging-toolbox:99.99.99 | Heinäkuu 21, 2026 |
| NPM | twilio-platform-async-data-fetch:99.99.99 | Heinäkuu 21, 2026 |
| NPM | org-twilio-phone-numbers-utils:99.99.99 | Heinäkuu 21, 2026 |
| NPM | twilio-platform-request:99.99.99 | Heinäkuu 21, 2026 |
| NPM | org-twilio-phone-numbers-utils:99.99.100 | Heinäkuu 21, 2026 |
| NPM | twilio-platform-async-data-fetch:99.99.100 | Heinäkuu 21, 2026 |
| NPM | twilio-platform-request:99.99.100 | Heinäkuu 21, 2026 |
| NPM | twiliointernal-messaging-toolbox:99.99.100 | Heinäkuu 21, 2026 |
| NPM | supplyhub:1.0.1 | Heinäkuu 21, 2026 |
| NPM | supplyhub:1.0.2 | Heinäkuu 21, 2026 |
| NPM | @offa/offa-uwk:999.0.0 | Heinäkuu 21, 2026 |
| NPM | @offa/offa-uwk:999.0.1 | Heinäkuu 21, 2026 |
| NPM | date-format-utils-xz:1.0.1 | Heinäkuu 21, 2026 |
| NPM | date-format-utils-xz:1.0.2 | Heinäkuu 21, 2026 |
| NPM | date-format-utils-xz:1.0.4 | Heinäkuu 21, 2026 |
| NPM | @bpa-internal/bpa-utils:99.99.99 | Heinäkuu 22, 2026 |
| NPM | signzy-field-level-encrypter:12.9.12 | Heinäkuu 22, 2026 |
| pypi | bingo-ai:6.2.241 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.239 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.238 | Heinäkuu 21, 2026 |
| NPM | signzy-field-level-encrypter:12.9.13 | Heinäkuu 22, 2026 |
| pypi | bingo-ai:6.2.236 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.235 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.234 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.233 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.232 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.231 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.230 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.229 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.228 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.227 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.226 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.225 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.224 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.223 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.222 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.221 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.218 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.217 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.216 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.215 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.214 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.213 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.212 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.211 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.210 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.206 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.205 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.204 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.203 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.202 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.201 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.200 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.198 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.197 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.196 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.195 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.194 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.193 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.192 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.191 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.190 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.189 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.188 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.187 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.186 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.185 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.184 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.183 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.179 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.177 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.174 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.173 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.172 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.169 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.168 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.167 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.165 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.244 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.163 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.162 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.160 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.159 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.158 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.157 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.156 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.155 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.154 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.153 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.152 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.151 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.150 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.149 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.147 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.146 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.145 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.144 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.143 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.142 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.141 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.138 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.137 | Heinäkuu 21, 2026 |
| pypi | bingo-ai:6.2.136 | Heinäkuu 21, 2026 |
| NPM | @knofler/ai-management:0.3.0 | Heinäkuu 22, 2026 |
| pypi | gcli-control:0.1.0 | Heinäkuu 22, 2026 |
| NPM | faust-cont:1.0.0 | Heinäkuu 22, 2026 |
| pypi | gcli-control:0.5.0 | Heinäkuu 22, 2026 |
| pypi | gcli-control:0.2.0 | Heinäkuu 22, 2026 |
| pypi | gcli-control:0.6.0 | Heinäkuu 22, 2026 |
| pypi | gcli-control:0.7.0 | Heinäkuu 22, 2026 |
| NPM | n8n-nodes-pwn:1.0.1 | Heinäkuu 22, 2026 |
| NPM | n8n-nodes-pwn:1.0.2 | Heinäkuu 22, 2026 |
| pypi | gcli-control:0.7.1 | Heinäkuu 22, 2026 |
| pypi | make-helper:0.1.0 | Heinäkuu 22, 2026 |
| pypi | gcli-control:0.8.0 | Heinäkuu 23, 2026 |
| NPM | knowledge-grader:1.0.1 | Heinäkuu 23, 2026 |
| NPM | forge-extended:1.0.1 | Heinäkuu 23, 2026 |
| NPM | tidal-embed-player:1.0.1 | Heinäkuu 23, 2026 |
| NPM | content-publisher-sdks:1.0.1 | Heinäkuu 23, 2026 |
| NPM | fastly-vcl-language-client:1.0.0 | Heinäkuu 23, 2026 |
| NPM | tool-registry-scripts:1.0.0 | Heinäkuu 23, 2026 |
| NPM | uniswap-sdk-v4:1.0.0 | Heinäkuu 23, 2026 |
| NPM | ccxt-trading:1.0.0 | Heinäkuu 23, 2026 |
| NPM | wagmi-react:1.0.0 | Heinäkuu 23, 2026 |
| NPM | ethers-secure:1.0.0 | Heinäkuu 23, 2026 |
| NPM | viem-toolkit:1.0.0 | Heinäkuu 23, 2026 |
| NPM | rpc-endpoint-rotator:1.0.0 | Heinäkuu 23, 2026 |
| NPM | hardhat-gas-tracker:1.0.0 | Heinäkuu 23, 2026 |
| NPM | eth-crypto-utils:1.0.0 | Heinäkuu 23, 2026 |
| NPM | token-list-fetcher:1.0.0 | Heinäkuu 23, 2026 |
| NPM | hardhat-gas-tracker:1.0.1 | Heinäkuu 23, 2026 |
| NPM | token-list-fetcher:1.0.1 | Heinäkuu 23, 2026 |
| NPM | eth-crypto-utils:1.0.1 | Heinäkuu 23, 2026 |
| NPM | rpc-endpoint-rotator:1.0.1 | Heinäkuu 23, 2026 |
| pypi | gcli-control:0.9.0 | Heinäkuu 23, 2026 |
| pypi | gcli-control:0.10.0 | Heinäkuu 23, 2026 |
| NPM | soundflow-premium: 1.0.0 | Heinäkuu 24, 2026 |
| pypi | gcli-control:0.11.0 | Heinäkuu 24, 2026 |
| pypi | gcli-control:0.11.1 | Heinäkuu 24, 2026 |
| NPM | tracker-radar-detector:1.0.1 | Heinäkuu 24, 2026 |
| pypi | gcli-control:0.11.2 | Heinäkuu 24, 2026 |
| pypi | gcli-control:0.12.0 | Heinäkuu 24, 2026 |
| NPM | datefmt-pro:1.0.1 | Heinäkuu 24, 2026 |
| NPM | datefmt-pro:1.0.0 | Heinäkuu 24, 2026 |
| NPM | datefmt-pro:1.0.2 | Heinäkuu 24, 2026 |
| NPM | @daylightqc/date-fmt-lite:1.0.0 | Heinäkuu 24, 2026 |
| NPM | @daylightqc/date-fmt-lite:1.1.1 | Heinäkuu 24, 2026 |
Yli 165 pakettia. Yksi viikko. Vaaka vain nousee.
Tämän viikon kooste heijastelee samaa kehityskaarta: hyökkääjät julkaisevat nopeammin kuin rekisterit poistavat ja nopeammin kuin viikoittainen tarkistus pystyy havaitsemaan. Yksi PyPI-paketti, bingo-ai, went from first version to nearly 85 confirmed versions in about 23 minutes, automated publishing at a speed no manual review process can match. Meanwhile, gcli-control shows that volume isn’t the only risk: a fully-featured RAT that didn’t bother hiding what it was, instead relaying its commands through npoint.io, a free JSON-hosting service, so its traffic blends into ordinary developer activity with no attacker-owned domain to block. And the Twilio and crypto/DeFi impersonation clusters show a third pattern entirely: coordinated, multi-package drops using inflated version numbers to win a dependency-confusion race against internal package names.
Xygenin varhainen haittaohjelmavaroitus monitors npm, PyPI, and other registries in real time, flagging threats at the moment of publication, before they reach a build, before an AI agent installs them autonomously, and before a covert relay or a dependency-confusion package has a chance to execute. When bingo-ai ships dozens of versions in under half an hour, or gcli-control routes its C2 through a service your egress rules already allow, detection that runs after the fact is already too late.
Xygenin Open Source Security alusta tarjoaa DevSecOps-tiimeille reaaliaikaisen havaitsemisen ja priorisoinnin, joita tarvitaan koordinoidun toimitusketjun paineen edellä pysymiseen, jotta sinun pipelinepysyä puhtaana hidastamatta tiimejäsi.






