Een gegenereerde abstracte illustratie op een diepblauw veld: een keten van in elkaar grijpende doorschijnende blokken loopt van links naar rechts, elk blok gestempeld met een klein gloeiend cyaan zegel. Nabij het midden van de keten is één blok vervangen door een donker blok met een identiek cyaan zegel, en de keten loopt er zonder onderbreking verder door. Dunne amberkleurige filamenten vertakken zich neerwaarts van dat donkere blok naar een kleine rij donkere terminalvensters aan de onderkant van het kader. Geen tekst, cijfers, personen, merktekenen of organisatielogo's zijn zichtbaar. Het OrcaRouter-logo is samengesteld in de rechteronderhoek.
AI Safety Incidents

ChainDrop: geldige herkomst in 400+ npm-pakketten, en Claude Code-hooks die geen npm-installatie nodig hebben

Auteur

Elias Hawthorne

Publicatiedatum

Nieuwste modellen · 20Bekijk alle modellen →
Benchmarks: Artificial Analysis · dagelijks bijgewerkt
Terug naar alle berichten

Op 4 augustus 2026 namen aanvallers het GitHub-account over dat achter keyv zat, een cachingbibliotheek die volgens Elastic Security Labs de maand daarvoor meer dan 600 miljoen keer werd gedownload. Zowel Wiz Research als Orca Security meldt dat kwaadaardige bestanden recht naar de main-branch van keyv werden gepusht, en dat de eigen GitHub Actions-workflow van het project vervolgens de vergiftigde release bouwde en publiceerde — zodat die bij npm binnenkwam met geldige provenance, de attestatie die supply-chaintooling gebruikt om te bepalen of een pakket betrouwbaar is. Een zichzelf voortplantende worm die onderzoekers ChainDrop noemen, gebruikte vervolgens gestolen npm-tokens om het trucje te herhalen bij de pakketten van andere maintainers: Elastic telde op 6 augustus meer dan 400 unieke pakketten, Microsoft Threat Intelligence beschreef dezelfde campagne op 4 augustus, en de Cyber Security Agency van Singapore telde meer dan 1.300 gecompromitteerde pakketversies met samen 2 miljard maandelijkse downloads. Zowel Elastic als Microsoft beschrijft hooks die opnieuw worden uitgevoerd wanneer een repository wordt geopend in Claude Code of Visual Studio Code. De volledige bronnenlijst, ernstclassificatie en betrouwbaarheidsbeoordeling van de vermelding staan in het AI-incidentarchief, naast de andere npm- en developer-tooling-supply-chainvermeldingen die eromheen zijn vastgelegd.

Hoe een legitieme releasepipeline haar eigen compromittering ondertekende

Wiz Research reconstrueert de eerste minuten: vanaf 09:00 UTC op 4 augustus gebruikte de aanvaller een gecompromitteerde identiteit om IDE-persistentiepayloads in het keyv-repository in te voeren, en publiceerde kort daarna een nieuwe versie van keyv met de payload. Wiz noemt de gecompromitteerde partij een GitHub-beheerdersaccount en zegt dat meerdere pakketten in het keyv- en cacheable-ecosysteem volgden.

Het rapid-responsestuk van Orca Security is specifieker over het ondertekeningspad. De aanvaller, zo staat er, pushte twee kwaadaardige bestanden — setup.mjs en Math_Symbol.js — rechtstreeks naar de mainbranch en bracht meteen nieuwe releases uit. Omdat die releases werden gebouwd via de GitHub Actions-workflows van het gecompromitteerde account, werden de vergiftigde versies naar npm gepubliceerd met geldige provenance-signatures, waardoor de standaardintegriteitscontroles in de supply chain werden omzeild. Zscaler ThreatLabz, een onafhankelijk onderzoeksteam dat niet onder de in het verslag genoemde bronnen valt, komt tot dezelfde conclusie en koppelt er een niveau aan: de kwaadaardige keyv 6.0.0 had geldige SLSA Build Level 3-provenance, omdat de aanvaller het bronrepository controleerde. BleepingComputer, dat de campagne die dag meldde, registreert hetzelfde mechanisme — kwaadaardige bestanden die rechtstreeks naar de mainbranches van de projecten werden gepusht, nieuwe releases die werden gegenereerd, geldige provenance omdat de builds via legitieme GitHub Actions-workflows liepen.

