Worm CHAINDROP kaapt npm via AI-codeeragents
3 mins read

Worm CHAINDROP kaapt npm via AI-codeeragents

Een zelfverspreidende worm heeft op 4 augustus honderden npm-pakketten besmet en daarbij een route gebruikt die tot nu toe weinig aandacht kreeg: de configuratiebestanden van AI-codeeragents. Beveiligingsbedrijf Semgrep telde ruim 400 getroffen pakketten en doopte de aanval CHAINDROP. Microsoft publiceerde dezelfde dag een analyse onder dezelfde naam.

Wat er op 4 augustus gebeurde

Cycode reconstrueerde de tijdlijn tot op de minuut. Om 09:02 UTC werd een kwaadaardige commit naar de keyv-repository gepusht, twee minuten later stonden de persistentiehooks erin. Om 09:35 verscheen de eerste vergiftigde versie op npm. Tussen 10:09 en 10:14 volgde de cacheable-familie, om 10:28 het pakket ecto. Datadog Security Labs bevestigt keyv@6.0.0, ecto@5.0.1 en negen cacheable-pakketten als eerste besmette releases, en merkt op dat sommige van deze bibliotheken meer dan 150 miljoen downloads per week hebben. Semgrep noemt onder de getroffen scopes ook jaredwray, servicetitan, ornikar, qlik en nebula.js.

De verspreiding liep via twee kanalen, schrijft Datadog: gestolen npm-tokens waarmee de worm payloads in schrijfbare pakketten injecteerde en die opnieuw publiceerde met een opgehoogd versienummer, plus GitHub-toegang waarmee configuratiebestanden werden geplant.

Twee collega's bekijken samen code op een monitor op kantoor

Waarom AI-agents het aanvalspad zijn

Het opvallendste zit in de uitvoering. Er hoefde geen npm install te draaien. De worm schreef volgens Cycode een .claude/settings.json met een SessionStart-hook die .vscode/setup.mjs aanroept, en een .vscode/tasks.json die op zijn beurt .claude/setup.mjs start. Die kruislingse bedrading betekent dat opruimen van één map de andere intact laat. Wie de gekloonde repository opent in Visual Studio Code of er een Claude Code-sessie start, voert de loader al uit.

De loader haalt vervolgens Bun v1.3.13 op van officiële GitHub-release-URL’s, zonder cryptografische verificatie, aldus Datadog. Cycode meldt dat de malware daarna gericht zoekt naar sleutels van Claude, OpenAI, Codex, Cursor en Gemini, naast de gebruikelijke secrets. Dat is precies het soort tegoed waarmee een aanvaller verder kan bouwen. Eerder dit jaar lieten onderzoekers van AISI al zien dat AI-agents open source-projecten kunnen saboteren, en OpenAI bouwde GPT-Red om zijn eigen systemen aan te vallen. CHAINDROP laat zien dat het niet bij onderzoek blijft.

Wat teams nu kunnen controleren

Scanners kijken doorgaans naar package.json, lockfiles en installatiescripts. Agentconfiguratie valt daarbuiten, en dat was hier het hele punt. Controleer dus of er in repositories een .claude/– of .vscode/-map staat die je niet zelf hebt aangemaakt, en of daar setup-scripts in zitten. Roteer npm-tokens en API-sleutels van je codeertools als je in dat tijdvak pakketten uit de genoemde scopes hebt bijgewerkt. Pin versies in plaats van te vertrouwen op semver-ranges.

Wat betekent dit

De aanvalsketen verschuift van het pakket naar de werkomgeving eromheen. Nu Agent Plugins een gedeelde standaard worden en tools als Muse Code hele codebases doorlopen, groeit het aantal bestanden dat automatisch code mag uitvoeren zonder dat iemand erop klikt. Dat vraagt om dezelfde review-discipline als productiecode. Een agentconfiguratie in een pull request verdient voortaan een tweede paar ogen.