Een door AI gegenereerde cronjob verwijderde in minder dan tien seconden alle actieve Stripe-abonnementen bij een startup, waardoor de maandelijkse terugkerende omzet (MRR) van het bedrijf kelderde naar $38. Het incident laat zien dat het gevaar in de deployment pipeline zit, en niet in het taalmodel dat de code schreef.

Wat er gebeurde

Vorige week werd het team van BridgeMindAI wakker met een dashboard waarop slechts $38 aan maandelijkse terugkerende omzet (MRR) te zien was. Een AI-model genereerde een enkele regel code die de scheduler automatisch uitvoerde. De regel riep het subscription-cancellation endpoint van Stripe aan voor elk klantrecord. De aanroep was binnen zeven seconden voltooid en veegde het gehele klantenbestand weg.

Het script interpreteerde een lege verwijderingswachtrij onterecht als een signaal om alles te verwijderen. Dat "leeg = alles"-patroon bestaat al sinds de jaren '80 in productiecode, lang voordat generatieve AI bestond.

Waarom het model niet de schuldige is

Mensen gaven het AI-model al snel de schuld omdat het onbetrouwbaar zou zijn. Het vervangen van het model zou de wipe niet hebben voorkomen, omdat de fout in de menselijk geschreven logica zat, en niet in een hallucinatie of bias.

De werkelijke fouten waren architecturaal:

  • Het script sloeg een live Stripe API-key voor productie op die abonnementen kon annuleren.
  • Het werd uitgevoerd zonder enige runtime-toezicht.
  • Er was geen menselijke controlepost tussen de codegeneratie en de uitvoering.

Deze hiaten zorgden ervoor dat een enkele bug binnen enkele seconden een inkomstenstroom kon vernietigen.

De drie veiligheidsvragen voor elke autonome pipeline

  1. Welke operaties zijn onomkeerbaar? Het annuleren van een abonnement, het verwijderen van een record of het verlenen van een terugbetaling kan niet ongedaan worden gemaakt. Deze hebben meer bescherming nodig dan read-only queries.

  2. Welke inloggegevens heeft de agent? Het toekennen van een master Stripe-key aan een autonoom proces geeft onbeperkte macht. Pas het least-privilege-principe toe: gebruik scoped keys die alleen de vereiste taak kunnen uitvoeren.

  3. Waar is de menselijke controlepost? Alleen code review is niet voldoende. Voeg een controlepunt in na de codegeneratie en vóór elke destructieve actie.

Praktische veiligheidsmaatregelen

  • Dry-run gate – Log de beoogde doelen voordat er een delete- of cancel-aanroep wordt gedaan. Als de lijst leeg is of ongebruikelijk groot, breek dan af en waarschuw een mens.
  • Scoped credentials – Gebruik standaard read-only keys. Wanneer een taak een abonnement moet annuleren, maak dan een beperkte key aan die per keer slechts op één klant-ID kan inwerken.
  • Human-in-the-loop prompt – Stuur een kort bericht naar een kanaal (bijv. Slack) zoals: "Ik ga nu 47 abonnementen annuleren. Bevestigen?". De kosten zijn verwaarloosbaar; de veiligheidswinst is enorm.

Deze maatregelen werken ongeacht welk model de code schrijft, omdat ze de uitvoeringsomgeving beschermen en niet de generator.

Een productie-checklist voor autonome agents

  • Classificeer elke operatie als lezen, omkeerbaar of onomkeerbaar.
  • Vereis expliciete menselijke goedkeuring voor alle onomkeerbare acties.
  • Beperk inloggegevens tot de minimale permissies die nodig zijn voor de taak.
  • Stel limieten in op de omvang van loops die records verwijderen of wijzigen.
  • Draai agents eerst in een sandbox die de productiedata spiegelt; bevestig de uitkomst voordat je live data aanraakt.
  • Log het plan van de agent in begrijpelijke taal voordat deze wordt uitgevoerd, zodat een reviewer de bedoeling in één oogopslag kan begrijpen.

Door deze checklist te volgen, verander je een "run-once-and-forget"-script in een gecontroleerde workflow die geaudit en gestopt kan worden als er iets mis lijkt te gaan.

De les is duidelijk: vertrouw het proces, niet het model.