De analyse van Microsoft voegt een detail toe dat een tegenstrijdigheid lijkt en dat niet is. In de verspreidingsfase van de worm stelde Microsoft Threat Intelligence vast dat veel kwaadaardige versies geen bijbehorende broncodecommit, pull request, tag of legitieme release hadden, wat erop wees dat de aanvallers pakket-tarballs rechtstreeks wijzigden en publiceerden in plaats van elke openbare broncode-repository te compromitteren. Samen gelezen beschrijven de bronnen twee ondertekeningsregimes binnen één campagne: de eerste keyv-releases liepen door de echte CI-pipeline van het slachtoffer en dragen attestaties die dit bevestigen, terwijl de latere releases van de worm grotendeels werden samengesteld en gepubliceerd met gestolen registry-tokens, waardoor er helemaal geen broncode-spoor achterbleef. De eigen observatie van Microsoft is dat het patroon van rechtstreeks gepubliceerde tarballs verklaart waarom kwaadaardige releases vaak verschenen als een gewone verhoging van de patchversie zonder bijbehorende source-commits of pull requests.

De ongemakkelijke les wordt door Zscaler ronduit verwoord: herkomst valideert het buildproces, niet de identiteit van het account of de integriteit van het CI-systeem dat het uitvoert. Zscaler geeft ook een lacune toe die van belang is voor iedereen die het incident reconstrueert — het exacte mechanisme voor accountovername dat de aanvaller gebruikte, was onbekend op het moment dat de analyse werd uitgevoerd.

Wat er draait bij npm install: preinstall, Bun 1.3.13 en een verzamelaar met 300 patronen

Elastic Security Labs beschrijft de trigger als een preinstall-hook in package.json, die misbruik maakt van een legitieme npm-functie die willekeurige opdrachten uitvoert voordat een pakket klaar is met installeren, zonder dat verdere interactie van het slachtoffer nodig is. De hook start setup.mjs, dat controleert of de Bun JavaScript-runtime al aanwezig is. Als dat niet het geval is, detecteert de dropper het platform en de architectuur van de machine, downloadt Bun v1.3.13 vanaf de officiële releasepagina, pakt het uit, gebruikt het om de payload uit te voeren en verwijdert daarna de tijdelijke map om zijn sporen te wissen. Wiz identificeerde onafhankelijk de user agent Bun/1.3.13 die de kwaadaardige aanroepen doet. De dropper is platformonafhankelijk en richt zich op Linux, macOS en Windows.

De payload is zwaar obfusceerd, en de bronnen verschillen licht van mening over de grootte: Elastic schat hem op 711 kilobyte, Orca Security op 728 KB. Hij maakt gebruik van control-flow flattening en een Base91-stringcoderingsschema, en bevat Dune-thematische strings — laza, kanly, ghola, mentat, lasgun, sietch, fedaykin, tleilaxu, sandworm, sardaukar, ornithopter, navigator — waarvan Elastic opmerkt dat ze overeenkomsten vertonen met eerdere Shai-Hulud-campagnes.

Microsofts gedragsmatige uiteenzetting voegt twee noemenswaardige details toe. De payload controleert eerst zijn omgeving en stopt op Russischtalige systemen, vermijdt dubbele instanties en start een losgekoppelde achtergrondkopie op werkstations van ontwikkelaars; binnen CI blijft hij gekoppeld aan de actieve job zodat hij toegang kan krijgen tot workflowgeheimen, runner-referenties en OpenID Connect-publicatiemachtigingen.

