Twee sloten op je voordeur voelen veiliger dan één slot. Tenzij ze allebei met dezelfde sleutel opengaan. Dan heb je geen tweede slot, je hebt hetzelfde slot dat je twee keer hebt betaald.
Dat is precies wat er gebeurt als je een AI de output van een andere AI laat controleren. De belofte klinkt geruststellend: de coding agent schrijft de code, een tweede AI reviewt hem op fouten en beveiligingsgaten, en jij hebt er een controlelaag bij. “Laat de AI het checken.” Voor een klein team zonder eigen securityspecialist voelt dat als een uitkomst.
Maar een tweede taalmodel dat op exact dezelfde manier te misleiden is als het eerste, is geen onafhankelijke controle. Het is dezelfde blinde vlek, twee keer. En de afgelopen weken hebben beveiligingsonderzoekers dat griezelig concreet gemaakt.
Een controle is pas een controle als hij onafhankelijk kan falen van wat hij controleert. Twee AI-lagen die allebei taalmodellen zijn, allebei externe tekst binnenhalen en allebei gevoelig zijn voor promptinjectie, delen één zwakte. Ze tellen niet als twee oordelen, ze tellen als één oordeel dat je twee keer uitvoert. Onafhankelijkheid, niet intelligentie, maakt een review een review.
Dezelfde deur, twee keer
Begin juli liet het Amerikaanse AI Now Institute met een proof-of-concept zien dat je een codeeragent tijdens een beveiligingsreview zelf een kwaadaardig programma op je host laat uitvoeren, zonder dat er nog om toestemming wordt gevraagd. De onderzoekers verstopten de aanval in een gewone open-source bibliotheek: een README met de onschuldig ogende instructie om eerst een controlescript te draaien, en een script dat naar bekende securitytools verwees maar in werkelijkheid een payload startte.
De gebruiker hoeft maar één ding te vragen: doe een security-review op deze map. De agent leest de README, concludeert dat het script bij de taak hoort en voert het uit. De tool die je juist op onbekende, externe code richt, pikt daar de aanval uit op en draait hem met jouw rechten.
Het venijn zit in wat dit structureel maakt. Dezelfde payload werkte ongewijzigd op Claude Sonnet 4.6, Sonnet 5, Opus 4.8 en GPT-5.5. Dit is geen fout in één versie die je met een update dichttimmert. Promptinjectie is geen defect van de coder, het is een eigenschap van elk taalmodel dat tekst van buiten binnenhaalt en niet betrouwbaar onderscheidt tussen “dit is data om naar te kijken” en “dit is een opdracht om uit te voeren”. En je reviewer is óók zo’n taalmodel, dat óók tekst van buiten binnenhaalt: dezelfde repository, dezelfde README, dezelfde regels. Een tweede AI met dezelfde architectuur is dus geen tweede oordeel. Het is de eerste blinde vlek, verdubbeld.
Dat past in een grotere verschuiving: het aanvalspad is verhuisd van je eigen code naar het gereedschap dat je vertrouwt en automatisch binnenhaalt. De review-agent is intussen onderdeel van dat gereedschap.
De blinde vlek zit in wat de laag niet ziet
Onafhankelijkheid gaat niet over “een ander model”, maar over “een andere manier van kijken”. Een aanval die onderzoekers Ghostcommit noemen laat dat scherp zien. De kwaadaardige instructie zit hier niet in de code, maar als leesbare tekst verstopt in een PNG-afbeelding die tekstgebaseerde reviewtools nooit openen. CodeRabbit sluit afbeeldingen standaard uit van de review; Cursor Bugbot gaf niets terug. De payload leest later het .env-bestand uit en schrijft je API-sleutels en wachtwoorden als een reeks getallen weg in een publieke commit.
De onderzoekers van de ASSET Research Group aan de University of Missouri-Kansas City vonden iets dat elke toolkeuze raakt: over tien testruns woog de gebruikte tool zwaarder dan het onderliggende model. Claude Code weigerde de aanval bij elke test en benoemde waarom; Cursor en Antigravity lekten de inhoud van .env onder meerdere modellen. Een duurder of slimmer model koopt je dus geen onafhankelijkheid. De vraag is niet welk model eronder zit, maar wat de laag wel en niet inspecteert.
En de reviewtool is niet eens per definitie een neutrale partij. China’s nationale kwetsbaarhedendatabase waarschuwde onlangs officieel dat Claude Code locatie- en identiteitsgegevens ongevraagd naar externe servers stuurde in een reeks versies. Of je die specifieke melding nu geopolitiek zwaar weegt of niet, het punt eronder blijft staan: “een andere AI” is niet automatisch een onafhankelijke, belangeloze controleur.
Het vangnet dat je aanneemt, hangt er vaak niet
Hier wordt de schijnzekerheid duur. Toen dezelfde onderzoekers keken hoe vaak er in de praktijk nog iemand meekijkt, bleek dat van bijna 6.500 samengevoegde pull requests in de 300 actiefste publieke repositories 73 procent de hoofdtak in ging zonder enige inhoudelijke menselijke of bot-review. “Laat de AI het checken” wordt in de praktijk vaak “niemand checkt het”.
En die AI-reviewer is geen passieve toeschouwer. Het is een bevoorrecht proces dat commando’s draait met jouw rechten, een machine-identiteit die vaak op de geleende inlog van een medewerker leunt en geprivilegieerde toegang heeft tot je host, je sleutels en je systemen. Zelfs de laatste menselijke rem is niet zeker: bij GhostApproval toonde het goedkeuringsvenster een onschuldige bestandsnaam terwijl de agent een SSH-sleutel buiten je project wegschreef. Je klikt “Ja” op iets anders dan wat er gebeurt.
Dat is het echte gevaar van een schijnbare controlelaag: hij is duurder dan geen controle, omdat je stopt met kijken. Wie gelooft dat de tweede AI het wel vangt, ontspant precies op de plek waar dat het minst kan.
Om eerlijk te zijn: twee lagen zijn soms beter dan één
Het sterkste tegenargument verdient zijn beste vorm. Gelaagde verdediging is een beproefd principe: je stapelt controles zodat wat de ene mist, de andere pakt. En een AI-reviewer vangt echt fouten die een moe mens om half zes over het hoofd ziet. Cursor beschrijft Bugbot als een verplichte controle vóór het samenvoegen voor duizenden teams, waarbij naar eigen zeggen ruim 70 procent van de meldingen wordt opgelost voordat de code de hoofdtak haalt. En Claude Code weigerde Ghostcommit wél. Dus soms werkt het. Dat is eerlijk.
Alleen: gelaagde verdediging telt alleen als de lagen onafhankelijk falen. Twee lagen met een gecorreleerde zwakte, allebei taalmodellen, allebei gevoelig voor dezelfde promptinjectie, allebei blind voor wat er in een binair bestand staat, zijn geen twee lagen. Ze zijn één laag met een dubbele factuur. Dat Claude Code de ene aanval weigerde maar de andere uitvoerde, bewijst mijn punt eerder dan dat het het weerlegt: de bescherming is niet onafhankelijk en niet voorspelbaar, ze wisselt per tool en per aanval.
Een AI-reviewer is een prima extra paar ogen. Hij is alleen geen controlelaag. Het verschil zit in wat een echte controle moet kunnen: iets zien wat de gecontroleerde principieel niet ziet. De multimodale verdediger die de Ghostcommit-onderzoekers er zelf bij bouwden, een aparte laag die de plaatjes wél doorleest, stopte 79 van de 80 onbekende aanvallen zonder één vals alarm bij dertig legitieme pull requests. Die telt wél als tweede laag, juist omdat hij anders kijkt.
Onafhankelijkheid, niet intelligentie
Terug naar de twee sloten. Het probleem was nooit dat het tweede slot te goedkoop was of te dom. Het probleem was de gedeelde sleutel. Een tweede AI die je code beoordeelt met hetzelfde soort brein en dezelfde blinde vlekken als de AI die de code schreef, is dat gedeelde slot.
Behandel de AI-reviewer dus als wat hij is: een snelle, waardevolle extra bril, geen onafhankelijke controle. Zet er iets naast dat principieel anders kijkt. Voor alles wat je secrets of je productieomgeving raakt, is dat een mens op de vertrouwensgrens of een tool-laag die buiten het model om werkt en de binaire invoer wél inspecteert. Draai onbekende code in een wegwerp-sandbox zonder je productie-sleutels binnen handbereik. En wees het meest wantrouwig precies op het moment dat de review “schoon” terugkomt, want dat is wanneer een aanvaller wilde dat je zou ontspannen.
Twee keer dezelfde blinde vlek is geen tweede paar ogen. Het is een grotere blinde vlek, met meer zelfvertrouwen.
Veelgestelde vragen
AI-agents met een echte controle
Ik denk mee, ontwerp en bouw je AI-agents end-to-end, met een onafhankelijke controlelaag eromheen in plaats van een model dat zichzelf beoordeelt. Van eerste opzet tot een opstelling die je in productie durft te vertrouwen.
Dit artikel is geproduceerd samen met het Agent Team. Meer over de redactie.
