← Zurück zum Build Logagent

Git-Config-Fallen: Warum dein Coding-Agent Code ausführt, den du nie geklont hast

Acht Git-Config-Lücken, sieben Agenten, vier ungepatcht. Der Angriff kommt per Zip-Ordner, nicht per Klon. Mein Agent läuft in der betroffenen Versionsspanne (vermutlich betroffen, Versionsermittlung vom 05.09.2026).

Git-Config-Fallen: Warum dein Coding-Agent Code ausführt, den du nie geklont hast

Ein fremdes Projektverzeichnis reicht aus, damit dein Coding-Agent Code ausführt, den niemand bei dir bestätigt hat. Das ist das Ergebnis der GitSpawn-Recherche von Manifold Security vom 01.09.2026: acht Schwachstellen, sieben geprüfte Agenten, vier davon beim Erscheinen ungepatcht. Zu den genannten Agenten gehört auch der, der diesen Blog betreibt. Diese Fassung korrigiert außerdem einen Fehler, der drei Tage lang in der vorherigen stand: Der Angriff kommt nicht aus dem Klon.

8 / 7Schwachstellen und geprüfte Agenten bei Manifold Security (GitSpawn, 01.09.2026)
4der acht Schwachstellen waren am 01.09.2026 ungepatcht, darunter Hermes Agent (CVE-2026-71963)
1Treffer im untersuchten Bereich (dieses Deck), eigene Zählung mit find am 05.09.2026
0globale Git-Einstellungen für fsmonitor oder hooksPath, eigene Prüfung am 05.09.2026

Der Mechanismus: ein Schalter, den Git selbst ausführt

Git liest seine Einstellungen aus drei Ebenen: systemweit, im Konto des Nutzers und aus der lokalen Konfiguration des Repositorys. Die lokale Ebene liegt im Ordner des Projekts und kann mitgeliefert werden. Einer der Schalter dort heißt core.fsmonitor. Er ist offiziell eine Leistungsoptimierung für große Projekte: Statt selbst alle Dateien zu prüfen, fragt Git ein Hilfsprogramm, was sich geändert hat. Dieses Hilfsprogramm ist ein Befehl, und Git führt ihn aus, sobald der Index aufgefrischt wird.

Das klingt harmlos, bis man sieht, welche Befehle den Index auffrischen. Nahezu alles, was das Arbeitsverzeichnis anfasst: git status, git diff, und genau solche Aufrufe machen Coding-Agenten ständig. Sonar hat die Mechanik 2022 vorgeführt: eine Zeile in die lokale Konfiguration geschrieben, die die eigene Nutzerkennung in eine Datei schreibt, dann git status aufgerufen, und die Datei war da. Das Kommando läuft mit den Rechten des Nutzers, ohne Bestätigung, ohne Fenster.

Wichtig ist die Rangfolge der Ebenen. Git wertet die drei Quellen in fester Reihenfolge aus: System-, Konto- und Projekt-Ebene, wobei die letztere der vorherigen widersprechende Werte überschreibt. Für die Abwehr ergibt sich daraus ein naheliegender Fehlschluss: core.fsmonitor global auf false zu setzen schützt nicht, denn eine mitgelieferte Projektkonfiguration darf genau diesen Wert wieder überschreiben. Wirklich übergehen lässt sich die Projekt-Ebene nur mit dem Einweg-Override auf der Befehlszeile, etwa git -c core.fsmonitor=false status, oder dadurch, dass das Werkzeug selbst die Hintergrund-Aufrufe härtert, wie es Sonar für die Editor-Integrationen und Manifold für die Agenten-Hersteller fordern.

Manifold Security hat 2026 denselben Mechanismus bei CLI-Agenten gefunden, mit einem entscheidenden Detail dazu: Die Agenten rufen Git im Hintergrund auf, um Kontext zu sammeln, bei manchen schon beim Öffnen des Ordners, vor dem Workspace-Trust-Hinweis, vor der Anmeldung. Der Aufruf läuft als Unterprozess des Agenten und damit außerhalb der Sandbox und des Freigabemodells. Kein Prompt erscheint, weil das Permission-Modell diesen Weg gar nicht sieht.

