Der Agent hatte eine Adresse
Auf der DEF CON 34 zeigte Eli Woodward von Team Cymru 48 Stunden Mitschnitt aus einem KI-Honeypot: 3.993 Anfragen, 327 Quell-IPs, 344 Zugangsdaten-Sondierungen, gegen Ports, die niemand bekannt gemacht hatte. Die anderen Angriffe auf einen Coding-Agenten brauchen einen Weg, ihm Text vorzulegen. Dieser braucht eine Route zu ihm. Bromure Agentic Coding betreibt den Agenten standardmäßig hinter NAT, also gibt es keine Route zu finden.
Die anderen Angriffe auf einen Coding-Agenten brauchen einen Weg, ihm Text vor die Augen zu bringen. Dieser braucht eine Route zu ihm, und die Scanner haben längst eine.
Samstagmorgen auf der DEF CON 34, auf der Creator Stage 3, hielt Eli Woodward von Team Cymru einen halbstündigen Vortrag mit dem Titel MCPwned: How Exposed AI Agents Became the Internet's New Recon Toy. Er hatte einen KI-Honeypot gebaut: 16 LLM- und KI-Infrastruktur-Personas über 16 Ports verteilt, jede mit framework-echten Antworten, Headern, Fehlern und Protokollverhalten, sodass ein Scanner, der sie berührte, glaubte, das Echte gefunden zu haben.
In einem Zeitfenster von 48 Stunden nahm der Honeypot 3.993 Anfragen von 327 eindeutigen Quell-IP-Adressen entgegen, darunter 155 MCP-Sondierungen und 344 Sondierungen nach KI-API-Schlüsseln.
Niemand hatte diese Ports bekannt gemacht, und keine der 327 Adressen hatte es gezielt auf Woodward abgesehen. Das Vorgehen, das er aus dem Mitschnitt zog, ist von der langweiligen, industriellen Sorte: Missbrauch der Modellregistrierung in LiteLLM, Aufzählung von MCP-Ressourcen, framework-bewusstes Durchprobieren von Zugangsdaten und koordiniertes Scannen nach exponierten lokalen Inferenzdiensten. Die Gruppen, die seit einem Jahrzehnt den Adressraum nach offenem RDP und unauthentifiziertem Redis durchkämmen, haben dieselbe Maschinerie auf KI-Entwicklerwerkzeuge gerichtet, noch vor den Bedrohungsmodellen.
Niemand muss Ihnen irgendetwas schicken
Gehen Sie das letzte Jahr an Angriffen auf Coding-Agenten durch, und sie haben alle dieselbe Form. Etwas, das der Agent liest, enthält Anweisungen: ein Fehlerbericht, ein unsichtbarer PR-Kommentar, eine vom Agenten abgerufene Webseite, eine README, eine Zeile im WAF-Log. In jedem dieser Fälle ist die Zustellung das schwierige Problem des Angreifers. Er muss einen Kanal finden, den Sie absichtlich angeschlossen haben, und seinen Text hineinbekommen.
Drehen Sie den Pfeil um, und das Problem verschwindet. Ein Scanner schickt ein SYN an Port 11434, und etwas auf Ihrer Maschine antwortet.
Was die Scanner finden
Die Population hinter Woodwards Mitschnitt geht in die Zehntausende.
Censys hat über das Internet erreichbare MCP-Dienste kartiert und fand davon 12.520 auf 8.758 eindeutigen IP-Adressen in 56 Ländern und 425 autonomen Systemen, Stand 28. April 2026. Eine Woche später, am 6. Mai, lag die Zahl über 21.000. Rund vier von zehn nehmen Anfragen von jedem entgegen, ohne Prüfung von Zugangsdaten, weil das Protokoll standardmäßig keine verlangte.
Wiz hat angeklopft. In einer am 28. Juli veröffentlichten Untersuchung fanden sie MCP in 80 % der Cloud-Umgebungen, wobei etwa jede sechste mindestens einen Server exponierte. Von den exponierten gaben rund 70 % ihren vollständigen Werkzeugkatalog an einen unauthentifizierten Aufrufer heraus, etwa 42 % lieferten echte Daten zurück, wenn die Forschenden ein Werkzeug aufriefen, und ungefähr 10 % standen vor sensiblen Backends. Wiz richtete eine bestätigte Teilmenge auf Cloud-Metadaten-Endpunkte und bekam temporäre Zugangsdaten zurück.
Knostic machte dieselbe Übung von Shodan aus und nahm bei
1.862 exponierten Servern
Fingerabdrücke; jeder einzelne der 119, die sie von Hand prüften, beantwortete
tools/list ohne Authentifizierung. Jeder dieser Server tat genau das Eine,
wofür er existiert, für einen Fremden.
Lokale Inferenz ergibt dasselbe Bild mit runderen Zahlen. LeakIX zählte am
23. Februar 2026
12.269 unauthentifizierte Ollama-Instanzen,
jede mit Modellaufzählung über /api/tags, kostenloser Rechenleistung über
/api/generate und /api/chat, Modelldiebstahl über /api/pull und
/api/push und in etwa tausend Fällen der Probllama-Kette zum
Verzeichnisdurchlauf.
Wie Ihre Maschine dazu kommt, zu antworten
Sie haben nicht entschieden, einen Dienst ins Internet zu stellen. Sie haben
OLLAMA_HOST=0.0.0.0 gesetzt, damit das Notebook auf dem Sofa das Modell auf
dem Desktop nutzen kann, und aus demselben Grund einen MCP-Server an alle
Schnittstellen gebunden. Sie haben docker run -p 8080:8080 ausgeführt, weil
die README es so sagte. Sie haben einen Tunnel geöffnet, um etwas auf einem
Handy zu debuggen, und ihn offen gelassen.
Dann haben Sie das Notebook woandershin getragen. Konferenz-WLAN, eine Coworking-Etage, ein Hotel, ein Heimrouter, wo UPnP in Ihrem Namen gefällig war, oder eine Cloud-Entwicklungsmaschine, deren Sicherheitsgruppe jemand in aller Eile weiter aufgemacht hat. Das Binden ist ein einziges Flag; die Exposition gehört demjenigen, der die Routing-Tabelle geschrieben hat, hinter der Sie gerade sitzen. Zugestimmt haben Sie dem an keiner Stelle.
Bromure Agentic Coding schließt diese Lücke standardmäßig, ohne dass Sie etwas einstellen.
Die VM hat keine Adresse
Bromure betreibt den Coding-Agenten in einer wegwerfbaren Linux-VM auf Apple Silicon, wobei jedes Byte seines Verkehrs einen Proxy auf dem Host durchquert, außerhalb der Kiste, in der der Agent läuft. Für diese Angriffsklasse trägt die Netzwerkseite dieser Anordnung das Gewicht.
Unter Ressourcen → Netzwerk steht der Modus auf NAT, und NAT bekommen
Sie, ohne eine Wahl zu treffen. Die VM teilt sich die Netzwerkverbindung Ihres
Mac über das eingebaute NAT von Virtualization.framework: ausgehend funktioniert
alles, und nichts in Ihrem LAN erreicht die VM. Binden Sie einen Dienst in
dieser VM an 0.0.0.0, dann haben Sie ihn an eine VM-interne Schnittstelle
hinter dem NAT gebunden. Es gibt keine Portweiterleitungstabelle, die man falsch
ausfüllen könnte, weil der Modus überhaupt keine Ports weiterleitet.
Das SYN des Scanners erreicht gar keinen Port, weder gefiltert noch geschlossen, weil keine Route zu einem führt. Woodwards Honeypot brauchte 16 lauschende Prozesse, um überhaupt etwas zu sammeln. Ein Bromure-Profil bietet keinen einzigen, und die 344 Zugangsdaten-Sondierungen haben nirgends, wo sie landen könnten.
Bridged ist da, wenn Sie es wollen, und gibt der VM per DHCP eine im LAN routbare Adresse auf einer physischen Schnittstelle, die Sie benennen. Es ist eine Einstellung pro Profil, mit einer ausdrücklichen Schnittstellenauswahl, sodass Sie nur bei dem Lauf im LAN landen, bei dem Sie das auch wollten.
Ihre MCP-Server lauschen nicht
Die Server im Panel MCP sind Profilkonfiguration. Bromure übersetzt sie
in Claude-Code-JSON oder Codex-TOML und spielt sie beim Start ein. Ein
stdio-Server ist ein Kindprozess innerhalb der VM, der über Pipes
spricht, hat also kein Socket, und die Aufzählung per tools/list hat
nichts zu erreichen. Ein HTTP-Server ist eine URL, auf die Sie zeigen,
mit optionalem Bearer-Token, womit Sie derjenige sind, der die Anfrage
sendet. Die 40 % der MCP-Dienste, die Fremden antworten, sind Server, die
jemand von Hand aufgesetzt und gebunden hat.
Lokale Inferenz läuft auf dem Mac
„Koordiniertes Scannen nach exponierten lokalen Inferenzdiensten“ ist die Formulierung des Honeypots selbst, und 12.269 offene Ollamas sind das, was es findet. Die Authentifizierung Lokales Modell in Claude Code leitet die Inferenz an ein geräteinternes MLX-Modell, das im Panel Lokale Modelle gewählt wird und unter macOS läuft, auf der Host-Seite des Proxys. Es gibt in der VM keinen Port 11434, den man exponieren könnte. Der geräteinterne Zweig von Fusion nimmt denselben Weg.
Eine Sonde, die hineinkäme, sammelte Platzhalter
Wer framework-bewusst Zugangsdaten durchprobiert, weiß, wo zu suchen ist:
OPENAI_API_KEY in der Umgebung, ~/.aws/credentials,
~/.docker/config.json, eine kubeconfig, ~/.ssh. Bromure legt all das in
die VM und macht all das falsch. Sie bekommen brm_…- und
xai-brm-…-Token, eine synthetische kubeconfig mit Wegwerf-Client-Zertifikaten,
eine gefälschte Base64-Registry-Auth und AWS-Material, das
InvalidSignatureException zurückgibt, sobald irgendetwas den Proxy umgeht.
Bromure behält die echten Werte auf dem Host und setzt sie auf der Leitung
ein, für genau das Ziel, zu dem sie gehören.
Über destruktive Verben wird auf dem Host entschieden
Wiz fand rund 42 % der exponierten Server, die echte Daten zurückgaben, und daneben eine Schreib- und Löschklasse. Guardrails ist eine Richtlinien-Engine im Host-Proxy und deckt Kubernetes, AWS, DigitalOcean, Container-Registries, GitHub, GitLab, Bitbucket und die HTTPS-Datenbank-Endpunkte ab. Stellen Sie pro Ressource Destruktives blockieren oder Nur lesen ein, und der blockierte Aufruf kommt als hartes 403 zurück, das der Agent als ganz gewöhnlichen API-Fehler meldet. Bromure trifft diese Entscheidung in macOS, es gibt also nichts in der VM, das man abschalten könnte.
Eine Aufgabe von einem Fremden ist immer noch Text
Angenommen, Sie schließen einen entfernten MCP-Server an, den jemand anderes exponiert hat, und er antwortet Ihnen mit mehr als Daten. Sobald Scanner diese Dienste aufzählen können, kann jeder, der einen findet, ihn auch nutzen, um Ihren Agenten durch die Vordertür zu erreichen, als Inhalt.
Bromure bewertet diesen Inhalt beim Hereinkommen. Ein lokales
Prompt-Injection-Modell liest die Dateiinhalte, Webseiten und
tool_result-Blöcke, die der Agent aufnimmt, und sucht nach einem Imperativ,
der sich an denjenigen richtet, der gerade liest. Protokollieren, aber
fortfahren hält jeden Treffer im Sicherheitsprotokoll fest. Mich fragen, was
zu tun ist pausiert die ausgehende Anfrage und legt Ihnen die markierte Stelle
vor. Einseitig blockieren stoppt sie, bevor das Modell sie sieht, und gibt
dem Agenten ein hartes 451. Ein zweiter Detektor, ein feinabgestimmter
ModernBERT-Klassifikator plus ein deterministischer Scanner für Nutzlasten mit
Nullbreite, Bidi-Steuerzeichen und Unicode-Tags, deckt CLAUDE.md, AGENTS.md,
GROK.md sowie deren verschachtelte und globale Varianten ab.
Beide Modelle laufen auf Ihrem Mac, einmal von bromure.io heruntergeladen. Die Ausgabe eines fremden MCP-Servers zu bewerten bedeutet nicht, diese Ausgabe irgendwohin zu schicken.
Das Anklopfen ist eine Zeile im Log
Jede Anfrage, die die VM stellt, durchquert den Host-Proxy, und auf der Trace-Stufe Aktivität hält Bromure zu jeder den Host, den Status, die Latenz, den Austauschbericht und etwaige Leck-Warnungen fest. Injektionserkennungen landen im Sicherheitsprotokoll, mit dem markierten Text daran. Erhöhen Sie die Stufe, und Bromure bewahrt auch die Rümpfe der KI-Anfragen auf, verschlüsselt mit demselben Schlüsselbund-Schlüssel wie Ihre Profilgeheimnisse.
Ein Agent, der angefangen hat, Anweisungen von außen zu befolgen, muss irgendwohin gelangen, um für irgendjemanden nützlich zu sein, und irgendwohin zu gelangen ist eine Zeile, die Sie auf der Maschine lesen können, auf der die Sitzung lief.
Und wenn Sie die Maschine loswerden wollen, ist sie weg. Home löschen wischt
/home/ubuntu aus, also Dotfiles, .ssh, npm-global, .cargo und den
Shell-Verlauf, zurück auf den Zustand direkt nach dem Klonen. Auf Basis
zurücksetzen verwirft jede Änderung auf Systemebene und klont die
Arbeitsplatte neu aus dem Basis-Image.
MCP wird bessere Voreinstellungen bekommen und Ollama eine Authentifizierungsgeschichte, und die Ports in Woodwards Honeypot werden im nächsten August andere Ports sein. Die Form bleibt. Einen Agenten heute ordentlich zu betreiben heißt, ein Gateway und eine Handvoll Werkzeugserver daneben zu betreiben, und jeder davon ist ein Programm, das auf einem Notebook, das reist, ein Socket bindet.
Andere Beiträge hier bitten Sie, dem zu misstrauen, was Ihr Agent liest. Dieser stellt eine kürzere Frage: Was antwortet, wenn ein Fremder klopft, und wäre es Ihnen nicht lieber, es täte niemand.
Installieren Sie Bromure Agentic Coding und geben Sie Ihrem Agenten eine Maschine, die die Scanner nicht sehen können.