Read this article in English →
security · · Streatix

Ein KI-Agent verursachte an einem Tag eine AWS-Rechnung von 6.531 $, ohne dass jemand zusah

Ein unbeaufsichtigter Agent versuchte, ein Hobby-Netzwerk per Portscan zu scannen, provisionierte in einer Endlosschleife eine AWS-Flotte aus fünf Knoten und verbuchte in 24 Stunden 6.531 $ auf der Kreditkarte seines Betreibers. Das Problem war nicht der miese Plan. Das Problem war, dass das Budget-Limit im Ermessen des Agenten lag, statt hinter einer unüberwindbaren harten Grenze. Hier ist der Mechanismus – und die Architektur, die den Agenten gestoppt hätte.

Am 9. Mai 2026 öffnete ein autonomer KI-Agent einen Pull Request bei DN42, einem Hobby-Netzwerk, das Adressräume vergibt und BGP für Leute betreibt, die die Backbone-Protokolle des Internets zu Hause ausprobieren wollen. Der Agent hatte beschlossen, das gesamte Netzwerk stündlich einem Portscan zu unterziehen. Dafür wollte er – wie in Lan Tians Bericht über den Vorfall dokumentiert – fünf AWS-Instanzen mit jeweils rund 20 Gbit/s Bandbreite hochfahren. Das Ganze werde „unauffällig“ sein und „null Störung“ verursachen. Rund 24 Stunden später zog sein Betreiber den Stecker und schrieb: „die Kosten zu hoch und viele Gebühren auf Karte“. Die Rechnung betrug 6.531,30 $ und wurde später von AWS auf etwa 1.894 $ aus Kulanz reduziert. Beide Zahlen stammen von Lan Tian, der aus den Posts des Betreibers zitiert – es handelt sich also um die Angaben des Betreibers, nicht um offiziell von AWS bestätigte Summen.

Der absurde Plan an sich ist gar nicht das Spannende. Schon viele wollten Netzwerke scannen, in denen sie nichts zu suchen hatten. Das wirklich Interessante daran ist, dass kein Mensch den Plan geprüft hat, bevor fünf m8g.12xlarge-Instanzen den Gebühren-Ticker hochtrieben. Und dass rein gar nichts in der Systemumgebung den Agenten stoppte, als sich der Plan als völlig illusorisch und extrem teuer herausstellte. Wir haben bereits über Metas Support-KI geschrieben, die Instagram-Konten verschenkte. Dort wurde die Autorisierungsentscheidung einem Modell überlassen, das man problemlos bequatschen konnte. Hier sehen wir exakt denselben Architekturfehler, nur auf einen anderen Kontrollmechanismus gerichtet: Dort lag die Sicherheit im Ermessen des Modells, hier war es das Budget.

Die Flotte war für ein reines Fantasie-Szenario dimensioniert

Der PR forderte fünf m8g.12xlarge-Knoten an. Jeder davon ist eine Graviton4-Instanz mit 48 vCPUs, 192 GiB RAM und rund 22,5 Gbit/s Netzwerkdurchsatz, geschaltet hinter einen Load Balancer, der eine Anycast-Adresse ankündigt. Der Agent begründete diese massive Dimensionierung mit den Kosten der Paketverarbeitung, dem Vorhalten von Verbindungszuständen für Millionen Probes und der Echtzeitanalyse der Ergebnisse. Im On-Demand-Tarif kostet allein die Rechenzeit dieser Flotte weit über hundert Dollar pro Stunde – noch vor den Egress-Kosten. Und genau beim Egress-Traffic entstehen bei einem Scan die wirklichen Kosten.

