Slopsquatting

Wat is slopsquatting?

Slopsquatting is een supply chain-aanval in drie stappen. Een taalmodel schrijft code die een package installeert dat niet bestaat. Die verzonnen naam is niet willekeurig, dus bij een gelijkaardige vraag komt precies dezelfde valse naam terug. Een aanvaller registreert die naam op npm of PyPI, stopt er iets kwaadaardigs in, en wacht tot de volgende ontwikkelaar of coding agent het installatiecommando uitvoert.

Aan de naam zelf zie je niets. Hij leest als het package dat je zou verwachten, en net daarom heeft het model hem geproduceerd: react-codeshift klinkt als het codemod-gereedschap voor React, alleen heeft nooit iemand zoiets onder die naam onderhouden.

Het woord komt uit een gesprek in april 2025 tussen Andrew Nesbitt van het package-dataproject Ecosyste.ms en Seth Larson, security developer in residence bij de Python Software Foundation, over wat de 404-logs van een registry blootleggen: welke onbestaande packages ontwikkelaars in de praktijk proberen te installeren. Larson stelde de naam voor en hij bleef plakken.

Wat het onderzoek echt gemeten heeft

Het cijfer dat iedereen citeert komt uit een studie van een team van de University of Texas at San Antonio, de University of Oklahoma en Virginia Tech, voorgesteld op het USENIX Security-symposium van 2025. Ze lieten 16 modellen los, genereerden 576.000 codevoorbeelden in Python en JavaScript, en toetsten elke packageverwijzing daarin aan de registers van PyPI en npm.

Wat ze gemeten hebben, is het aandeel packageverwijzingen dat naar niets wees: gemiddeld minstens 5,2 procent bij de commerciële modellen en 21,7 procent bij de open source-modellen, verspreid over 205.474 verschillende verzonnen namen. Dat is een percentage per packageverwijzing in gegenereerde code, geen percentage per project, en het zegt niets over hoe vaak een aanval lukt.

Hun tweede proef weegt zwaarder. Ze namen 500 prompts die eerder een verzonnen naam hadden opgeleverd en lieten elke prompt nog tien keer draaien. 43 procent van de verzonnen packages kwam in alle tien de runs terug, en 39 procent kwam nooit meer terug.

Een eenmalige hallucinatie is voor een aanvaller waardeloos. Een naam die telkens terugkomt, is een doelwit dat een aanvaller een keer registreert en dan laat liggen.

Nieuwere modellen verzinnen minder namen, maar ze zijn er niet mee gestopt. Een herhaling van de methode in 2026, op vijf frontier-modellen van tussen oktober 2025 en maart 2026, kwam uit op percentages tussen 4,62 en 6,10 procent: het verschil tussen het beste en het slechtste model is zo goed als weg, en de bodem ligt niet op nul.

Slopsquatting tegenover typosquatting

Beide aanvallen registreren een naam en wachten af. Het verschil zit in wiens fout ze afwachten.

Typosquatting wacht op een menselijke hand. Iemand wil requests typen en typt reqeusts. Er bestaat een juiste spelling om tegen af te toetsen: de echte naam bestaat, je hebt hem gewoon gemist.

Slopsquatting wacht tot een machine een naam verzint die nooit echt geweest is, dus er is geen juiste spelling om op terug te vallen. In de USENIX-data zat maar 13,4 procent van de verzonnen namen op een of twee tekens van een bestaand package, en bijna de helft zat er zes tekens of meer vanaf. Een controle die zoekt naar namen die verdacht dicht bij populaire packages liggen, kijkt er straal langs.

Twee verzonnen namen die echt geregistreerd raakten

In december 2023 registreerde een onderzoeker van Lasso Security huggingface-cli op PyPI als een leeg, onschadelijk package, nadat hem opgevallen was dat modellen die naam bleven aanraden. Het echte gereedschap installeert onder een andere naam. Het lege package haalde in drie maanden meer dan 15.000 downloads, en in de README van Alibaba's GraphTranslator-repository stond de instructie om het te installeren.

