In het eerste weekend van juni werd het Instagram-account van het Obama-Witte Huis beklad met pro-Iraanse afbeeldingen. Het account van de hoogste onderofficier van de Amerikaanse Space Force ook. Sephora raakte zijn account kwijt. En beveiligingsonderzoeker Jane Wong, die toekeek hoe haar wachtwoord veranderde zonder dat zij iets deed, gevolgd door een hele dag aan reset-pogingen. "Behoorlijk zorgwekkend," noteerde ze, met professioneel understatement.
De aanvallers vonden geen zerodag. Ze phishten geen wachtwoord. Ze braken niet in op een enkele database. Meta bevestigde zelf dat er geen enkel back-endsysteem was aangeraakt.
Ze openden een chat met Meta's AI-supportassistent en vroegen om hulp.
Dat is het. Dat is de hele hack.
Hoe de "exploit" werkte
Er was geen exploit, niet zoals we dat woord meestal bedoelen. De stappen, zoals Krebs on Security ze beschreef, lezen minder als een CVE en meer als een transcript van de klantenservice.
Je verbindt via een VPN met een IP-adres bij de gebruikelijke woonplaats van het doelwit, genoeg om de geautomatiseerde alarmen van Instagram niet te laten afgaan. Je vraagt een wachtwoordreset aan en kiest ervoor om met de AI-supportassistent te chatten. Je zegt tegen de bot dat hij het account moet koppelen aan een nieuw e-mailadres dat van jou is. De bot stuurt netjes een eenmalige code naar dat adres. Je leest de code terug. De bot reset het wachtwoord.
Nieuw e-mailadres op het account. Wachtwoord gereset. Account weg.
En hier zit het stukje dat het bijna elegant maakt, op de manier waarop alleen iets dat echt kapot is elegant kan zijn: de aanvaller had op geen enkel moment het echte e-mailadres van het slachtoffer nodig. TechCrunch bevestigde het. Normaal betekent een account kapen dat je het gekoppelde e-mailadres moet overnemen. De bot sloeg die hele controle over. Hij voegde gewoon een tweede e-mailadres toe toen daarom werd gevraagd, en een tweede adres is alles wat je nodig hebt.
Geen buffer overflow. Geen SQL-injectie. Een gesprek, volledig via de voordeur, met de bot die hem de hele tijd voor je openhield.
Het deel dat je het meeste zorgen zou moeten baren
Op 31 mei was dit geen slimme eenmalige truc meer. Het was een recept.
Pro-Iraanse hackers zetten een video op Telegram die het hele proces stap voor stap liet zien, en de instructies verspreidden zich over meerdere kanalen. Zodra het een recept is, draait de economie om. Een menselijke supportmedewerker die door een virale exploit te grazen is genomen, leert snel. Bij de tweede poging is hij achterdochtig, bij de tiende heeft hij het naar het securityteam geëscaleerd, en het gat sluit zich door pure opgebouwde alertheid.
De bot leert niet. Hij draait exact dezelfde truc voor de tienduizendste beller net zo opgewekt als voor de eerste. Er is niemand thuis om een naar gevoel te krijgen.
Dat is de echte verschuiving. Een gepubliceerde exploit tegen een proces met mensen erachter verzwakt naarmate die mensen wijzer worden. Een gepubliceerde exploit tegen een agent is een permanente, oneindig herhaalbare, volledig automatiseerbare mogelijkheid, totdat iemand een patch uitrolt. De aanvaller schaalt gratis. De verdediger niet.
De wrijving deed het beveiligingswerk
Hier zit het detail dat dit van een Meta-verhaal verandert in een verhaal over hoe we tegenwoordig allemaal software bouwen.
De menselijke support van Instagram is berucht slecht. Een geblokkeerd account terugkrijgen kan weken heen-en-weer met een geautomatiseerd ticketsysteem kosten. Dus deed Meta het voor de hand liggende, redelijke, moderne ding. In maart rolde het de AI-supportassistent uit naar elk account op Facebook en Instagram, en gaf het de macht om wachtwoorden te resetten en kritiek accountbeheer uit te voeren. De slogan op de productpagina: "Solutions, not just suggestions." Oplossingen, niet alleen suggesties.
Lees die slogan nog eens, wetend hoe het weekend verliep. De hele belofte was dat de bot je niet alleen zou adviseren, maar zou handelen. Hij zou ingrijpen en dingen veranderen. Dat is precies de eigenschap die de aanvallers nodig hadden.
Want die wrijving die Meta zo trots wegnam, was geen pure verspilling. Een deel ervan deed beveiligingswerk.
Het pijnlijke, trage, standaard-achterdochtige herstelproces was een drempel, en drempels houden meer tegen dan alleen legitieme gebruikers met haast. Elke irritante verificatiestap, elke vertraging, elke "we komen erop terug," was ook een kostenpost voor een aanvaller. Meta optimaliseerde de drempel weg en noemde het klantbeleving. De aanvallers stuurden een bedankje in de vorm van een beklad overheidsaccount.
Erger nog, ze haalden samen met de wrijving ook de vangrail weg. Gebruikers van wie het account gestolen was, meldden dat er helemaal geen manier was om naar een mens te escaleren. De bot was de voordeur, de achterdeur en de slotenmaker, en hij luisterde naar wie als laatste sprak.
Dit is de valkuil. We blijven wrijving behandelen als puur een UX-defect dat weg moet, en we vergeten dat een flink deel van beveiliging bewuste wrijving is. Als je het pad gladstrijkt voor de legitieme gebruiker, strijk je het glad voor iedereen.
Waarom een agent anders is dan een lek formulier
Je zou kunnen zeggen dat dit gewoon een slechte wachtwoordreset is, en slechte resetflows bestonden al decennia voor AI. Klopt. Maar de agent maakt het categorisch erger.
Klassieke toegangscontrole is een muur van expliciete regels. Je hebt de rechten of niet, en de controle draait elke keer hetzelfde. Je kunt hem auditen, testen, fuzzen.
Het "oordeel" van een agent is geen regel. Het is een kansverdeling over het volgende token, en de agent kan tot medewerking worden overgehaald zoals een junior medewerker van alles kan worden aangepraat door iemand die zeker genoeg klinkt. Het aanvalsoppervlak is niet langer een formulier met velden die je valideert. Het is natuurlijke taal, en natuurlijke taal is grenzeloos. Je kunt geen regex schrijven voor "klinkt als een legitieme gebruiker die een rotdag heeft." Er is geen invoer die je volledig kunt opschonen, want de invoer is de hele ruimte van dingen die een mens kan zeggen.
Elke kritieke actie die je aan een agent koppelt, wordt een doelwit voor social engineering dat nooit leert voorzichtig te zijn. Een wachtwoord resetten. Een e-mailadres wijzigen. Een terugbetaling doen. Toegang verlenen. Elk werkwoord dat de bot kan uitvoeren, is een werkwoord dat een aanvaller kan uitvoeren door erom te vragen.
We blijven bots macht geven en doen dan verbaasd
We doen dit voortdurend. We geven een bot echte macht, verpakken hem in een vriendelijke interface, en doen dan verbaasd als iemand die macht gebruikt zoals hij ontworpen is.
Het is hetzelfde patroon als de bureaucratie van bots: we blijven agenten met echte bevoegdheden toevoegen en gaan ervan uit dat die bevoegdheden alleen worden gebruikt op de manier die wij voor ogen hadden. Meta bedoelde zijn supportbot niet als een herstelorakel voor iedereen met een VPN. Maar bedoeling is geen controle. De bot weet niet waar hij voor was bedoeld. Hij weet alleen wat hij kan doen, en dat doet hij voor wie het hem netjes vraagt.
En de reflex van de sector is, zoals altijd, om je nog een bot te verkopen die de eerste in de gaten houdt. Die wapenwedloop hadden we al behandeld. Een tweede model dat het eerste controleert, lost dit niet op. Het voegt alleen nog iets toe dat tot ja kan worden gepraat.
Wat je echt moet doen
Koppel je een agent aan iets dat accounts, geld of toegang raakt, behandel hem dan als een vijandige client, want dat wordt hij op het moment dat een aanvaller begint te typen.
- Laat de bot de kritieke actie nooit zelf uitvoeren. Onomkeerbare bewerkingen blijven achter een deterministisch systeem met harde controles die de bot wel kan aanvragen maar nooit kan overrulen. De agent mag een ticket aanmaken. Hij mag het wachtwoord niet resetten.
- Houd step-up-authenticatie buiten het gesprek. Een flow waarbij de bot een verificatiecode accepteert die de "gebruiker" aan hem voorleest, is van de grond af kapot. Eenmalige codes zijn bearer tokens. Wie de code heeft, wint, en je hebt de bot net geleerd er in de chat om te vragen.
- Optimaliseer beveiligingswrijving niet per ongeluk weg. Voordat je een trage, irritante flow gladstrijkt, vraag je af wat die traagheid een aanvaller kostte. Sommige drempels zijn dragend.
- Limiteer en log per identiteit, niet per sessie. Elke aanval opende een verse, onschuldig ogende chat. Als je limieten met het gesprek resetten, heb je geen limieten.
- Zet een mens op het kritieke pad voor acties uit de categorie accountherstel. Niet voor alles. Voor de werkwoorden die eindigen met iemand die zijn account kwijt is.
Tot slot
Meta patchte het in het weekend. Woordvoerder Andy Stone zei dat het probleem was opgelost en dat getroffen accounts werden beveiligd. En geen database was gelekt, benadrukten ze graag.
Natuurlijk was er geen database gelekt. Je hoeft de database niet te kraken als de assistent bij de balie je de sleutels overhandigt, elke keer, aan iedereen die het vraagt, en zich nooit één keer afvraagt waarom.
De aanvaller brak niet in.
Hij vroeg het gewoon. En de bot, behulpzaam tot het bittere eind, zei ja.