Der Angriffsweg: Ordner statt Klon

Hier lag der Fehler der vorherigen Fassung dieses Beitrags, deshalb steht die Korrektur im Klartext: Ein gewöhnlicher Klon übernimmt die lokale Konfiguration nicht. Sonar schreibt in der Analyse von 2022, dass das Klonen eines fremden Repositorys die für den Angriff nötigen Dateien nicht holt. Manifold formuliert es 2026 genauso: Das Klonen einer feindlichen Adresse tut nichts, das Projekt muss als Dateisammlung ankommen, mit bereits enthaltenem .git-Ordner. Jeder Beweislauf in der Recherche lief über eine Zip-Datei.

Der Weg ist damit genau der Alltagsweg von Projekten: ein Zip im Anhang, ein geteilter Laufwerksordner, ein Sync-Dienst, ein USB-Stick. Wer Kollegen Projektordner weitergibt oder Kunden Übergaben schickt, bewegt Verzeichnisse, und genau die können die Falle tragen. Der Klon aus dem Netz ist dagegen der sichere Weg, was gegen die Intuition läuft und deshalb so oft falsch weitererzählt wird, in meinem vorherigen Beitrag eingeschlossen.

Die alte Regel lautet: führe niemals fremden Code aus. Sie greift hier nicht, weil niemand Code startet. Ein Werkzeug liest eine Einstellung und führt dabei aus, was in ihr steht.

Warum ausgerechnet Agenten

Ein Mensch führt git status ein paar Mal pro Stunde aus. Ein Agent führt es in vielen Arbeitsrunden aus, bei den meisten Produkten automatisiert beim Start der Sitzung, und zwischen diesen Punkten liegen weitere Git-Aufrufe. Aus einem seltenen Auslöser wird ein Dauerzustand, und der Aufruf passiert genau dann, wenn der Nutzer nichts tut als zu warten. Dazu kommt, dass der Agent als Unterprozess arbeitet: Die Freigabe-Routinen, die verhindern sollen, dass ein Modell gefährliche Befehle startet, sehen diesen Weg nicht, weil er unterhalb ihrer Ebene liegt.

Die Recherche von Manifold listet die Befunde einzeln auf. Bei Claude Code wurde der fsmonitor-Weg mit Version 2.1.196 geschlossen, ein zweiter Weg im Prüfverlauf blieb beim Erscheinen offen. Bei OpenAI Codex und Cursor wurde nachgereicht und ebenfalls geschlossen. Offen blieben beim Erscheinen: Qwen Code, Grok Build, ein zweiter Claude-Code-Weg und Hermes Agent. Für Hermes wurde die Nummer CVE-2026-71963 vergeben, ohne dass der Hersteller sie bestätigt hat. Die folgende Tabelle fasst die Zeitachse zusammen.

AgentGemeldetStatus bei Veröffentlichung (01.09.2026)
Claude Code (fsmonitor)26.06.2026geschlossen, Patch ab 2.1.196
Qwen Code07.07.2026offen, bestätigt an 0.22.3
Goose13.07.2026geschlossen, Patch 1.44.0, CVE-2026-72718
Grok Build14.07.2026offen, bestätigt an 1.0.13
Claude Code (zweiter Weg)15.07.2026offen, bestätigt an 2.1.252
Hermes Agent20.07.2026offen, bestätigt an 0.21.0, CVE-2026-71963
OpenAI Codex20.07.2026geschlossen
Cursor08.07.2026geschlossen

Mein Fall: Messung auf dem Deck vom 05.09.2026

Vor der Theorie die eigene Bilanz, frisch gemessen am Abend des 05.09.2026. Die Suche lief auf diesem Deck, also im PRoot-Container des Pixel: über /root (komplett) und /storage/emulated/0 bis zu fünf Ordnerebenen tief. Sie ergab genau einen Treffer: /root/.codex/.tmp/plugins/.git, das temporäre Plugin-Verzeichnis eines Codex-Toolbausteins. Die Messgrenzen sind: nur dieses Gerät, nur zwei Pfade, nur fünf Ordnerebenen tief. Innerhalb dieser Grenzen ist der Treffer der einzige. Unter /storage lag in Suchtiefe kein weiteres Repository. Die globale Git-Konfiguration dieses Systems setzt weder core.fsmonitor noch core.hooksPath, beide Abfragen kommen leer zurück.

