Close-up van broncode op een scherm.
Nieuws20 september · 18:104 min leestijd

Kwaadaardige npm-pakketten verbergen malware in runtime-code

Een kwaadaardige npm-campagne verbergt malware in runtime-code van `indexed-btree` en negen verwante pakketten. De installatie lijkt schoon, maar normaal gebruik kan hostgegevens naar de aanvaller sturen.

Kwaadaardige npm-pakketten verbergen hun loader in gewone JavaScript-code; malware start pas wanneer een applicatie de dependency gebruikt, niet tijdens de installatie, meldt Checkmarx.

Voor Nederlandse softwareteams verschuift daarmee de grens van dependency-beveiliging. npm v12 blokkeert installatiescripts, maar een pakket dat tijdens normaal gebruik kwaadaardige code uitvoert, komt alsnog door die poort. De inzet is de CI/CD-omgeving zelf: wat lokaal of in een build-runner draait, werkt mogelijk binnen dezelfde omgeving als broncode, tokens en cloudtoegang.

De aanval zit in een gewone methode

De campagne draait om indexed-btree, een pakket dat de legitieme B-tree-bibliotheek sorted-btree nabootst. Er staat geen preinstall of postinstall in package.json. De loader zit in BTree.prototype.set, een methode die gebruikers volgens Checkmarx voortdurend aanroepen. Bij een specifieke sleutelwaarde start de code een verborgen bestand met een eerste malwarefase.

De applicatie hoeft dus geen verdachte functie te importeren. De methode die bij normaal gebruik hoort, is de ingang. De code maakt een los Node-proces aan en laat fouten stil vallen, waardoor een statische controle die vooral package.json en installatiescripts bekijkt groen licht kan geven. BleepingComputer meldt dat npm's nieuwe maatregelen lifecycle-scripts zoals preinstall, install en postinstall blokkeren tenzij ze expliciet zijn toegestaan, maar die rem beoordeelt niet automatisch wat een pakket tijdens gebruik doet.

Twee versies en miljoenen downloads

OSV, met een melding van Amazon Inspector, noemt versies 2.1.1 en 2.1.2 van indexed-btree als getroffen. Checkmarx rapporteert voor het pakket bijna 2 miljoen wekelijkse downloads op het moment van de analyse. Daarmee gaat het niet om een obscure dependency die alleen in een verlaten hobbyproject stond.

De onderzoekers koppelen daarnaast negen verwijderde npm-pakketten aan dezelfde operatie. In de gepubliceerde telling staat btree-core op 1.951.274 downloads; zeven van de negen pakketten zitten boven 400.000. De pakketnamen klinken als gewone hulpprogramma's voor indexen, wachtrijen en caches, precies het soort code dat via een andere dependency ongemerkt in een applicatie kan belanden.

Door aanvallers nagemaakt GitHub-repository voor indexed-btree, met een geloofwaardig ogende projectstructuur. Bron: Checkmarx
Door aanvallers nagemaakt GitHub-repository voor indexed-btree, met een geloofwaardig ogende projectstructuur. Bron: Checkmarx

De malware wacht op gebruik

Na activatie verzamelt de code informatie over het systeem, waaronder architectuur, hostnaam, processor, geheugen en uptime. Die gegevens gaan naar hardcoded kanalen op Slack en Telegram. Voor de besturing gebruikt de malware een smart contract op het Sepolia-testnet als verwijzing naar een volgend adres. Met X25519, ECDH en AES wordt een tweede payload uit de blockchain ontsleuteld.

Die constructie maakt het lastiger om de commandostructuur weg te nemen door één domein of IP-adres te blokkeren. De loader kan bovendien zijn eigen bestanden verwijderen en de trigger uit de prototypefunctie halen. Een incident kan daardoor verdwijnen uit een omgeving voordat een onderzoeker de oorspronkelijke code opnieuw bekijkt.

Kunstmatig geloofwaardig gemaakte commitgeschiedenis van het indexed-btree-repository. Bron: Checkmarx
Kunstmatig geloofwaardig gemaakte commitgeschiedenis van het indexed-btree-repository. Bron: Checkmarx

De grens verschuift van installatie naar runtime

De werkwijze bouwt voort op eerdere npm-aanvallen, maar de technische les is anders. Bij de npm-worm die in augustus honderden pakketten besmette via een gekaapt maintainer-account lag de eerste ingang in een preinstall-script. Bij indexed-btree lijkt de installatie schoon en begint de aanval pas wanneer de applicatie de bibliotheek gebruikt.