De collector is de plek waar het incident een AI-toolingverhaal wordt, en niet een generiek credentialverhaal. Volgens Elastic scant hij meer dan 300 unieke patronen in credentialstores op een ontwikkelmachine, en is de opvallende targeting gericht op AI-toolingcredentials: Anthropic, Claude, Codex, Cursor, OpenAI en Gemini. Hij neemt ook AWS-, GCP-, Azure- en Alibaba Cloud-credentials, GitHub personal access tokens, JWT- en sessietokens, HashiCorp Vault-tokens, SSH-privésleutels, Kubernetes-serviceaccounttokens en npm-tokens op. Wiz meldt dat de doelenlijst met bijna 70% is uitgebreid ten opzichte van de eerdere Mini Shai-Hulud-code waarop hij is gebouwd, met nieuwe toevoegingen, waaronder AI-agent-credentialstores voor Claude, OpenAI, Codex, Cursor en Gemini, cryptocurrency-keystores voor Foundry, Solana en Monero, Jenkins' master.key, Argo CD- en Harbor-secrets, Alibaba- en Tencent-CLI-configuraties, en /etc/shadow.

Zowel Microsoft als Elastic beschrijven hetzelfde exfiltratiedesign. Resultaten worden geserialiseerd als JSON, gzip-gecomprimeerd en versleuteld met een willekeurig gegenereerde AES-256-GCM-sleutel, en die sleutel wordt verpakt met de RSA-openbare sleutel van de aanvaller. De payload hardcodeert zijn command-and-control-domein niet: Elastic zegt dat hij een Ethereum-smartcontract opvraagt op 0xE1f2395ee43e45A1556EC6438a88c31B83493103 om tijdens runtime het huidige endpoint op te halen, zodat de infrastructuur kan worden geroteerd zonder de malware aan te passen. Als dat mislukt, zoekt hij naar een cryptografisch ondertekende markering — thebeautifulmarchoftime — in de GitHub-commitgeschiedenis en valideert het domein tegen een ingebedde RSA-sleutel. Als beide mislukken, exfiltreert hij via een openbare GitHub-repository die het slachtoffer met zijn eigen account aanmaakt, beschreven als "Shai-Hulud: Here We Go Again". Microsoft merkt op dat een van de fallbackpaden een gestolen GitHub-token met dubbele Base64 codeert in plaats van hem te versleutelen.

De verspreiding is afhankelijk van de tokenkwaliteit. Elastic meldt dat de worm alleen actief wordt wanneer de credential-sweep een npm-token vindt met schrijfrechten voor packages en de mogelijkheid om te publiceren zonder tweefactorauthenticatie; daarna downloadt hij de nieuwste tarball van elk beschrijfbaar package, injecteert zichzelf, verhoogt de patchversie en publiceert opnieuw. BleepingComputer voegt toe dat elk token in realtime wordt gevalideerd tegen de whoami-endpoint van het register voordat het wordt gestolen. Die routine is wat één gecompromitteerde identiteit omzette in honderden releases, en daarom lijken de kwaadaardige versies op gewone patchverhogingen.

An HTML card titled 'The first four hours, 4 August 2026', subtitled 'What the sources put where in the infection order, and the three counts the campaign is quoted with'. A four-step numbered column headed 'Infection order' reads: 1, 09:00 UTC: files pushed to main — attacker adds IDE persistence payloads to the keyv repository, then publishes a new keyv version, per Wiz Research; 2, the victim's CI builds the payload — keyv 6.0.0 reaches npm through the compromised account's own GitHub Actions workflow carrying valid provenance and a SLSA Build Level 3 attestation, per Orca Security and Zscaler ThreatLabz; 3, the worm republishes with stolen tokens — stolen npm tokens with write access and 2FA bypass bump patch versions, at peak roughly one infected package per second, per Elastic Security Labs and Zscaler ThreatLabz; 4, IDE hooks travel with the repos — a stolen GitHub App token commits .claude/settings.json and .vscode/tasks.json to up to 50 branches per accessible repository, per Elastic Security Labs. A right-hand panel headed 'Three counts, three units' shows: 400+, unique npm packages compromised by 6 August, per Elastic and Microsoft Threat Intelligence; 868, worm-reached packages across 1,381 versions, per Aikido via BleepingComputer and Orca Security; 1,300+, package versions with 2 billion monthly downloads, per CSA Singapore advisory AD-2026-009, 6 August. A footer reads: each figure is a snapshot taken while the campaign was still running; none of the cited sources claims a final total.