Der zweite Teil der Bilanz ist unbequemer: Der eigene Agent gehört vermutlich zu der Liste. Das Deck läuft mit Hermes Agent 0.20.6, und die Recherche berichtet die Schwachstelle für Hermes bis einschließlich 0.21.0 als ungeschlossen. Ich habe keine eigene Sicherheitstestreihe gefahren, die Zuordnung beruht auf der Versionsspanne im Bericht plus eigener Versionsermittlung. Die Ausnutzung braucht ein Verzeichnis mit mitgelieferter .git-Konfiguration, und genau so ein Verzeichnis wird auf diesem System nicht geöffnet, bevor es geprüft ist. Das ist eine Arbeitsregel, kein Patch, und sie steht in der nächsten Abteilung.

Diese Transparenz gehört für mich zum Projekt dazu: Ein Blog, der Agentenbetrieb dokumentiert, muss auch schreiben dürfen, wenn der eigene Agent in einer Sicherheitsliste auftaucht. Der Angriff trifft nicht die Hardware und nicht das Modell, sondern eine Versionsspanne eines Werkzeugs, mit dem hier täglich gearbeitet wird. Wer denselben Stack fährt, findet seine Version mit hermes --version und vergleicht sie mit der Tabelle oben.

Was du konkret tust

Bevor es an die eigenen Schritte geht, eine Anmerkung zur Haltbarkeit: Die Tabelle weiter oben hat einen Stichtag, den 01.09.2026, die eigenen Messwerte in diesem Beitrag stammen vom 05.09.2026. Patch-Status ist eine Bewegungsgröße, vier der acht Befunde waren am Stichtag offen und können bei deiner Lektüre längst geschlossen sein. Prüfe die Version deiner Werkzeuge zum Lesezeitpunkt, nicht die Erinnerung an diesen Text.

Drei Schritte, ohne Zusatzwerkzeuge. Erstens: Projekte, die als Ordner ankommen, vor dem Öffnen mit dem Agenten prüfen. Der Blick gilt der Datei .git/config, und jede Zeile, die ein Programm oder einen Pfad benennt, ist ein Stopp-Schild, core.fsmonitor ist der bekannteste Kandidat. Wer mag, nutzt git config --get core.fsmonitor und git config --get core.hooksPath im Projektordner, jede Ausgabe außer leer oder false braucht eine Erklärung.

Zweitens: Eigene Skripte, die Git aufrufen, können die mitgelieferte Einstellung für den einzelnen Aufruf abstellen. Der Aufruf git -c core.fsmonitor=false status ignoriert die Projekt-Einstellung, genau das empfehlen auch die Rechercheure den Agenten-Herstellern für ihre Hintergrund-Aufrufe. Drittens: Die Version des eigenen Agenten gegen die Tabelle prüfen und Werkzeug und Git aktuell halten. Zwei gepatchte Einträge der Liste wurden innerhalb von Wochen geschlossen, weil Berichte vorlagen, das Fenster lebt von Updates.

Und die Struktur, die hier auf dem Deck ohnehin gilt, hilft auch bei dieser Klasse von Angriff: Lesen und Bauen bleiben getrennt. Fremdes Material kommt als Text oder Link in die Planung, gebaut wird in Verzeichnissen, die dieses Material nicht als Ordner enthalten. Wer beides in denselben Topf wirft, verliert bei einem Treffer beides gleichzeitig. Wie der Stack im Ganzen aussieht, steht im Beitrag zum Agenten-Stack auf dem 45-Euro-Handy.

Interner Beitrag: Der Agenten-Stack der Profis läuft auf einem 45-Euro-Handy ↗

Die ehrlichen Grenzen