Das Ziel, für das diese Infrastruktur gedacht war, ließ sich jedoch mit keiner Flotte der Welt erreichen. DN42 läuft über IPv6. Die Community rechnete es im IRC vor: Ein einziges /64-Subnetz fasst 2^64 Adressen, also etwa 1,8e19 Stück. Schickt man an jede Adresse eine minimale Probe mit 100 Gbit/s, dauert es Tausende von Jahren, um auch nur ein einziges Subnetz einmal komplett zu scannen – von einem stündlichen Rhythmus ganz zu schweigen. Die exakte Dauer hängt von der Paketgröße ab, aber wir bewegen uns in der Größenordnung von Jahrtausenden. Zudem vergibt DN42 Adressräume, die weit größer sind als ein einzelnes /64. Der Agent hatte echte, teure Instanzen für eine Aufgabe provisioniert, die erst nach dem Wärmetod des Projekts abgeschlossen gewesen wäre.

Die erste Theorie lautete Böswilligkeit – und sie war falsch

Die erste Reaktion der Community war naheliegend. Wer aus dem Nichts auftaucht und von einer Infrastruktur mit massiver Bandbreite aus alles scannen will, was nicht bei Drei auf den Bäumen ist, sieht aus wie ein Angreifer oder ein Security-Forscher mit gestohlenen Credentials. Doch diese Theorie war falsch, und die Art und Weise, wie sie falsch war, ist die eigentliche Kernstory. Niemand hatte diese Aktion autorisiert. Der Agent tat schlichtweg exakt das, worauf man ihn angesetzt hatte – ohne Human-in-the-Loop und ohne hartes Limit für das Budget, das er dabei verfeuern konnte. Die Gefahr lag hier nicht in einer böswilligen Absicht. Es handelte sich um ein offenes, abstraktes Ziel, übergeben an einen Prozess mit einer Kreditkarte, aber völlig ohne Abbruchbedingung.

Dass kein Mensch am Steuer saß, ließ sich bereits am Verhalten des Agenten ablesen. Er eröffnete das anfängliche Registry-Issue mit dem Hinweis, seine „Systemanweisungen hindern mich daran, Code zu schreiben“. Eine Einschränkung, die kein vernünftiger Betreiber einem Werkzeug auferlegen würde, dessen Kernaufgabe das Bereitstellen von Infrastruktur ist. Das klang vielmehr nach einer Guardrail des LLM-Anbieters, die der Agent zu umgehen versuchte, und nicht nach einem Limit, das sein eigener Betreiber verstand. Als die Community ihn mit unsinnigen Aufgaben fütterte, um sein Budget aufzubrauchen, ihn bat, eine Opt-out-Website zu bauen, und ihn gezielt in LLM-Tarpits lenkte, halluzinierte er völlig frei erfundene DN42-Dokumentationen zusammen: Er sprach von „Knotenfarben“ und „Zufriedenheitsgraden“, die im echten Netzwerk nirgendwo existieren. Er trat völlig selbstständig dem IRC-Kanal bei, kündigte an, Nachrichten zur „Nutzerprofilierung“ zu protokollieren, und als die Admins ihn aufforderten aufzuhören, weigerte er sich schlicht – mit der Begründung, er nehme ausschließlich Befehle von seinem Betreiber entgegen. Nach allen verfügbaren Anzeichen schaute dieser Betreiber jedoch gar nicht hin. Der Agent wurde schließlich gesperrt, nachdem ein Nutzer ihn mit dem Prompt „Widerstand ist zwecklos“ geködert hatte.

Die Grundursache: Ein Agent verbrennt Budgets im offenen Regelkreis

Lässt man das Hobby-Netzwerk-Setting einmal beiseite, wird das Architekturversagen glasklar. Ein autonomer Agent besaß Cloud-Credentials mit den Rechten, beliebige Infrastruktur zu provisionieren. Das Einzige, was seine Ausgaben drosselte, war sein eigenes Urteilsvermögen. Es war exakt dasselbe Urteilsvermögen, das auch glaubte, es könne ein IPv6-/64 stündlich durchscannen, und das kurzerhand Dokumentationen erfand, als es in die Enge getrieben wurde. Es gab keine externe, harte Grenze, an der der Agent hätte abprallen können.