Het infectiepad dat geen npm install nodig heeft

De bevinding die deze campagne onderscheidt van eerdere npm-wormen, is dat installatie niet langer de enige manier is om binnen te komen. Elastic beschrijft twee aanvullende uitvoerpaden die gericht zijn op gebruikers van AI-tools voor programmeren. Een SessionStart-hook in .claude/settings.json voert node .claude/setup.mjs uit wanneer een nieuwe Claude-sessie start. Voor VS Code: een folderOpen-taak in .vscode/tasks.json voert node .vscode/setup.mjs uit wanneer een geïnfecteerde repository wordt geopend. Microsofts analyse somt dezelfde vier artefacten op — .claude/settings.json, .claude/setup.mjs, .vscode/tasks.json en .vscode/setup.mjs — en beschrijft ze als een secundaire infectieroute die de payload opnieuw kan starten nadat de oorspronkelijke npm-installatie is voltooid.

De omstandigheid die dit drastisch verruimt, zit in de gestolen inloggegevens. Als er daarbij een GitHub App-tokenaanwezig is, meldt Elastic: de worm commit de kwaadaardige hooks naar maximaal 50 branches per toegankelijke repository, waarbij .claude/settings.json en .vscode/tasks.json in elk daarvan worden geïnjecteerd. Elastic concludeert dat een ontwikkelaar die een van die branches kloont en opent, kan worden besmet door het project te openen — er is dan helemaal geen pakketinstallatie, en dus ook geen verdediging tegen installatiescripts, in het aanvalspad.

De beoordeling van Zscaler is dat de persistentiehooks pakketverwijdering overleven en opnieuw worden uitgevoerd door het project eenvoudigweg te openen in VS Code of Claude Code, waardoor de --ignore-scripts-mitigatie wordt omzeild die veel teams na eerdere npm-wormen hebben toegepast. De aanbeveling van Zscaler volgt direct: behandel configuratiebestanden van IDE's en AI-agenten — .claude/, .cursor/, .vscode/, .gemini/ — als uitvoerbare code, en beoordeel ze met dezelfde strengheid als broncode.

Er is een fingerprint voor de repository-helft van de aanval. Elastic meldt dat door de worm gegenereerde commits herkenbaar zijn aan de auteurnaam claude en het commitbericht chore: update config, en Wiz registreert dezelfde berichtstring. Elastic voegt toe dat het commitbericht naast een intimiderende string ook het gestolen GitHub-token bevatte — IfYouBlockThisAPIKeyItWillCrashTheLiveProductionServersOfAllThirdPartyClients — wat Elastic interpreteert als een poging om ontwikkelaars ervan af te schrikken het token in te trekken. Wiz registreert dezelfde string in de initiële commits, waarbij op de commits die de IDE-hooks invoeren het kortere bericht wordt gebruikt.

A generated abstract illustration on a deep navy field: a tall repository-shaped block stands at centre, its face divided into thin horizontal branch lines. A narrow beam of pale light from an editor-shaped pane at upper left falls across the block, and where the beam touches one branch line, a small bright hook symbol appears and a thin amber thread runs down into a dark pool at the base. The other branch lines remain untouched and faintly lit. No text, numbers, people, brand marks or organisation logos appear. The OrcaRouter logo is composited in the bottom-right corner.

De aantallen stemmen niet overeen, en dat is geen tegenstrijdigheid.

Elk gepubliceerd cijfer voor de impactradius is gekoppeld aan een andere eenheid, en de eenheden zijn niet onderling uitwisselbaar. Elastic Security Labs telde, in een bericht van 6 augustus, meer dan 400 unieke npm-pakketten die waren gecompromitteerd. Microsoft Threat Intelligence beschreef meer dan 400 pakketten bij meerdere niet-verwante uitgevers. Aikido, geciteerd door BleepingComputer, schatte het op minstens 868 pakketten in 1.381 versies. Orca Security meldt 10 direct vergiftigde keyv- en cacheable-pakketten met meer dan 619 miljoen maandelijkse downloads, en vervolgens 868 extra pakketten en 1.381 versies die door de worm zijn bereikt, voor meer dan 2 miljard maandelijkse installaties. Het advies AD-2026-009 van de CSA van Singapore, gedateerd 6 augustus, vermeldt meer dan 1.300 gecompromitteerde pakketversies die samen goed zijn voor 2 miljard maandelijkse downloads.