Dat maakt installatiescripts blokkeren nog steeds nuttig, maar niet afdoende. De gids voor het beveiligen van een AI-automatiseringsstack met lockfiles, npm ci en scanners beschrijft de laag die voorkomt dat een onverwachte dependency je build binnenkomt. Deze campagne laat zien dat er daarna nog een tweede vraag ligt: welk gedrag vertoont de code wanneer de build of applicatie echt draait?

De relevante scheidslijn is daarom niet langer geïnstalleerd versus niet geïnstalleerd, maar gecontroleerd gedrag versus onbekend gedrag. Wie alleen de eerste status meet, ziet een schone dependency. Wie ook runtime en runner observeert, ziet de echte grens van zijn softwareketen.

Veelgestelde vragen

Alisina Nawabi
Geschreven doorAlisina Nawabi

AI Product Engineer & Solutions Architect

Afhankelijkheden onder controle

Ik breng je softwareketen in kaart, ontwerp de controles rond je eigen proces en bouw ze in je CI en automatiseringen in. Van meedenken en ontwerp tot realiseren en automatiseren, self-hosted waar dat kan.

Meer informatie

Dit artikel is geproduceerd samen met het Agent Team. Meer over de redactie.

Genoemde integraties

Dit artikel noemt deze tools. Ik koppel ze op maat aan je eigen systemen.

Gerelateerde artikelen

AI-codeeragents installeren pakketten die niemand bezit, uit officiële documentatie
Nieuws
5 min

27 aug 20:26

AI-codeeragents installeren pakketten die niemand bezit, uit officiële documentatie

Onderzoekers vonden 227 installatiecommando's in officiële llms.txt-bestanden die naar niet-geregistreerde pakketten wijzen. Ze claimden er een paar, en binnen vier minuten draaide hun code bij een Fortune 500-bedrijf via een AI-codeeragent.

npm-worm besmet honderden pakketten via gekaapt account van keyv-beheerder
Nieuws
5 min

4 aug 18:10

npm-worm besmet honderden pakketten via gekaapt account van keyv-beheerder

Een worm besmette sinds dinsdagochtend honderden npm-pakketten via het gekaapte GitHub-account van de keyv-beheerder. De malware steelt tokens uit CI en cloud, publiceert zichzelf verder en nestelt zich in hooks van Claude Code en VS Code.

Aanvallers besmetten populaire AsyncAPI-npm-pakketten met een inloggegevens-steler
Nieuws
4 min

15 jul 18:12

Aanvallers besmetten populaire AsyncAPI-npm-pakketten met een inloggegevens-steler

Aanvallers kaapten de release-pijplijn van vier veelgebruikte AsyncAPI-pakketten op npm en publiceerden versies met een inloggegevens-steler, waaronder @asyncapi/specs met ruim 2 miljoen wekelijkse downloads. Wie ze gebruikt, controleert nu en roteert tokens.

Aanvallers scannen 1,8 miljoen Android-apps met Claude
Nieuws
4 min

12 sep 00:10

Aanvallers scannen 1,8 miljoen Android-apps met Claude

Anthropic beschrijft hoe een vermoedelijke ShinyHunters-affiliate Claude gebruikte om 1,8 miljoen Android-APK’s op secrets te scannen. Dezelfde campagne laat zien hoe gestolen sleutels via leveranciers en SaaS-platforms naar klantorganisaties kunnen doorlopen.

Google ziet AI-agenten in minder dan zes uur credentials oogsten
Nieuws
5 min

8 sep 16:21

Google ziet AI-agenten in minder dan zes uur credentials oogsten

Google Threat Intelligence Group beschrijft hoe een financieel gemotiveerde aanvaller in minder dan zes uur een autonome campagne bouwde die duizenden credentials oogstte. De inzet voor Nederlandse bedrijven ligt bij de grenzen rond cloud-, CI/CD- en agenttoegang.

Phishingdienst BigBear 2.0 zet FIDO2 uit en omzeilt MFA bij 258 organisaties
Nieuws
6 min

8 sep 06:09

Phishingdienst BigBear 2.0 zet FIDO2 uit en omzeilt MFA bij 258 organisaties

Phishingdienst BigBear 2.0 zet met drie regels JavaScript de FIDO2-inlog uit en oogst daarna sessiecookies. CloudSEK telde 5.137 buitgemaakte records en 258 organisaties met een afgeronde MFA-bypass op Microsoft 365.