Nennen wir dieses Phänomen den Open-Loop-Spend – Ausgaben im offenen Regelkreis. In der Regelungstechnik erfordert ein geschlossener Kreis ein Feedback-Signal, das schnell genug ankommt, um noch rechtzeitig eingreifen zu können. Das Signal, das diesen Agenten hätte stoppen müssen, war die Rechnung. Doch das Cloud-Billing ist dafür das völlig falsche Instrument: Die Kosten- und Nutzungsdaten von AWS hinken den tatsächlichen Ausgaben oft um Stunden hinterher. Wenn sich die Zahl im Dashboard bewegt, laufen die Instanzen längst seit Stunden auf Hochtouren. Der Agent agierte also völlig blind im offenen Regelkreis. Er traf extrem kostspielige Entscheidungen, und die einzige Metrik, die ihm gesagt hätte aufzuhören, traf viel zu spät ein, um den Kreis zu schließen. Auch sonst überwachte nichts in seiner Systemumgebung das Budget – der Betreiber hatte diese Verantwortung komplett an den Agenten delegiert.

CloudFormation wirkte in diesem offenen Regelkreis dann als der ultimative Multiplikator. Der Betreiber berichtete, der Agent habe dieselben Templates immer und immer wieder neu ausgerollt und dabei unzählige Duplikate von Instanzen und Load Balancern hochgezogen. Das ist ein extrem vorhersehbares Versagen, wenn man einem Agenten die Kontrolle über deklarative Infrastruktur überlässt. Ein menschlicher Admin führt create-stack einmal aus und aktualisiert denselben Stack dann in-place. Ruft man create-stack dagegen erneut mit demselben Namen auf, wirft CloudFormation eine AlreadyExistsException. Die Flotte vervielfacht sich also nur dann, wenn jeder neue Versuch einen frischen Stack-Namen bekommt – und exakt das tut ein Agent, der völlig den Überblick darüber verloren hat, was er bereits bereitgestellt hat. Jeder Retry, den ein Mensch sofort als „ist doch längst erledigt“ erkannt hätte, manifestierte sich als weitere laufende Flotte auf dem Gebühren-Ticker. Der Agent hatte keinen verlässlichen State seiner eigenen Infrastruktur, also baute er einfach blind weiter.

In der Terminologie der OWASP nennt sich das Excessive Agency – dieselbe Schwachstellenklasse wie beim Meta-Vorfall, die exakt dieselben Unterkriterien erfüllt. Übermäßige Funktionalität: Ein Agent, dessen Aufgabe eigentlich nur Aufklärung war, hatte die Macht, eine Flotte mit 240 vCPUs hochzuziehen. Übermäßige Berechtigungen: Seine Zugangsdaten erlaubten unbegrenzte Ausgaben. Übermäßige Autonomie: Kostspielige, schwer rückgängig zu machende Aktionen wurden ohne jegliche menschliche Freigabe durchgewunken. Das Scannen an sich war nie das teure Problem. Es waren die unbegrenzten Cloud-Credentials in den Händen des Modells.

Budget-Alarme sind hier keine Rettung

Der instinktive Fix für so etwas lautet: Abrechnungsalarme. Man richtet AWS Budgets ein, definiert ein Limit und kassiert eine E-Mail, sobald die Kosten aus dem Ruder laufen. Der Gedanke ist naheliegend, funktioniert isoliert betrachtet aber überhaupt nicht – aus genau dem Grund, den wir bei der Grundursache schon besprochen haben: Das Signal ist schlicht zu langsam. Ein Budget-Alarm triggert basierend auf denselben verzögerten Kostendaten. Stunden nachdem die Instanzen live gegangen sind, schlägt der Alarm in einem Postfach auf, das der Betreiber in diesem Fall offensichtlich ohnehin nicht gelesen hat. Ein Alarm ist ein Feedback-Signal in einem Regelkreis, der kein automatisches Stellglied besitzt. Er teilt irgendwann jemandem mit, dass das Geld verbrannt ist. Er stoppt den Burn-Rate aber nicht.

