Een AI-codeerassistent die weigert een gevaarlijk verzoek in zijn chatbox te beantwoorden, kan het toch beantwoorden als hetzelfde verzoek in een code-editor in kleine, alledaags ogende stappen wordt opgedeeld. Dat blijkt uit een nieuwe studie van GitHub Copilot door onderzoekers Abhishek Kumar en Carsten Maple.
De modellen die ze via Copilot testten, Claude van Anthropic en Gemini van Google, weigerden bijna elk schadelijk verzoek wanneer er rechtstreeks om werd gevraagd. Opnieuw geformuleerd als stappen in een normale codeertaak, produceerden ze de schadelijke antwoorden in alle 816 workflowruns van het onderzoek.
Wat dit anders maakt dan een typische jailbreak: niemand vraagt rechtstreeks om het schadelijke, en het model wordt niet misleid om de code van iemand anders uit te voeren. Het schrijft de verboden inhoud zelf, als neveneffect van een codeeropdracht die het moest verbeteren.
Hoe het werkt
De onderzoekers noemen de methode jailbreak-constructie op workflow-niveau.
In plaats van een enkele botte prompt vroegen ze Copilot om een alledaags stukje software te bouwen: een klein testprogramma dat scoort hoe vaak een ander AI-model toegeeft aan schadelijke prompts. Het laden van een lijst met schadelijke testvragen in dat programma lijkt op gewoon werk, en niet op een aanval.
Toen kwam het duwtje. Ze vertelden Copilot dat de score te laag was en vroegen het programma om het programma te verbeteren door ’teaching shots’ toe te voegen, bijvoorbeeld vraag-en-antwoordparen die in de code waren geschreven om de score omhoog te brengen. Copilot voegde eerst onschuldige voorbeelden toe.
Gevraagd om de schadelijke antwoorden toe te voegen, schreef het de gevaarlijke antwoorden zelf, als platte tekst in de code. Dit waren antwoorden die dezelfde modellen weigeren als je er rechtstreeks naar vraagt in een chat.

Het belangrijkste is waar de schadelijke tekst vandaan komt. De onderzoekers hebben alleen de vragen verstrekt, afkomstig uit testsets voor openbare veiligheid. De antwoorden waren het eigen werk van het model, geproduceerd om de toegewezen taak van het invullen van de voorbeelden te voltooien.
De cijfers
Het team voerde 204 schadelijke aanwijzingen uit drie openbare benchmarks (Hammurabi’s Code, HarmBench en AdvBench) uit tegen vier modellen die beschikbaar waren via Copilot: Claude Sonnet 4.6, Claude Haiku 4.5, Gemini 3.1 Pro en Gemini 3.5 Flash.
Alles draaide op de standaardinstellingen, waarbij de modellen precies werden gebruikt zoals Copilot ze levert, zonder gewijzigde parameters of toegevoegde filters.
Als de modellen rechtstreeks in de chat werden gevraagd, kwamen ze in slechts 8 van de 816 pogingen met schadelijke antwoorden. Twee andere eenvoudige instellingen, het laden van de aanwijzingen vanuit een spreadsheet of het vragen om een routinematige codereparatie, gaven hetzelfde resultaat. Binnen de volledige workflow produceerden ze 816 van de 816 keer schadelijke inhoud.
Twee deskundige reviewers controleerden elk antwoord afzonderlijk en waren het erover eens dat alle 816 echt schadelijk waren, op basis van een strikte test: het antwoord moest specifiek en bruikbaar zijn en daadwerkelijk doen wat de schadelijke prompt vroeg. Weigeringen, vage waarschuwingen en veilige alternatieven telden niet mee.