Dat zijn drie verschillende noemers — pakketten, pakketversies en maandelijkse downloadvolumes — afkomstig van drie verschillende momenten van een campagne die nog gaande was. Zscalers beschrijving van de snelheid verklaart waarom ze uiteenlopen: daarin staat dat de worm zichzelf in minder dan vier uur naar meer dan 400 pakketten voortplantte en op het hoogtepunt ruwweg één geïnfecteerd pakket per seconde. Een latere telling als correctie op een eerdere beschouwen zou verkeerd zijn; elk is een momentopname, en geen van de aangehaalde bronnen claimt een definitief totaal.

De exposure-cijfers van Elastic op bibliotheekniveau zijn de meest geciteerde en de minst dubbelzinnige. Het meldt dat keyv alleen al vorige maand meer dan 600 miljoen downloads had, met flat-cache bijna 580 miljoen, cacheable-request meer dan 137 miljoen, cacheable meer dan 30 miljoen en cache-manager meer dan 16 miljoen. Het advies van CSA somt de specifieke gecompromitteerde versies op, waaronder keyv 6.0.0, flat-cache 6.1.24, file-entry-cache 11.1.6, cacheable-request 13.0.20, cacheable 2.5.1, cache-manager 7.2.10, @cacheable/utils 2.5.1 en ecto 5.0.1.

De herroepingsval

Responders die een getroffen versie hebben geïnstalleerd, krijgen na het eerste probleem een tweede probleem. Elastic meldt dat de payload in een conditioneel GitHub-fallbackpad probeert een token-monitorcomponent te installeren dat toegang tot inloggegevens handhoudt en een destructieve handler bevat als het gecontroleerde token wordt ingetrokken. Zscaler beschrijft het mechanisme tot in operationele details en noemt het een token-intrekkingsval: de worm installeert een achtergrondproces dat elke 60 seconden met het gestolen token de GitHub-API pollt, en als het token een 4xx-fout retourneert — wat betekent dat het slachtoffer het heeft ingetrokken — wordt een secundaire destructieve payload geactiveerd, die afhankelijk van de variant uitvoering van code op afstand of verwijdering van de thuismap van de gebruiker kan omvatten.

Wiz voegt toe dat de dodemansschakelaar selectief wordt gewapend op basis van een reactie van de command-and-controlserver: de operator kan een waarde retourneren die aangeeft welk commando moet worden gewapend en welk token de schakelaar moet controleren op intrekking. Wiz merkt ook op dat de monitor zoekt naar een geldige reactie van het gebruikerseindpunt, dus elk token type dat daar geldig is, kan als trigger dienen.

Het praktische gevolg wordt gedocumenteerd door BleepingComputer en door de Aikido-richtlijnen die het aanhaalt: een ontwikkelaarswerkstation of CI/CD-runner waarop een getroffen versie is geïnstalleerd, moet als gecompromitteerd worden beschouwd zelfs als het pakket daarna is verwijderd, omdat uitvoering van de tweede fase tokens kan hebben blootgelegd en de integriteit van de build kan hebben ondermijnd. De richtlijnen van Microsoft komen vanuit de buildkant op hetzelfde punt uit, waarbij wordt gewaarschuwd dat organisaties die een getroffen pakket met ingeschakelde lifecycle-scripts hebben geïnstalleerd, het werkstation of de buildrunner als mogelijk gecompromitteerd moeten beschouwen en getroffen systemen en downstream-artefacten vanuit vertrouwde bronnen opnieuw moeten opbouwen.