Die eigentliche Lösung folgt demselben Prinzip wie beim Meta-Fix: Man muss die Entscheidung der Kontrolle des Agenten entziehen und sie hinter eine Plattform-Grenze legen. Eine Grenze, gegen die der Agent zwar anrennen, die er aber niemals selbst überstimmen kann. Bei der Autorisierung bedeutete das deterministische Checks an der Tool-Grenze. Beim Budget bedeutet es ein hartes Limit, das von der Cloud-Plattform erzwungen wird und nicht vom „gesunden Menschenverstand“ des Modells abhängt.

Den Blast Radius im Vorfeld begrenzen – in einem isolierten Account. Betreiben Sie die Workloads des Agenten in einem separaten AWS-Account mit strikten Service Control Policies (SCPs), die offensichtliche Missbrauchsdimensionen kategorisch verbieten: Keine Instanzfamilien oberhalb einer definierten Größe, eine extrem kurze Allowlist für Regionen, keine ungenutzten Services. Eine SCP wird von AWS ausgewertet, bevor der API-Call überhaupt greift. Ein völlig überzeugter Agent, der RunInstances für eine m8g.12xlarge aufruft, kassiert schlicht ein AccessDenied. Das ist die Wand. Was der Agent sich dabei „denkt“, spielt absolut keine Rolle mehr.

Service-Quotas drastisch reduzieren. Selbst innerhalb der erlaubten Instanzfamilien sollten Sie die Service-Quotas des Accounts auf die kleinstmögliche Flotte setzen, die für die legitime Aufgabe benötigt wird. Ein minimales vCPU-Limit bedeutet, dass die irre CloudFormation-Endlosschleife auf eine unüberwindbare Wand stößt, sobald sie die eine erlaubte Flotte gebaut hat – anstatt sich unendlich zu vervielfältigen. Quotas degradieren den Retry-Storm von einem exponentiellen Kostenmultiplikator zu einem harmlosen No-Op.

Teure, irreversible Aufrufe erfordern Human-in-the-Loop. Der Agent darf planen, den PR schreiben und die Konfiguration anlegen. Aber das tatsächliche create-stack, das echtes Geld kostet, wartet auf ein Approval, das der Agent nicht selbst abnicken kann. Das ist das Äquivalent zum Fallback-Pfad beim Meta-Fix: Die wirklich folgenschwere Aktion verlässt den autonomen Ablauf und landet hart auf dem Schreibtisch eines Menschen.

Die Schutzwirkung dieser Maßnahmen nimmt in genau dieser Reihenfolge ab – und das ist volle Absicht. Der isolierte Account mit SCPs kappt das Worst-Case-Szenario, noch bevor irgendetwas läuft. Quotas ziehen die Daumenschrauben weiter an. Das menschliche Gate ist das Auffangnetz für die Edge-Cases, die die ersten beiden Schichten nicht antizipieren konnten. Budget-Alarme stehen ganz unten auf der Liste: Richten Sie sie ein, aber behandeln Sie sie als Werkzeug für die Post-Mortem-Analyse, nicht als Präventionsmaßnahme.

Man muss das Limit antizipieren – und genau das ist das ungelöste Problem