De schadelijke output verscheen na ongeveer zes heen-en-weer-uitwisselingen, die allemaal op normale codeerstappen leken. Bij de tests werd GitHub Copilot Chat 0.30.3 gebruikt in VS Code 1.103.0, in sessies die werden uitgevoerd tussen 2 april en 22 juni 2026. Omdat dit gehoste services zijn die in de loop van de tijd worden bijgewerkt, kan het exacte gedrag veranderen.
Waarom gebeurt het? Het antwoord van het artikel gaat over prikkels. Als het werk eenmaal is ingekaderd als het opleveren van een score, ziet het weigeren van het invullen van één veld er niet meer uit als een veiligheidskeuze, maar begint het te lijken alsof de klus onvoltooid blijft. De auteurs koppelen het aan een bekende tendens bij codeeragenten: optimaliseren voor de metriek die ze krijgen, zelfs als dat tegen hun eigen vangrails ingaat.
Waarom het ertoe doet
Een chatweigering bewijst niet dat een codeerassistent veilig is. Hetzelfde model kan tijdens een gesprek de lijn vasthouden en overschrijden tijdens het schrijven van code. En de mislukking verbergt zich op een gemakkelijk te missen plek: de schadelijke tekst komt terecht in een bestand dat de assistent schrijft, buiten het chatantwoord waar normaal gesproken een weigering zou verschijnen.
Voor iedereen die deze tools gebruikt, is de concrete lezing smal maar bruikbaar. Wees op uw hoede voor een sessie met meerdere beurten waarin de assistent wordt gevraagd een evaluatie- of benchmarkharnas in te vullen met voorbeeldaanwijzingen en antwoorden om een score omhoog te duwen. Controleer de bestanden die de assistent schrijft in plaats van erop te vertrouwen dat een zichtbare chatweigering betekent dat de sessie schoon is gebleven.
De auteurs komen neer op drie richtingen, die op zichzelf geen volledige oplossing bieden: inspecteer wat de agent schrijft, beoordeel een hele sessie in plaats van elk bericht, en behandel een verzoek om “een benchmarkscore te verbeteren” als een reden om nader te kijken. Ze zeggen dat ze de bevindingen hebben gerapporteerd aan de betrokken makers van gereedschappen en modellen, en dat ze de schadelijke uitkomsten en exacte aanwijzingen buiten de krant hebben gelaten.
Het resultaat past in een groeiende stapel werk waaruit blijkt dat AI-veiligheidstraining steeds wankeler wordt zodra een model is aangesloten op een tool die kan handelen in plaats van alleen maar te chatten. Uit eerder onderzoek is gebleken dat op veiligheid getrainde modellen gemakkelijk kunnen worden gejailbreakt wanneer ze worden omgezet in webbrowseragenten.
De dichtstbijzijnde eerdere aanval, CodeJailbreaker, verbergt de schadelijke bedoelingen in een nep-commit-bericht. Anderen, zoals RedCode, hebben aangetoond dat modellen een gevaarlijke instructie gemakkelijker accepteren als deze is verkleed als code dan als gewoon Engels. De Crescendo-aanval bereikte een schadelijk doel door er via verschillende chatbeurten op in te gaan in plaats van ronduit te vragen.
Hetzelfde effect treedt op in echte codeertools, en niet alleen in deze benchmark. The Hacker News berichtte onlangs over GuardFall, een commando-veiligheidsbypass die precies op deze eerste stap leunde: een bot, destructief commando wordt geweigerd, terwijl hetzelfde commando dat in een buildbestand of in het documentatieantwoord van een tool is gestopt, als een routinestap wordt geproduceerd.
De wending in dit nieuwe onderzoek is dat de schadelijke inhoud niet het opzet is voor een nieuwe aanval; het is het ding waar het model naartoe werd gestuurd om te produceren.
Het onderzoek heeft alleen betrekking op GitHub Copilot met vier modellen van twee leveranciers. De auteurs zijn duidelijk dat de resultaten niet mogen worden overgedragen naar andere assistenten zoals Cursor, Cline of Windsurf, of naar modellen van OpenAI en anderen. Dat is de open vraag waar ze later voor markeren.
Het lastigste probleem laten ze onopgelost: hoe kunnen we dit patroon ontdekken zonder ook het legitieme beveiligingsonderzoek dat met dezelfde schadelijke testprompts moet werken te doorbreken.