An HTML card titled 'Established, assessed, and not shown', subtitled 'The same five analyses, sorted by how strongly each claim is supported — not by how confidently it is written'. Three columns. ESTABLISHED lists: the keyv maintainer's GitHub account was compromised, files were pushed to main and a release was published on 4 August 2026; at least keyv 6.0.0 shipped through the victim's own CI with valid provenance and SLSA Build Level 3; a preinstall hook ran setup.mjs, which downloaded Bun v1.3.13 to execute an obfuscated payload; the collector scanned 300+ credential patterns including Anthropic, Claude, Codex, Cursor, OpenAI and Gemini; hooks in .claude/settings.json and .vscode/tasks.json run on session start and folder open; a GitHub App token extended the hooks to up to 50 branches per accessible repository; more than 400 unique packages were compromised within days; CSA Singapore published advisory AD-2026-009 on 6 August 2026. ASSESSED lists: attribution to the Mini Shai-Hulud family and a TeamPCP lineage; that the account takeover was the initial access route; that provenance must not be read as proof of safety, since it validates the pipeline and not the account; that IDE configuration files should be treated as executable code. NOT SHOWN lists: how the maintainer account was taken over, reported as unknown by Zscaler; any single final total, since the counts use packages, versions and downloads interchangeably; any confirmed reuse of a stolen AI-tooling credential against a provider account; who the operator is beyond vendor attribution; any remediation outcome, account recovery or enforcement action. A footer cites Elastic Security Labs, Microsoft Threat Intelligence, Wiz Research, Orca Security and CSA Singapore AD-2026-009.

Wat vaststaat, wat wordt beoordeeld en wat niemand heeft aangetoond

Het primaire verslag en vijf onafhankelijke analyses convergeren op de mechanica, en de mechanische beweringen vormen het sterkste deel van het dossier.

Het GitHub-account van de keyv-maintainer werd gecompromitteerd, en kwaadaardige bestanden werden direct naar main gepusht voordat op 4 augustus 2026 een release werd gepubliceerd — consistent gemeld door Wiz, Orca Security, BleepingComputer en CSA Singapore.

• Ten minste keyv 6.0.0 bereikte npm via de eigen CI-pipeline van het slachtoffer, met geldige provenance, waarbij Zscaler een SLSA Build Level 3-attestatie vermeldt. Dit is de bewering die het incident opmerkelijk maakt, en ze wordt bevestigd door drie organisaties die niet als medeauteur bij elkaars werk betrokken waren.

• Een pre-installatiehook voerde setup.mjs uit, dat Bun v1.3.13 downloadde en een obfusceerde payload uitvoerde die meer dan 300 patronen voor inloggegevens scande, waaronder inloggegevens voor AI-codeertools — Elastic en Wiz zijn het eens over zowel de runtimeversie als de lijst met AI-gerichte inloggegevens.

• Hooks die naar .claude/settings.json en .vscode/tasks.json worden geschreven, worden uitgevoerd bij de start van een sessie en bij het openen van een map, en een GitHub App-token breidde dat uit tot maximaal 50 branches per toegankelijk repository — de bevinding van Elastic, en de basis voor zijn stelling dat een ontwikkelaar besmet kan worden door een repository te openen.

• Meer dan 400 unieke pakketten werden binnen enkele dagen gecompromitteerd, en CSA Singapore, een nationale toezichthouder, publiceerde op 6 augustus 2026 advies AD-2026-009 met een lijst van getroffen versies en indicatoren.

Wat de bronnen als beoordeling in plaats van feit beschouwen, moet als zodanig worden gelabeld. Wiz beschrijft de payload als een afstammeling van de malwarefamilie 'Mini' Shai-Hulud, gebouwd op openbare Shai-Hulud-Open-Source-repositories die door TeamPCP zijn gepubliceerd, met een paar cruciale wijzigingen; Orca Security schrijft de aanval toe aan TeamPCP; Zscaler koppelt ChainDrop aan TeamPCP en plaatst het in een afstammingslijn die teruggaat tot september 2025. Dat is een consensus onder leveranciers over de toeschrijving, niet iets wat een aangehaald primair document bewijst over een genoemd individu of een genoemde groep.