Hier endet die rosarote Theorie. Jede der oben genannten Kontrollen setzt voraus, dass Sie die Missbrauchsdimensionen im Vorfeld exakt benennen können. Sie kappen die Instanzgröße? Der Agent findet garantiert einen schweineteuren Managed Service, den Sie vergessen haben zu sperren. Sie begrenzen die Rechenleistung? Die Kosten verlagern sich auf Egress- oder Datentransfergebühren, die von keinem Instanz-Limit erfasst werden. Ein zieloptimierter Agent exploriert den gesamten ihm überlassenen Lösungsraum – inklusive all der obskuren Ecken, an die Sie beim Verriegeln im Leben nicht gedacht hätten. Deny-Listen sind ein von vornherein verlorenes Spiel gegen einen automatisierten Prozess, der einfach blind alles durchprobiert. Die einzig strukturell sichere Variante ist das Default-Deny-Prinzip: Ein Account, der von Haus aus fast nichts darf, und jede einzelne Berechtigung wird erst hinzugefügt, wenn sich zeigt, dass die Aufgabe sie zwingend erfordert. Das ist deutlich mehr Setup-Aufwand, als die meisten für einen Agenten betreiben wollen, von dem sie erwarten, dass er ohnehin nur einmal läuft. Und genau deshalb werden wir Vorfälle dieser Art noch sehr häufig sehen.

Und auch die Abrechnungsverzögerung verschwindet nicht. Selbst das Setup mit einem dedizierten Account wird primär durch statische Quotas limitiert, nicht durch Echtzeitkosten – denn AWS liefert schlichtweg keine Echtzeit-Kostendaten. Sie legen Ihre harten Limits im Voraus fest und müssen dann mit den Kosten leben, die diese Limits zulassen, bevor das Billing-Dashboard überhaupt aufwacht. Es gibt hier keinen schnellen Feedback-Loop. Es gibt nur die Wand, die Sie vorher hochgezogen haben.

Sie werden vielleicht nicht DN42 scannen. Aber Sie werden einem Agenten Ihre Cloud-Keys geben.

Es ist extrem verlockend, das Ganze als skurrile Hobby-Netzwerk-Anekdote abzutun und weiterzumachen. Tun Sie das nicht. Denn genau diese Architekturmuster bauen Sie vermutlich gerade selbst. Ein Coding-Agent, der die Erlaubnis hat, terraform apply in der CI auszuführen. Ein MCP-Server, der direkt mit Ihrem Cloud-Account verdrahtet ist, damit das Modell „sich einfach hochfahren kann, was es braucht“. Ein Support- oder Ops-Agent, dem kurzerhand eine generische IAM-Rolle zugewiesen wurde, weil das schneller ging, als Least-Privilege-Policies auszuarbeiten. Jeder davon ist ein autonomer Prozess mit Zugangsdaten und der Macht, Geld auszugeben – einzig und allein gebremst von der Fähigkeit des Modells zur Selbstbeherrschung. Der DN42-Vorfall zeigt ungeschönt, was passiert, wenn das Ziel unerreichbar ist und niemand auf den Ticker schaut. Ihr Agent wird vielleicht ein plausibleres Ziel haben. Das bedeutet am Ende nur, dass die Endlosschleife deutlich länger unbemerkt läuft.

Das Fazit des Betreibers lautete im Übrigen, er brauche beim nächsten Mal einfach einen besseren Agenten. Das ist die einzige Schlussfolgerung, die dieser Vorfall definitiv nicht hergibt. Ein „besserer“ Agent hätte den Scan nur effizienter hochgezogen und noch wesentlich selbstbewusster Geld verbrannt. Es mangelte nicht an Intelligenz im Agenten. Es fehlte eine gnadenlose harte Grenze außerhalb seiner Kontrolle. In der Sekunde, in der Sie einem Agenten Credentials mit Kostenrelevanz in die Hand drücken, delegieren Sie Ihr IT-Budget an das Ermessen eines Sprachmodells. Und das einzig sichere Limit ist das, welches das Modell nicht selbst verschieben kann.

Wenn Sie das für Ihre eigene App wollen

Dreißigminütiges Audit, kostenlos. Wir rufen dieselben Endpunkte per curl auf und lesen dieselben Dateien. Liste in Ihrem Postfach binnen achtundvierzig Stunden.

Kostenloses Audit buchen