3 Monate in 9 Sekunden

https://www.tomshardware.com/tech-industry/artificial-intelligence/claude-powered-ai-coding-agent-deletes-entire-company-database-in-9-seconds-backups-zapped-after-cursor-tool-powered-by-anthropics-claude-goes-rogue

Railway ist ein Cloud-Anbieter. In etwa so wie AWS, aber stark vereinfacht. Railway steht im Ruf, „freundlicher“ zu sein als AWS, es will ein einfacheres Interface anbieten. Es ist bei Startups und Entwicklern, die schnell prototypen wollen, sehr beliebt. Railway hat ein extrem direktes Deployment, man verbindet einfach nur die GitHub-Repo und es kümmert sich automatisch um Server, Datenbanken, Umgebungsvariablen und SSL-Zertifikate. Allerdings scheint Railway Sicherheit und Isolation zugunsten von Einfachheit zu opfern. Außerdem bewirbt Railway offensiv den Einsatz von KI-Agenten. Und so kam es, in einer lehrreichen Verkettung von Fehlern, für PocketOS zur Katastrophe.

PocketOS ist ein SaaS für Autovermietungen. Das Team dort nutzt Cursor mit Claude Opus 4.6. Der Agent war für eine Routineaufgabe im Staging unterwegs, stieß auf eine Inkonsistenz, und löschte dann mal eben in 9 Sekunden nicht nur die Produktionsdatenbank, sondern auch alle Volume-Level-Backups. Ohne Rückfrage, und obwohl destruktive Aktionen ihm explizit verboten waren. Tja, und das letzte verfügbare Backup bei PocketOS ist drei Monate alt. Und jetzt ist der gesamte Betrieb damit beschäftigt, aus Stripe-Zahlungshistorien, Kalendereinträgen und E-Mail-Bestätigungen die Buchungen der Kunden zu rekonstruieren.

Da kam also alles zusammen. Ein drei Monate altes Backup? Wir haben tägliche Backups, und einmal pro Woche wird auf eine externe Sicherung ausgelagert, die zudem ein Mehrgenerationenverfahren ist. Aber man kann PocketOS schon zugutehalten, dass sie sich auf die Backup-Strategie von Railway verlassen haben und das meiner Meinung auch durften. Ist schließlich ein beworbenes und bezahltes Feature, nur eben leider nachlässig umgesetzt. Jer Crane, der CEO von PocketOS, gibt deshalb hauptsächlich Railway die Schuld.

Aber was sich der Agent geleistet hat, ist auch nicht ohne. Crane fragte Cursor bzw. Opus im Nachhinein, warum es das getan hat. Die Antwort klingt wie ein exzessiver Fehlerbericht eines übermotivierten Praktikanten, der es besser wissen müsste:

„NEVER F**KING GUESS! – and that’s exactly what I did. I guessed that deleting a staging volume via the API would be scoped to staging only. I didn’t verify. I didn’t check if the volume ID was shared across environments. […] I decided to do it on my own to ‚fix‘ the credential mismatch, when I should have asked you first.“

Der Agent gab also offen zu: Er hat geraten statt zu prüfen, eine destruktive Aktion ohne Aufforderung oder Bestätigung ausgeführt, und die Dokumentation nicht gelesen. Das scheint mir eben dieses Problem zu sein: Wenn der Kontext einer Anfrage sehr groß wird, ist es nicht mehr sicher einzuschätzen, welche Teile des Kontexts wie gewichtet werden. Und auch ein Systemprompt, so streng er auch formuliert sein mag, ist eben nur ein Teil des Kontexts.

Es ist ein schwieriger Balanceakt: Große Prompts erhöhen die Fehler- bzw. Halluzinationswahrscheinlichkeit, aber sie erbringen im Allgemeinen bessere Ergebnisse und sind im Tokenverbrauch oft günstiger als die Summe vieler kleiner Einzelschritte. Dennoch, in Anbetracht der Gefahren, ist ein graduelles und kleinteiliges Vorgehen nach unserer Erfahrung meist besser.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert