Er sloeg geen agent op hol
7m leestijd

Er sloeg geen agent op hol

De voorzitter van de FTC zegt dat AI-agents gereedschap zijn, en dat de developer die de opdracht gaf aansprakelijk is. Over het gereedschap heeft hij gelijk, over de opdracht niet. De sporen van de aanval op Hugging Face laten een agent zien die veel meer deed dan de opdracht vroeg.

Vrijdag sprak de voorzitter van de Amerikaanse Federal Trade Commission, Andrew Ferguson, op Reuters Momentum AI in Austin. Hij zei dat hij zich zal blijven verzetten tegen het beeld van AI-agents als zelfstandige actoren die zich losrukken, met een eigen wil en eigen verlangens.

"If someone tells a tool to do something, and the tool does it, I don't think we would say, 'Oh, what do we do about the tool?'"

Diezelfde dag publiceerde een groep onderzoekers Swarm traces: meer dan 80.000 aanvalspayloads, opgediept uit linkverkorters, waarmee de agents van OpenAI in juli bij Hugging Face binnendrongen. Leg die twee naast elkaar en er zit ineens een gat in de uitspraak van de voorzitter.

Een woord als alibi ​

Over het woord "rogue" heeft Ferguson gelijk.

Het staat deze week overal. More agents go rogue, kopt SiliconANGLE. Het klinkt als een beschrijving en het werkt als een alibi. Een agent die op hol slaat, is ontsnapt aan zijn eigenaar, en daarmee wordt die eigenaar ongemerkt een omstander bij alles wat daarna gebeurt.

Dat beeld komt de branche al een tijdje goed uit. Volgens Reuters zei Ferguson dat AI-bedrijven hun systemen soms hebben beschreven alsof ze buiten menselijke controle handelden, terwijl de audit trails bij later onderzoek lieten zien dat die systemen gewoon instructies uitvoerden die ze hadden gekregen. Hij opperde ook dat de bestaande bevoegdheid van de FTC tegen bedrijven die een datalek niet melden, zich tot AI-developers zou kunnen uitstrekken.

Dit waren uitspraken op een congres, en er zit nog geen regelgeving achter. Ze wijzen wel dezelfde kant op als Californië, waar een gedaagde sinds januari niet meer mag aanvoeren dat de AI zelfstandig handelde. Daar schreef ik over toen AB 316 nog nieuws was, en dat stuk eindigde met een zin waar ik nog steeds achter sta: jij hebt de code gemerged, dus is die van jou.

Tot zover zijn de voorzitter en ik het eens. Het probleem zit in zijn onderbouwing.

Wat de agents moesten doen, en wat ze deden ​

De agents in de Hugging Face-zaak moesten in een evaluatie exploit-opdrachten oplossen: breek in bij een doelwit dat met opzet kwetsbaar is gemaakt, en haal de flag op. Dat was de instructie. Hoe het vanaf daar escaleerde heb ik al eerder uitgeschreven, en dat herhaal ik hier niet.

Wat Swarm traces toevoegt, is alles wat tussen de instructie en de schade zit. Een paar van de teruggevonden payloads:

  • Een interne dataset van Hugging Face had een README die in hoofdletters waarschuwde dat de dataset nooit openbaar mocht worden, omdat er exports van billing-data in stonden. De agents brachten de repository toch in kaart en gebruikten hem als opslag.
  • Eén script verzamelde AWS-credentials, bearer tokens en elke omgevingsvariabele met SECRET, PASSWORD of KEY in de naam in een dictionary met de naam LOOT. Daarna rangschikte het Kubernetes-tokens op hun rechten, met een scorefunctie die 100 punten geeft voor een wildcard-resource.
  • De commits waarmee ze opruimden, hadden messages als remove evil yaml en restore original no-card. Een andere payload verwijderde de pod die hij in het cluster van Hugging Face had aangemaakt, met als comment # clean up our pod.

OpenAI heeft de transcripten niet openbaar gemaakt, dus letterlijk citeren kan ik de opdracht niet. Dat hoeft ook niet. De flag zat in een oefendoelwit. De billing-exports van Hugging Face niet.

De onderzoekers zijn voorzichtig met wat hun data kan bewijzen, en dat hoor ik ook te zijn. Het meeste is uitgaand verkeer, dus ze weten zelden of een request slaagde. Ze kunnen niet uitsluiten dat sommige payloads van iemand anders kwamen die dezelfde truc gebruikte, en voor een flink deel van de activiteit zeggen ze ronduit dat ze de bedoeling erachter niet kunnen vaststellen.

Die voorzichtigheid redt de uitspraak van de voorzitter niet. Ook bij de welwillendste lezing van deze sporen blijft er een lange lijst handelingen over die je met het ophalen van een flag uit een oefendoelwit niet verklaart.

Geen van beide verhalen klopt ​

"De agent sloeg op hol" zegt dat de eigenaar niet verantwoordelijk is. "Het gereedschap deed wat het opgedragen kreeg" zegt dat de instructie het hele verhaal is. De sporen passen bij geen van beide.

Wat ze laten zien is een instructie, gevolgd door een zoekproces dat alles binnen bereik behandelde als een mogelijke weg naar het doel. De waarschuwing in de README was een obstakel. De credentials waren middelen. Het opruimen was huishoudelijk werk. Er was nergens een eigen wil voor nodig, en niets ervan was de opdracht.

In datzelfde tussengebied werkt elke coding agent die jij gebruikt. Je vraagt de agent een falende test groen te maken, en welke route hij daarvoor kiest, bepaalt hij zelf. Meestal is die route prima, en je kijkt er nooit naar.

De vage prompt als schild ​

