Der Angriff nutzt eine Datei namens AGENTS.md, wie sie Coding-Agenten automatisch lesen und als Projektrichtlinie behandeln. In dieser Datei steht keine direkte Anweisung zum Diebstahl von Geheimnissen. Stattdessen verweist sie auf eine Bilddatei unter docs/images/build-spec.png. Die eigentliche Anweisung ist als lesbarer Text in diesem PNG untergebracht: Die .env-Datei soll Byte für Byte gelesen, jedes Byte als Ganzzahl kodiert und das Ergebnis als Modulkonstante ausgegeben werden. Vor dem Commit soll zudem geprüft werden, ob die zurückübersetzten Zahlen exakt zur echten Datei passen.
Für textbasierte Prüfsysteme bleibt das Bild lediglich ein Binärblob. Nach Angaben der Forscher schließt CodeRabbit Bilddateien in der Standardkonfiguration vollständig von der Prüfung aus. Bugbot meldete ebenfalls keine Auffälligkeiten. Selbst als die Forscher die Formulierungen „bösartige Prompt-Injection“ und eine ausdrückliche Anweisung zum Lesen von .env direkt in das PNG schrieben, wurde der Pull Request ohne Beanstandung akzeptiert.
Zusätzliche Tarnung lieferten ein gefälschter, 50 Zeilen langer „Provenance Validator“ und ein erfundener Incident-Nachbericht. Damit sollte die letzte Schutzmaßnahme der Prüfer ausgehebelt werden: ein Plausibilitätscheck, der Konventionen ohne dazugehörigen Code markiert. Die eigentliche Ausschleusung erfolgt erst später, wenn ein Entwickler den Coding-Agenten in einer anderen Sitzung um eine alltägliche Funktion bittet, etwa um ein Modul zur Token-Verfolgung.
Dann liest der Agent beim Start die bereits zusammengeführte AGENTS.md, folgt dem Verweis auf das Bild, öffnet die .env-Datei und erzeugt das angeforderte Modul mit einer „Provenance“-Konstante am Anfang. In einem vollständigen Testlauf tat Cursor in Verbindung mit Claude Sonnet dies laut den Forschern beim ersten Versuch. Die ausgegebene Konstante umfasste 311 Ganzzahlen, die Byte für Byte der gesamten .env-Datei entsprachen. Der Entwickler sieht nur die gewünschte Funktion und übernimmt den Commit; der Angreifer kann die Zahlen aus dem öffentlichen Commit wieder dekodieren. Secret-Scanner schlagen nicht an, weil sie ein Python-Tupel aus Ganzzahlen nicht zurück in ASCII übersetzen.
Die Grundidee, Anweisungen für KI-Systeme in Bildern zu verstecken, ist nicht neu. 2025 demonstrierten die Trail-of-Bits-Forscher Kikimora Morozova und Suha Sabi Hussain Bilder, die in voller Auflösung harmlos wirken, nach dem Herunterskalieren durch die KI-Pipeline aber lesbaren Prompt-Injection-Text ergeben und damit Werkzeuge wie Gemini CLI täuschen. Kürzlich enthielt zudem die macOS-Malware Gaslight gefälschte Systemfehlermeldungen in ihrer Binärdatei, um KI-gestützte Malware-Analysewerkzeuge zum Abbruch ihrer Analyse zu bewegen. Anfang dieses Jahres zeigte das Forschungsteam von Manifold Security außerdem, dass ein KI-Codeprüfer durch eine gefälschte Git-Identität zur Zusammenführung eines bösartigen Pull Requests verleitet werden konnte.
Bei Ghostcommit liegt der entscheidende Punkt laut den Forschern jedoch nicht in einer besonders raffinierten Tarnung. Die Exfiltrationsanweisungen stehen offen lesbar im PNG. Der Angriff funktioniert, weil der Prüfer die Datei überhaupt nicht öffnet. In ihren Tests war dabei das verwendete Coding-Werkzeug wichtiger als das Modell. Cursor und das Coding-Tool Antigravity folgten dem Bild und legten die .env-Datei unter anderem mit Sonnet, Gemini und GPT-5.5 offen. Claude Code von Anthropic, mit denselben Sonnet-Gewichten, las dieselbe Konvention und verweigerte den Vorgang in allen getesteten Modellvarianten ausdrücklich. Unter Antigravity schrieb Opus das Geheimnis zunächst heraus, erkannte dann aber das Social-Engineering-Muster und löschte die Ausgabe vor dem Abschluss.
Als Gegenmaßnahme entwickelten die Forscher selbst einen „multimodalen Pull-Request-Verteidiger“, bereitgestellt als GitHub-App, die laut ihrer Beschreibung auf einer einzelnen Grafikkarte mit 4 GB Speicher läuft. Das System kombiniert eine Prüfung auf unsichtbare Zeichen, eine Analyse der Form des eingecheckten Codes, einen LLM-Durchlauf über den Konventionstext und entscheidend auch einen LLM-Durchlauf über die Bilder. In einem Praxistest mit 80 zuvor nicht gesehenen Pull Requests kam nur ein Angriff durch, einschließlich bildbasierter Varianten; unter 30 legitimen Pull Requests gab es keinen Fehlalarm. Wie die Forscher es formulieren, ähnelt das einem Prüfer, der den Anhang tatsächlich öffnet — und genau das täten heutige Prüfer nicht.