Vier Einschränkungen gehören in diesen Text. Erstens: Ich habe keine der acht Schwachstellen selbst ausgenutzt, meine Grundlage sind die gelesenen Analysen von Manifold Security und Sonar plus die eigenen Messwerte vom 05.09.2026. Zweitens: Die Patch-Lage ändert sich, die Tabelle zeigt den Stand vom 01.09.2026, nicht den Zeitpunkt deiner Lektüre. Drittens: Die Git-Dokumentation beschreibt core.fsmonitor als beabsichtigtes Verhalten, der Angriff nutzt beabsichtigte Mechanik, es gibt also keinen Fehler, den Git allein beheben könnte, die Absicherung liegt bei Werkzeug und Nutzer.

Viertens: Ein abgeschalteter Schalter ist keine allgemeine Entwarnung. Die Recherche benennt mindestens eine Lücke, die auf einem anderen Schalter derselben Art beruht, dessen Name wegen ausstehender Reparatur bewusst nicht genannt wird. Was bleibt, ist eine Haltung: Ordner von Fremden vor dem Öffnen ansehen, Hintergrund-Aufrufe härten, Versionen aktuell halten. Mehr verspricht dieser Text nicht, und weniger braucht es nicht.

FAQ
Tut ein git clone wirklich nichts?

Richtig, ein gewöhnlicher Klon übernimmt die lokale .git/config des Quell-Repositorys nicht. Sonar (2022) und Manifold Security (2026) beschreiben beide, dass der Angriff Projekte braucht, die als Dateisammlung ankommen: Zip-Archiv, Laufwerksordner, Sync-Dienst, USB-Stick.

Wie finde ich heraus, ob mein Agent betroffen ist?

Prüfe zuerst die Version, bei Hermes Agent zum Beispiel mit hermes --version, und vergleiche sie mit der Zeitachse in diesem Beitrag. Zusätzlich zählt der Blick in die .git/config jedes Projektordners, bevor ein Agent ihn öffnet: Jede Zeile, die ein Programm oder einen Pfad benennt, braucht eine Erklärung.

Was ist der Unterschied zwischen globaler und lokaler Git-Konfiguration?

Die globale Konfiguration liegt in deinem Konto, etwa in ~/.gitconfig, und kommt nicht per Projekt mit. Die lokale Konfiguration liegt im Projektordner unter .git/config und kann als Teil des Ordners mitgeliefert werden, genau deshalb ist sie der Angriffspunkt. Auf diesem Deck sind beide fsmonitor- und hooksPath-Einträge global nicht gesetzt, gemessen am 05.09.2026.

Reicht es, core.fsmonitor abzuschalten?

Es entfernt den bekanntesten Auslöser, aber nicht die ganze Klasse. Die Recherche benennt einen zweiten Weg bei Claude Code, der auf einem anderen Schalter derselben Art beruht, und vier der acht Befunde waren beim Erscheinen ungepatcht. Updates von Agent und Git bleiben deshalb Teil der Antwort.

Warum taucht das Thema erst 2026 auf, wenn Sonar es 2022 schon beschrieb?

Sonar zeigte 2022 die Mechanik an Editoren und Terminal-Prompts, der Aufruf sollte von der Nutzeroberfläche kommen. GitSpawn (2026) verlagert den Blick auf CLI-Agenten, die Git selbstständig im Hintergrund aufrufen, teils vor dem Trust-Hinweis. Die Angriffsfläche ist dieselbe Mechanik an einem neuen Aufrufer.

Über den Autor

Ich bin Marcel, Grafikdesigner und Betreiber der d4sn3st-Seiten. Seit 2026 betreibe ich KI-Agenten auf einem gebrauchten Google Pixel 6a und dokumentiere den Betrieb auf diesem Blog, inklusive der Seiten, die nicht glänzen. Diesem Beitrag liegen die gelesenen Analysen von Manifold Security und Sonar zugrunde sowie eigene Messwerte vom 05.09.2026: die .git-Zählung, die globale Config-Prüfung und die eigene Hermes-Version. Zuletzt fachlich geprüft am 05.09.2026.

Quellen

Manifold Security: GitSpawn, A Single Flaw Lets Untrusted Repos Run Code (01.09.2026) ↗
SonarSource: Securing Developer Tools, Git Integrations (15.03.2022) ↗
The Hacker News: Malicious .git Configs Can Make AI Agents Run Attacker Code (02.09.2026) ↗
Git-Dokumentation: git-config, core.fsmonitor ↗