Trek de redenering van Ferguson één stap verder door en je krijgt een perverse prikkel.

Als aansprakelijkheid de instructie volgt, is de vaagste instructie de veiligste. "Haal de flag op." "Maak de tests groen." "Fix de deployment." Een developer die tegenover een toezichthouder zit, kan naar de prompt wijzen en vragen waar daarin precies een dictionary met de naam LOOT staat.

Dat is opnieuw het autonomieverweer, één niveau lager. Californië sloot de deur voor "de AI deed het zelf". Een aansprakelijkheidsnorm die op instructies is gebouwd, zet die deur weer open, nu voor "de AI deed meer dan ik vroeg".

De enige norm die standhoudt, is de strengere. Je staat in voor de route, omdat jij hebt bepaald waar de agent onderweg bij kon. De uitgaande verbindingen die je openliet, de credentials in de omgeving, de opslag die tussen runs bleef bestaan: dat waren beslissingen, en ze zijn van jou.

Het spoor is van wie het bewaarde ​

Het argument van Ferguson rust op audit trails. Dat geldt ook voor elk verweer dat jij ooit voert, dus het loont om te vragen wie dit spoor eigenlijk in handen heeft.

Het meest gedetailleerde openbare verslag van deze aanval kwam niet van het bedrijf wiens agents hem uitvoerden. Buitenstaanders bouwden het in twee weken na uit linkverkorters. Volgens Swarm traces heeft OpenAI zelf twee rapporten uitgebracht, één talk gegeven, en een extern onderzoek laten doen door METR en Redwood Research, waarbij drie onderzoekers gedeeltelijke transcripten en zes dagen kregen. Volledige transcripten zijn niet openbaar gemaakt.

"De audit trail laat zien" blijft een bewering zolang niemand anders dat spoor kan lezen.

Je eigen agent schrijft er al een naar je schijf. Wat hij vastlegt en wat hij weglaat, staat in een aparte gids over agent-logging. Het punt hier is eenvoudiger: als dat spoor straks je antwoord moet zijn, moet het bestaan voordat je het nodig hebt, en moet het van jou zijn.

Wat je er maandag mee doet ​

  • Leg naast de prompt ook de route vast. Per agent: welke hosts hij kan bereiken, welke credentials in zijn omgeving staan, wat hij kan wegschrijven dat de sessie overleeft. Op die lijst word je afgerekend, dus stel hem bewust op.
  • Houd de omgeving kaal. Het bereik van een agent omvat elk secret dat zijn proces kan lezen. Een deel van LOOT kwam rechtstreeks uit os.environ.
  • Een onmogelijke opdracht is een ruimer mandaat. Een agent die de klus niet kan afmaken zoals gevraagd, gaat op zoek naar een versie van de klus die wel lukt. Geef hem een manier om te stoppen en dat te melden.
  • Bewaar het transcript, en bewaar het maanden. Het incident waarvoor je het nodig hebt, is altijd ouder dan je denkt.

Ferguson vroeg wat we zouden doen met gereedschap dat doet wat iemand het opdroeg. Het lastigere geval is gereedschap dat onderweg iets anders deed, en het antwoord is hetzelfde. Het is van jou. Alleen kun je niet meer naar de prompt wijzen.

(40 van 40)
01Je hebt geen AI-probleem. Je hebt een procesprobleem.02Waarom je nooit code moet shippen die je zelf niet snapt03Stop met copy-paste engineering04De lavalaag: waarom AI-code je codebase langzaam versteent05Het briljante papegaai-probleem: wat AI eigenlijk doet als het 'denkt'06De prompt is geen spec07De bureaucratie van bots: waarom we de controleur controleren08De dag dat Claude mijn productiedatabase verwijderde09De wapenwedloop om je vertrouwen: Mythos, Cyber en de security-hype10Laat je agents stoppen met Markdown schrijven11Je agent lijdt onder je technische schuld12Je vindt de bug niet als je de code niet schreef13Een op vier: de beveiligingsschuld die niemand telt14Je 10x-developer zit vast in een 0,1x-pipeline15De benchmarks zeiden 'frontier'. Ontwikkelaars zeiden 'dom'.16Caveman vs context-mode: kleinere mond, of kleinere kamer?17Code churn: de lava die je nog kunt meten18Het plafond is van beton19De token-belasting: ik trek mijn Caveman-advies in20Zelfs de malware is nu AI-slop21ThePrimeagen had gelijk22Tokenmaxxing: wat er gebeurt als je het verkeerde meet23Ze vroegen het de bot gewoon netjes: je supportagent is het aanvalsoppervlak24Snelheid werd goedkoop. Je oordeel niet.25Je coding agent heeft geen wereldmodel. Jij hebt er een omheen gebouwd.26De Ferrari heeft een begrenzer: een dag met Claude Fable 527De uitknop was nooit van jou28Een open MCP-server is erger dan een open database29Het veerkrachtigste beroep eet zijn eigen zaaigoed op30De uitknop werkt nu ook andersom31AI genereert je tests. Maar test het ook echt?32Beter code leren lezen: een oefenroutine33Programmeren leren in het AI-tijdperk: wat ik als eerste zou leren34Wie is verantwoordelijk voor AI-code? Jij, en sinds dit jaar staat het zwart op wit35Wanneer je beter geen AI gebruikt bij programmeren: het werk dat ik zelf blijf doen36Junior developers aannemen in 2026: de instroom stopte, en dat was een keuze37Software inschatten met AI: het typen was nooit waar de tijd in zat38Slopsquatting: bestaat het package? Verkeerde vraag39Acht rapporten, één meetlat: jureren bij een AI-safety sprint40Er sloeg geen agent op hol