- Honderden npm-pakketten werden gecompromitteerd door een zichzelf replicerende worm met de naam Shai-Hulud, terwijl GitHub meer dan 500 besmette versies verwijderde.
- De malware steelt geheimen (npm-tokens, GitHub PAT's, cloudsleutels) en publiceert geïnfecteerde pakketten opnieuw met behulp van de publicatierechten van het slachtoffer.
- Er zijn aanwijzingen dat Linux en macOS op de korrel worden genomen, dat TruffleHog wordt misbruikt en dat er een GitHub Actions-workflow is die data exfiltreert.
- Directe stappen: roteer tokens, controleer afhankelijkheden en GitHub-opslagplaatsen, pas MFA/2FA toe en ga op zoek naar IoC's, waaronder bundle.js en webhook.site-verkeer.

Wat begon als een nieuwe paniek in de toeleveringsketen in de JavaScript-wereld, is geëscaleerd tot een groot incident dat het npm-ecosysteem treft. Rapporten van meerdere bronnen bevestigen een zichzelf verspreidende malwarestam. gevolgd als Shai‑Huluddie de inloggegevens van ontwikkelaars in gevaar brengt, code blootstelt en besmette pakketten opnieuw publiceert om de infectie voort te zetten.
Hoewel de aantallen per bron verschillen, is de consensus duidelijk: we hebben te maken met honderden vergiftigde releases, waaronder een veelgebruikte bibliotheek die miljoenen keren per week wordt gedownload. GitHub heeft meer dan 500 gecompromitteerde versies verwijderd om de verspreiding tegen te gaan, en beveiligingsteams wereldwijd dringen er bij ontwikkelaars op aan om inloggegevens te roteren en hun repositories en pipelines te doorzoeken op aanwijzingen voor inbraak.
Wat is er gebeurd en waarom het ertoe doet
Onderzoeken wijzen uit dat de operatie waarschijnlijk begon met Het verzamelen van inloggegevens lokt spoofing npm, waardoor beheerders werden aangespoord om de MFA-instellingen te "updaten". Met de toegang in de hand, zette de kwaadwillende actor een worm in die na de installatie actief is, op zoek gaat naar geheimen en geïnfecteerde builds opnieuw publiceert onder de identiteit van het slachtoffer. Dit maakte vertrouwde beheerders tot versterkers van de aanval.
Shai‑Hulud combineert twee gevaarlijke ideeën: geautomatiseerde verspreiding en diefstal van geheimenHet misbruikt gestolen NPM-tokens om nieuwe versies van pakketten te publiceren en maakt gebruik van GitHub-tokens en cloudsleutels (AWS, GCP, Azure) om lateraal te bewegen en data te exfiltreren. Deze combinatie vergroot de explosieradius, waardoor één inbreuk een rimpeling kan veroorzaken onder talloze downstreamgebruikers.
De doelen lijken zich te richten op Unix-achtige systemen. Uit analyse blijkt dat de meeste kwaadaardige logica wordt uitgevoerd op Linux en macOS, gebaseerd op omgevingscontroles, hoewel de fase van geheimenontdekking (met name bij TruffleHog) breder kan plaatsvinden. Die focus beperkte de voetafdruk van de worm, maar liet nog steeds een breed scala aan ontwikkelaarsmachines blootgesteld.
Pakketten van verschillende vooraanstaande organisaties werden getroffen, evenals populaire communitymodules. In een opvallend voorbeeld: @ctrl/tinycolor pakket—miljoenen keren per week gedownload—werd in de strijd betrokken, wat aantoont hoe diep de infectie zich in de afhankelijkheidsgrafiek kon nestelen.
Hoe de worm werkt (technische uitleg)
De kernpayload wordt geleverd als een stevig JavaScript-bestand, vaak aangeduid als bundel.js (meer dan 3 MB in de waargenomen voorbeelden). Het wordt uitgevoerd via een postinstall-hook die is toegevoegd aan package.json, wat betekent dat de schadelijke code automatisch wordt uitgevoerd direct nadat een gebruiker het pakket via npm heeft geïnstalleerd.
In bundle.js bevinden zich modules voor GitHub API-interactie, cloud-SDK's (AWS/GCP), netwerkhelpers en routines om TruffleHog te gebruiken voor geheime ontdekking. Het script inventariseert het besturingssysteem, lokaliseert een npm-token en controleert op een geldig GitHub-token; als er geen wordt gevonden, wordt het afgebroken – anders start het met exfiltratie en replicatie.
Een opvallende eigenaardigheid: sommige geïnfecteerde pakketten bevatten een archief met de naam pakket.tar in plaats van de gebruikelijke naamgevingsconventie, een teken dat onderzoekers hielp om aangetaste artefacten te markeren. Analisten observeerden ook een variant die als een pre-installatie-hook werd uitgevoerd; een van de eerste genoemde gevallen was ngx‑bootstrap 18.1.4, die mogelijk als een eerste bruggenhoofd in de verspreiding heeft gediend.
Zodra de malware actief is, somt deze de meest gedownloade pakketten van de ontwikkelaar op via de npm-zoek-API, pakt elke tarball uit, verwijdert bundle.js, injecteert een postinstall-opdracht, verhoogt de versie en publiceert deze opnieuw naar npm met het token van het slachtoffer. Dit verandert de portfolio van de ontwikkelaar in een voertuig voor verdere infecties.
Exfiltratie van geheimen en GitHub-workflows
Voor het verzamelen van inloggegevens scant Shai‑Hulud naar npm-tokens, GitHub Personal Access Tokens en cloud API-sleutels (AWS, GCP, Azure). Vervolgens wordt er een openbare GitHub-repository met de naam 'Shai-Hulud' aangemaakt onder het account van het slachtoffer, waarbij een gegevensbestand (bijv. data.json) met de gestolen geheimen wordt gecommit, waardoor deze in feite voor de wereld zichtbaar worden.
Tegelijkertijd observeerden onderzoekers een slimme GitHub Actions-hoek: de worm creëert een branch met de naam 'shai‑hulud' via toegankelijke repositories en pusht een workflowbestand (shai-hulud-workflow.yml). De workflow wordt geactiveerd bij pushes en verzamelt geheimen en verzendt deze naar de infrastructuur van de aanvaller, soms nadat dubbele Base64-codering om inhoud onderweg te verduisteren.
Er is ook bewijs van een migratiescript dat klonen privé/interne opslagplaatsen van organisaties waartoe het slachtoffer toegang heeft, en deze opnieuw hosten in het account van de gebruiker als openbare mirrors. Het doel lijkt geautomatiseerde diefstal van broncode van privéprojecten te zijn, wat de druk op de getroffen organisaties vergroot.
Meerdere rapporten melden artefacten van AI-assistentie in de bash-scripts (commentaren en zelfs emoji's), wat suggereert dat de aanvaller mogelijk een LLM om ontwikkeling te versnellen van de automatiseringscomponenten van de malware.
Omvang en opmerkelijke pakketten
Door gecoördineerde verwijderingen heeft GitHub 500+ gecompromitteerde versies om de verspreiding van de worm te stoppen. Hoewel het exacte aantal blijft evolueren, omvat de lijst talloze ecosystemen en organisaties, met downstream impact op ontwikkelaars die tijdens de actieve periode updates hebben uitgevoerd.
Veelgenoemde pakketten en naamruimten zijn: @ctrl/tinycolor (miljoenen wekelijkse downloads), meerdere @crowdstrike/* componenten (zoals commitlint en UI-bibliotheken) en een breed scala aan communitymodules, waaronder ngx‑bootstrap, ng2‑bestand‑upload, ngx‑toastr, en meer. CrowdStrike gaf aan dat zijn kernplatform onaangetast bleef en dat sleutels werden snel gedraaid nadat er schadelijke vermeldingen in het openbare register zijn gedetecteerd.
- Voorbeelden die aan de wave zijn gekoppeld: @ctrl/tinycolor; @crowdstrike/commitlint; @crowdstrike/foundry‑js; @crowdstrike/glide‑core; ngx‑bootstrap; ng2‑file‑upload; ngx‑toastr; @nativescript‑community/*; @teselagen/*; @things‑factory/*; en anderen.
- Onderzoekers zagen ook meerdere kwaadaardige versies per pakket in sommige gevallen, waarschijnlijk doordat de worm zich verspreidde via de accounts van meerdere beheerders binnen hetzelfde project.
Platformrespons en beveiligingswijzigingen
De onmiddellijke acties van GitHub omvatten: het verwijderen van bekende slechte pakketten van NPM en het blokkeren van uploads die voldoen aan Indicators of Compromise (IoC's). Het bedrijf voert ook strengere publicatiecontroles in: verplichte 2FA voor lokale publicaties, kortere geldigheidsduur van granulaire tokens (bijv. zeven dagen) en bredere acceptatie van Vertrouwd publiceren om minder afhankelijk te zijn van geheimen die lang bewaard blijven.
Aankomende wijzigingen zullen de klassieke tokens en op TOTP gebaseerde 2FA voor publicatie overbodig maken, standaard om het publiceren van tokens niet toe te staan, en breid de aanbieders voor Trusted Publishing uit. GitHub heeft een geleidelijke uitrol aangekondigd met documentatie en migratiehandleidingen, omdat wordt erkend dat sommige workflows aanpassing behoeven.
Threat intelligence- en incidentresponsteams in de hele sector (waaronder Unit 42, Kaspersky, Trend Micro en anderen) hebben uitgegeven richtlijnen en detecties terwijl IoC's worden gedeeld met collega's en allianties om beveiligingsupdates te versnellen.
Hoe u nu het risico kunt verminderen
Ga er snel van uit dat elke ontwikkelaarsmachine die recent npm-pakketten heeft geïnstalleerd, mogelijk geheimen heeft gelekt. De prioriteit ligt bij bevatten misbruik van inloggegevens, stop persistentie en elimineer besmette afhankelijkheden uit build chains.
- Roteer npm-tokens, GitHub PAT's/SSH-sleutels en cloudreferenties (AWS/GCP/Azure) onmiddellijk. Beschouw alle geheimen op de ontwikkelaarshosts als gecompromitteerd.
- Controleer afhankelijkheden via package‑lock.json/yarn.lock; verwijder of pin ze vast van bekende gecompromitteerde versies; installeer ze opnieuw vanaf schone bronnen.
- Pas MFA/2FA toe op GitHub en npm; stap waar mogelijk over op Trusted Publishing om tokens met een lange levensduur uit de lus te verwijderen.
- Controleer GitHub op onverwachte openbare opslagplaatsen met de naam 'Shai‑Hulud', onbekende branches of workflows en afwijkende Actions-uitvoeringen.
- Verhard CI/CD met RBAC met de minste bevoegdheden, artefactondertekening/-verificatie en continue SCA-scanning; behandel open-sourceconsumptie als beheerd risico.
Tips voor het opsporen van bedreigingen (controles op sterke signalen)
Zoek naar uitgaande verbindingen naar webhook.site domeinen, met name de URI die in meerdere rapporten is waargenomen. Zoek op eindpunten naar de aanwezigheid van bundel.js in tijdelijke of pakketmappen en voor een GitHub Actions-bestand met de naam shai‑hulud‑workflow.yml.
- Netwerktelemetrie: DNS/URL-logs die webhook.site bevatten; markeer het specifieke pad bb8ca5f6‑4175‑45d2‑b042‑fc9ebb8170b7 als dit wordt aangetroffen.
- Bestandstelemetrie: aanmaken of uitvoeren van bundle.js; de aanwezigheid van shai‑hulud‑workflow.yml op Linux/macOS-ontwikkelaarshosts.
- Procestelemetrie: TruffleHog-aanroepingen waar het niet verwacht wordt (let op: in sommige organisaties kan het legitiem zijn).
Indicatoren van compromis (IoC's)
Aanwijzingen in de vorm van bestanden en strings die tijdens onderzoeken zijn aangetroffen, zijn onder meer: bundel.js en shai‑hulud‑workflow.yml, waarbij de letterlijke tekenreeks 'shai‑hulud' voorkomt in branches, repo's en workflows.
- Bestanden: bundle.js; shai‑hulud‑workflow.yml
- Strings: shai‑hulud; pakket.tar
- Hashes (selected): 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09; b74caeaa75e077c99f7d44f46daaf9796a3be43ecf24f2a1fd381844669da777; dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c; 4b2399646573bb737c4969563303d8ee2e9ddbd1b271f1ca9e35ea78062538db; C96FBBE010DD4C5BFB801780856EC228; 78E701F42B76CCDE3F2678E548886860
- Netwerk: https://webhook.site/bb8ca5f6-4175-45d2-b042-fc9ebb8170b7 (varianten en subpaden waargenomen)
Tijdlijn en doorlopende analyse
Rapporten schrijven de eerste ontdekking toe aan medio september 2025, met piek inperkingsacties rond 16-19 septemberGitHub en diverse leveranciers hebben sindsdien de beveiliging, detecties en richtlijnen bijgewerkt. Verwacht verdere retroactieve bevindingen naarmate organisaties incidentbeoordelingen afronden en de lijsten met getroffen versies uitbreiden.
Sommige bewijzen suggereren dat het incident gebaseerd op eerdere geheime lekken, wat onderstreept hoe langlevende tokens en gecachte inloggegevens maanden later nieuwe golven van compromittering kunnen veroorzaken. Dit zou de inspanningen moeten versterken om de levensduur van tokens te verkorten en publicatiemodellen te implementeren die minimaliseer geheime wildgroei.
Niet elk rapport is het eens over exacte totalen of first-in-chain-pakketten, maar het algemene beeld komt overeen: een zelfreplicerende npm-worm dat het vertrouwen van ontwikkelaars en de geautomatiseerde publicatierechten werden ingezet om snel te schalen - sneller dan veel teams konden detecteren door alleen handmatige beoordeling.
Het evenement illustreert hoe snel moderne build-pipelines snelwegen voor malware kunnen worden. Door verscherping van de authenticatieDoor tokens met een lange levensduur van het pad te verwijderen, CI/CD te versterken en agressief op zoek te gaan naar IoC's, kunnen organisaties hun blootstelling vandaag al beperken en de volgende golf veel moeilijker uit te voeren maken.
