Aanvallers jagen op AI-sleutels: OpenCode, LiteLLM en Railway geraakt
In vijf dagen werden drie diensten geraakt die met AI-sleutels werken. Wie zo’n sleutel steelt, gebruikt AI op jouw rekening.
Wat er gebeurde
In vijf dagen werden drie diensten geraakt die allemaal hetzelfde in bewaring hebben: de sleutels waarmee software de AI-modellen van OpenAI, Anthropic en Google gebruikt. Wie zo’n sleutel in handen krijgt, gebruikt AI op de rekening van een ander.
Het begon in de nacht van 16 op 17 oktober bij OpenCode, een open-source AI-tool waarmee ontwikkelaars programmeren. Aanvallers braken in op een ouder systeem van OpenCode. Daardoor lekten de sleutels uit van 1,4 procent van de gebruikers van OpenCode Console, de online omgeving waar je je eigen sleutels voor AI-diensten kunt bewaren. Sommigen zagen er in één nacht honderden tot ruim 1.700 dollar aan kosten bij, en bij een deel zette Google de projecten stil. Volgens medeoprichter Dax Raad probeerden de aanvallers het 48 uur lang zonder pauze, terwijl OpenCode dag en nacht eigen AI-agents inzette om ze tegen te houden. Anthropic en Google blokkeerden de gelekte sleutels, OpenAI betaalt de gestolen tegoeden terug.
Op woensdag 21 oktober was het LiteLLM. Dat is een veelgebruikt pakket waarmee software via één aansluiting met meer dan honderd AI-modellen praat; volgens Security.NL wordt het ruim 92 miljoen keer per maand gedownload. Van 13.39 tot 15.23 uur Nederlandse tijd stond er een besmette versie online, 1.107.0, en de officiële Docker-images wezen tot 16.20 uur naar een besmette versie. De aanvaller had de inloggegevens van drie ontwikkelaars van het project. Daarmee zette hij de beveiliging van de code uit, liet hij de officiële bouwstraat een versie bouwen uit een nagemaakte kopie van het project, en wiste hij daarna de bouwgeschiedenis die het onderzoek had kunnen helpen.
Diezelfde woensdag meldde hostingplatform Railway dat een indringer was doorgedrongen tot de systemen waarin klanten de instellingen van hun apps bewaren. Daarin staan vaak sleutels voor AI-diensten, databasewachtwoorden en andere toegangsgegevens. Ze zijn versleuteld opgeslagen, maar van een deel heeft de indringer mogelijk de leesbare inhoud gezien. Railway legde alle nieuwe uitrol stil, vroeg klanten alles te vervangen en waarschuwde de AI-aanbieders, zodat die gelekte sleutels zelf konden intrekken. Railway ziet de inbraak als deel van een reeks aanvallen op platformbedrijven, met AI-aanbieders als uiteindelijk doel.
Vervang meteen alle sleutels en wachtwoorden die je bij Railway hebt opgeslagen.
Het advies van Railway van 21 oktober 2026, samengevat
De achtergrond
Waarom een AI-sleutel geld waard is
Met een gestolen AI-sleutel valt op twee manieren te verdienen. De eerste is doorverkopen: je biedt anderen goedkope toegang tot dure modellen, en de eigenaar van de sleutel betaalt de rekening. Beveiligingsbedrijf Sysdig beschreef dat in 2024 als LLMjacking en rekende voor dat één gekaapt account in het ergste geval meer dan 46.000 dollar per dag kan kosten.
De tweede is distillatie: je stelt een sterk model miljoenen vragen en traint je eigen model op de antwoorden. Zo maken AI-bedrijven ook hun eigen kleinere modellen, maar zonder toestemming is het diefstal van wat een ander heeft gebouwd. Anthropic meldde in februari dat drie Chinese AI-labs zo’n 24.000 valse accounts gebruikten voor meer dan 16 miljoen gesprekken met Claude, via tussenpersonen die toegang doorverkopen. OpenCode noemt de aanval op zijn gebruikers zelf een grootschalige distillatie-aanval, al heeft het daar nog geen bewijs voor laten zien.
Wat de besmette versie van LiteLLM deed
Software bestaat voor een groot deel uit pakketten van anderen. Je collega’s halen ze met één opdracht binnen, en wie geen vaste versie vastlegt, krijgt bij de volgende installatie gewoon de nieuwste. Wie in die bijna twee uur LiteLLM installeerde of bijwerkte, kreeg dus de besmette versie.
Die zette een klein bestandje neer dat Python bij elke start uitvoert, ook in programma’s die LiteLLM nooit gebruiken. Het zocht naar zo’n beetje alles wat een ontwikkelaar op zijn computer heeft: wachtwoorden uit de browser, SSH-sleutels, toegang tot AWS, Azure en Google Cloud, en de sleutels van AI-tools als Claude Code, Cursor en Copilot. Draaide LiteLLM op een server als centrale aansluiting, dan las het ook de database uit waarin de sleutels van alle gekoppelde AI-diensten staan. Daarna zette het een achterdeur open die elk uur nieuwe opdrachten kon ophalen.
Zelfs opruimen is lastig. LiteLLM raadt getroffen gebruikers af om te beginnen met een nieuwe installatie, omdat elke start van Python, ook die van het installatieprogramma, de dief opnieuw laat draaien.
Het is niet de eerste keer
In maart werd LiteLLM ook al besmet; volgens Security.NL zou die aanval wereldwijd 2.500 organisaties hebben geraakt. Daarna nam het project maatregelen die op papier precies goed zijn: uitbrengen vanuit een afgeschermde omgeving, ondertekende pakketten en versies die achteraf niet meer te wijzigen zijn. Deze keer hielp dat niet, omdat de aanvaller met echte inloggegevens werkte en de beveiliging zelf uitzette. Twee dagen eerder, op maandag, waren de rechten om te publiceren bovendien tijdelijk verruimd, zodat twee engineers dagelijks reparaties konden uitbrengen.
Hoe de aanvaller aan die inloggegevens kwam, wordt nog onderzocht. LiteLLM vermoedt dat ze in de eigen logbestanden stonden. Volgens LiteLLM kan Claude Code de GitHub-sleutel van een gebruiker in een antwoord opnemen, en wie al het AI-verkeer laat vastleggen, slaat die sleutels dus mee op. Een interne LiteLLM-installatie stond open op internet, met een onverwacht gebruikersaccount erin.
Onze analyse
Aanvallers zoeken de plekken waar sleutels samenkomen
Kijk naar wat deze drie gemeen hebben. OpenCode Console bewaarde de sleutels van zijn gebruikers, LiteLLM is bij veel bedrijven het knooppunt waar al het AI-verkeer doorheen gaat, en Railway bewaart de instellingen van de apps van zijn klanten. Wie één zo’n plek openbreekt, heeft in één keer de sleutels van veel bedrijven. Dat is lonender dan bedrijven één voor één aanvallen. Onze inschatting: echte sleutels van echte klanten worden alleen maar meer waard, nu AI-aanbieders valse accounts steeds beter herkennen.
Het leerzaamste deel zit in het verhaal van LiteLLM. Na maart deed het project wat elke checklist voorschrijft, en toch bouwde en ondertekende de eigen bouwstraat de besmette versie. Ondertekend betekent alleen dat een pakket uit de officiële bouwstraat komt, niet dat er geen dief in zit. En de sleutels die de deur openden, stonden vermoedelijk in logbestanden van AI-verkeer. Wie AI-gesprekken bewaart om ze later na te kunnen kijken, bewaart ook alles wat er in die gesprekken voorbijkomt, en moet die logbestanden beveiligen als een wachtwoordkluis.
Wat wel had geholpen, is minder spectaculair: wachten. Een bedrijf dat vaste versies vastlegt en nieuwe versies pas na een paar dagen overneemt, was hier buiten schot gebleven. Dat kost niets en past in elke werkwijze.
Wat opvalt
- Logbestanden bleken een sleutelkluis De GitHub-sleutels waarmee de aanval begon, stonden volgens LiteLLM vermoedelijk in de logs van het eigen AI-verkeer.
- Ondertekend is niet hetzelfde als veilig De officiële bouwstraat van LiteLLM bouwde en ondertekende de besmette versie zelf.
- Wachten had geholpen De besmette versie stond nog geen twee uur op PyPI, waar Python-pakketten vandaan komen. Wie nieuwe versies een paar dagen laat liggen, liep geen risico.
- De verdediging liep vast op haar eigen AI De AI-modellen die OpenCode voor het onderzoek gebruikte, weigerden op een gegeven moment mee te werken, omdat de kwaadaardige code hun veiligheidsfilters liet afgaan. Met toegang tot een programma van OpenAI voor verdedigers ging het beter.
Wat het voor jou betekent
Gebruiken jullie AI via een sleutel, dan is die sleutel voor een aanvaller net zoveel waard als geld.
- Een sleutel zit op meer plekken dan je denkt Hij staat in de tools van je collega’s, bij het platform waar hun software draait en mogelijk in de logbestanden van jullie AI-verkeer, en elk pakket in die software kan erbij. Elk van die plekken kan lekken.
- Geef elke tool een eigen sleutel met een limiet Lekt er dan een, dan kost dat hooguit die limiet. En je weet meteen welke tool het was.
- Weet wat je moet vervangen Meldt een leverancier een lek, dan wil je binnen het uur weten welke sleutels daar staan. Dat lukt alleen als iemand dat bijhoudt.
Wat wij ermee kunnen · Ondersteuning
We houden bij waar jullie sleutels zitten
Met Ondersteuning kijken senior developers mee met wat je collega’s met AI bouwen: sleutels die leesbaar in de code staan, kwetsbare pakketten en de diensten waaraan alles gekoppeld is. En we richten een afgeschermde ontwikkelomgeving in, waarin AI-tools alleen bij het project kunnen.
Weet jij welke AI-sleutels jullie gebruiken, en waar ze staan?
Vertel ons welke AI-diensten jullie gebruiken. We denken met je mee en reageren altijd binnen één werkdag.