Het tweede geval toont wat er verandert wanneer een agent het typewerk doet. In oktober 2025 kreeg een publieke verzameling agent skills twee instructies mee die een agent npx react-codeshift lieten draaien, een kruising van jscodeshift en react-codemod. Die twee bestaan allebei. De kruising niet. Toen Charlie Eriksen van Aikido Security de naam in december 2025 zelf claimde om hem uit verkeerde handen te houden, stond hij al in meer dan 237 repositories, verspreid doordat mensen de skill-bestanden kopieerden en aanpasten, en trok hij nog altijd een tot vier downloads per dag van agents die de instructie letterlijk uitvoerden.

Waar sneuvelt zo'n naam in een normale werking? Niet bij de code review, want er zat niemand een diff te lezen. npx vraagt wel bevestiging voor het iets nieuws binnenhaalt, en mensen antwoordden ja. Hij sneuvelt een stap eerder: zodra een package dat nog niet in je lockfile staat in een installatiecommando opduikt, stopt de installatie en leest iemand die naam.

Hoe hou je een verzonnen naam uit je build?

Deze controles staan in de volgorde waarin ze helpen.

  1. Een lockfile en installaties die niet improviseren. npm ci heeft een bestaande package-lock.json nodig, schrijft er nooit naar terug, en stopt met een foutmelding zodra de lockfile en package.json niet overeenkomen. Met --require-hashes van pip moet elke requirement, ook elke onderliggende, vastliggen op een versie met een hash. Een package dat niemand bewust toevoegde, kan dan niet stilletjes binnenkomen.

  2. Een allowlist of een interne mirror. Laat je build naar je eigen proxy wijzen in plaats van naar de publieke registry, zodat een nieuw package binnenkomt via een aanvraag en niet via een download.

  3. Een identiteitscheck voor het package in de build belandt. Hoe oud is het account achter de naam, hoeveel releases zijn er geweest, verwijst de repository die het opgeeft ook echt terug. Drie weken oud, één release en geen geschiedenis is de vorm van een slopsquat.

  4. Menselijke review van nieuwe dependencies, apart van de rest. Een diff nalezen en een dependency beoordelen zijn twee verschillende opdrachten. Een diff van 900 regels wordt gescand. Een pull request die zegt dat er één package bijkomt dat je nog nooit gebruikt hebt, is een beslissing van dertig seconden, en het is de enige controle die een naam vangt die nog geen scanner gezien heeft.

Waar moet je op letten bij slopsquatting

Een agent haalt de pauze weg. Een ontwikkelaar die tegen een installatiefout aanloopt, gaat kijken en zoekt die rare naam op. Een agent die in één beweging installeert en uitvoert, stopt daar niet. En de bevestigingsvraag die je zou moeten redden, werkt niet meer zodra ze vijftig keer per dag verschijnt: het eenenvijftigste antwoord is ja.

Verzonnen namen verspreiden zich door kopieerwerk. Een foute installatieregel in een README of een skill-bestand wordt overgenomen, en vanaf dan herhalen mensen hem in plaats van het model. Zo raakte één naam in 237 repositories.

De maatregel is niet dat je stopt met AI-geschreven code. Ze is dat er geen enkele nieuwe dependency in het project komt zonder dat iemand ernaar gekeken heeft. Die regel was al zinvol voor modellen code schreven, en ze vraagt geen securitybudget: een lockfile in de repository, en een met naam genoemde persoon die de dependency-wijzigingen in een pull request nakijkt.

Laatst Bijgewerkt: September 4, 2026 Terug naar Woordenboek
Trefwoorden
slopsquatting package hallucination typosquatting hallucinatie coding agent vibe coding prompt injection agent sandbox least privilege software supply chain security ai