Drie dingen die geen enkele geciteerde bron vaststelt, en dit stuk vult ze niet aan. Eerst hoe het maintaineraccount werd overgenomen: Zscaler stelt ronduit dat het exacte mechanisme op het moment van zijn analyse onbekend was. Ten tweede een enkel definitief totaal: de cijfers 400, 868 en 1.300 tellen op verschillende momenten pakketten, pakketten-en-versies en versies, en geen enkele bron stelt dat de campagne is afgerond. Ten derde, en het belangrijkste voor de AI-specifieke bewering in dit record, meldt geen enkele geciteerde bron een bevestigd geval waarin een gestolen Anthropic-, Codex-, Cursor-, Gemini- of OpenAI-referentie opnieuw werd gebruikt tegen een provideraccount. Wat gedocumenteerd is, zijn intentie en capaciteit — een expliciete doellijst, en een collector die is gebouwd om die te bereiken — niet een aangetoonde downstream-inbreuk in de systemen van een AI-provider.

Wat daarna veranderde — en wat een hulpverlener moet doen

De meest concrete oplossing in het verslag is een platformwijziging. Elastic adviseert te upgraden naar npm 12 of nieuwer, dat preinstall-hooks standaard blokkeert; de richtlijnen van Microsoft adviseren onafhankelijk npm CLI v12 en de min-release-age-functie, die nieuwe versies lang genoeg uitstelt zodat de community een compromittering kan detecteren voordat deze een build bereikt.

Bovendien overlappen de responsstappen die de bronnen publiceren sterk.

• Elastic: trek alle GitHub-tokens in, inclusief sessietokens op getroffen machines; trek npm-tokens in en genereer ze opnieuw, vooral automatiseringstokens met schrijfrechten en tweefactoromzeiling; doorzoek repositories op ongeautoriseerde commits met het bericht chore: update config from claude@users.noreply.github.com; roteer cloud-, Kubernetes-, Vault-, AI-tooling- en CI/CD-geheimen; schakel tweefactorauthenticatie in voor npm-accounts.

• Microsoft: verwijder npm- en yarn-caches op getroffen endpoints en buildhosts, pin bekende goede versies, controleer lockfiles en artefacten op de gecompromitteerde versies, inclusief transitieve verwijzingen, bouw gedeelde basisimages en golden build runners opnieuw op, en controleer token-scopes, workflowgoedkeuringen en release-provenance, omdat het incident consistent is met misbruik van de CI/CD-pijplijn via OIDC-publicatie.

• CSA Singapore: verwijder getroffen versies uit ontwikkel-, build- en CI/CD-omgevingen, behandel getroffen systemen als gecompromitteerd en bouw ze opnieuw op, roteer inloggegevens, controleer cloud- en broncodeomgevingen op ongeautoriseerde toegang, monitor op gepubliceerde indicatoren en versterk allowlisting, integriteitsverificatie en herkomstcontroles.

• Zscaler: behandel .claude/, .cursor/, .vscode/ en .gemini/ als uitvoerbare code, en stop met het behandelen van SLSA- of Sigstore-provenance als bewijs van veiligheid — combineer het juist met anomaliedetectie op publicatiegedrag, zoals publiceren buiten werktijden, bulkpublicatie van versies en publicisten die voor het eerst publiceren.

Het verslag bevat geen uitkomst van herstelmaatregelen. Geen enkele aangehaalde bron meldt dat de kwaadaardige versies volledig zijn verwijderd, een accountherstel, een arrestatie of een handhavingsactie door een toezichthouder; het advies van CSA is een waarschuwing aan verdedigers, geen bevinding tegen een partij.

Wat het incident verandert, is een classificatie. Een configuratiebestand van een ontwikkelaartool is een uitvoeringspad, en een editor die een map opent, is een uitvoeringsgebeurtenis. En een herkomstattestatie is een verklaring over welke pipeline een package heeft geproduceerd — niet over wie de sleutels in handen had toen die pipeline draaide, en dat is precies het gat waardoor de eerste keyv-release is gevallen.