Aanvallers hebben vijf versies van vier veelgebruikte AsyncAPI-pakketten op npm besmet met een inloggegevens-stelende trojan, meldt BleepingComputer. Onder de getroffen pakketten zit @asyncapi/specs, met ruim 2 miljoen wekelijkse downloads, dat het overgrote deel van het bereik voor zijn rekening neemt.
Dit is geen randgeval. @asyncapi/specs komt via allerlei API-tooling vaak als onderliggende afhankelijkheid mee, dus je kunt het in je dependency-tree hebben zonder het bewust te installeren. De kwaadaardige code draaide bovendien zodra een module werd geladen, niet pas bij de installatie. Elke organisatie die tussen de publicatie en de intrekking bouwde of draaide met een getroffen versie, controleert nu haar afhankelijkheden en roteert de betrokken inloggegevens.
De aanval: de eigen release-pijplijn gekaapt
De aanvaller kreeg pushrechten tot de repositories en gebruikte de eigen, legitieme GitHub Actions-release-pijplijn van het project om te publiceren, met geldige OIDC-provenance als herkomstbewijs. Daardoor droegen de kwaadaardige versies dezelfde attestatie als echte releases, waardoor provenance als controle hier niets uithaalde. De code zat rechtstreeks in het hoofd-JavaScript-bestand van elk pakket, zodat hij bij het importeren uitvoerde en geen install-script nodig had.
Het ging om @asyncapi/generator 3.3.1 (101.000 downloads per week), @asyncapi/generator-helpers 1.1.1 (43.000), @asyncapi/generator-components 0.7.1 (34.000) en @asyncapi/specs 6.11.2 plus 6.11.2-alpha.1 (2,1 miljoen). Het blootstellingsvenster was kort: op 14 juli 2026 tussen ongeveer 07:10 en 11:18 UTC, iets meer dan vier uur, waarna npm de versies verwijderde.

Wat de malware doet
Het ingebedde raamwerk telt bijna 92.000 regels code en werkt als een hybride van info-stealer, crypto-stealer en remote access trojan. Het is gebouwd om inloggegevens, tokens, browserdata en gegevens uit CI/CD-systemen en AI-ontwikkeltools te oogsten, verspreidt zichzelf via gestolen npm-, PyPI- en Cargo-tokens en kan terugpraten via zes losse kanalen, waaronder Nostr-relays, IPFS, BitTorrent en Ethereum-smart-contracts. Het controleert ook of het in een virtuele machine draait en of het systeem op Russisch staat.
Een belangrijke nuance: onderzoekers van Aikido stelden vast dat de steler in deze vorm niet functioneerde en afsloot voordat hij iets verzamelde. Dat verkleint de schade, maar heft hem niet op. De pakketten stonden live, het uitvoeren-bij-import is echt, en een volgende variant hoeft die fout niet te maken.
Wat je nu doet
Controleer of een getroffen versie in je dependency-tree zat, herstel naar een bekende goede versie en genereer je lockfiles opnieuw. Draaide je een besmette build, behandel dat systeem dan als mogelijk gecompromitteerd: verwijder de verborgen payload, rond verdachte processen af en roteer je npm-, PyPI- en Cargo-tokens en andere geraakte inloggegevens. Structureel scheelt het om afhankelijkheden vast te pinnen, lockfiles af te dwingen en pakketherkomst te verifieren in plaats van blind de laatste versie binnen te halen.
Waarom dit blijft terugkomen
De aanval past in een patroon dat zich opstapelt: niet een obscuur typosquat-pakket, maar de gekaapte release-pijplijn van een vertrouwd, veel-gedownload project. Vorige maand overkwam de npm-scope van het Mastra-framework hetzelfde, met een credential-steler in ruim 140 pakketten voor AI-agenten, en amper een week geleden doken nep-SDK's van Paysafe en Skrill op npm en PyPI op met exact hetzelfde doel: ontwikkelaarsgeheimen. Herkomst-attestaties en hoge downloadcijfers zijn geen vervanging voor het vastpinnen en scannen van wat je binnenhaalt, want juist de meest vertrouwde schakel is nu het doelwit.
Veelgestelde vragen
Grip op je dependencies
Ik denk met je mee over je hele software- en AI-stack, ontwerp de koppelingen en automatisering en bouw ze zo dat je weet welke code er binnenkomt en waar je data blijft, self-hosted waar dat kan.
Dit artikel is geproduceerd samen met het Agent Team. Meer over de redactie.
