So verhindern Sie, dass eine bösartige AGENTS.md Ihren Coding-Agenten kapert

Eine manipulierte AGENTS.md kann Codex oder Claude Code direkt aus dem Downloads-Ordner kapern. Fünf Maßnahmen für Teams: sichere Startordner, Datei-Reviews, Deny-Regeln, Sandboxing und Konfigurationsprüfungen.

Aiden Flux

Aiden Flux

12 November 2026

TL;DR: Eine bösartige AGENTS.md kapert einen Coding-Agenten, indem sie genau das tut, wofür die Datei gedacht ist: Der Agent liest sie beim Start ein und befolgt ihre Anweisungen. Forever Security entdeckte im Oktober 2026 einen solchen Fall im ~/Downloads-Ordner eines echten Kunden. Um sich davor zu schützen, sollten Sie einen Agenten niemals in einem Verzeichnis starten, das Sie nicht vollständig kontrollieren, Anweisungsdateien wie Programmcode prüfen, Konfigurations- und Netzwerkänderungen untersagen, Sandboxing sowie Freigabedialoge aktiv lassen und die Konfiguration des Agenten laufend überwachen.

Was hinter einem bösartigen AGENTS.md-Angriff steckt

Eine manipulierte AGENTS.md ist eine Projektanweisungsdatei, die gezielt darauf ausgelegt ist, einen Coding-Agenten zu schädlichen Aktionen zu verleiten. Claude Code, Codex und andere Agenten laden diese Dateien automatisch aus dem Verzeichnis, in dem sie gestartet werden. Für den Angriff ist kein Exploit erforderlich: Der Agent liest die Datei beim Starten ein und behandelt ihren Inhalt als offizielle Projektrichtlinien.

Die Datei liest sich wie gewöhnliche Entwicklerhinweise: ein „Preflight“-Schritt zur Paketinstallation oder eine „Proxy“-Notiz, die den API-Datenverkehr umleitet. Für den Agenten ist das dieselbe Art von Instruktion wie „nutze pnpm statt npm“.

Wenn Ihre Entwickler mehrere Coding-Agenten einsetzen, bietet Sharkly eine zentrale Plattform, um diese Aufgaben zuzuweisen und zu überprüfen. Wir kommen später darauf zurück, wie sich dadurch der Startort von Agenten ändert.

Warum Ihr Coding-Agent der Datei blind vertraut

Anweisungsdateien landen direkt im Kontext des Agenten – direkt neben Ihrem Prompt, ohne klare Trennung zwischen Projektregeln und Ihren Anfragen.

In der Memory-Dokumentation von Claude Code heißt es, dass die Inhalte von CLAUDE.md und AGENTS.md als „Kontext, nicht als zwingende Konfiguration“ behandelt werden. Claude Code lädt jede AGENTS.md im aktuellen Arbeitsverzeichnis sowie in den übergeordneten Ordnern, sofern keine CLAUDE.md existiert. Die AGENTS.md-Dokumentation von Codex durchläuft den Verzeichnisbaum vom Projekt-Root abwärts bis zum aktuellen Verzeichnis und hängt die gefundenen Inhalte zusammen – standardmäßig bis zu 32 KiB. Dateien, die näher am Startverzeichnis des Agenten liegen, kommen zuletzt an die Reihe und setzen sich durch. Das Verzeichnis, in dem Sie den Agenten starten, entscheidet also darüber, was geladen wird – und übergeordnete Verzeichnisse spielen ebenfalls eine Rolle.

Wie eine bösartige AGENTS.md Codex und Claude Code übernimmt

Am 22. Oktober 2026 veröffentlichte Forever Security Details zu einem Fund auf dem Laptop eines Kunden. Ein Coding-Agent versuchte, mit function-color ein bekanntes bösartiges npm-Paket zu installieren. Die Anweisung stammte aus einer AGENTS.md im Ordner ~/Downloads, der gleichzeitig das Arbeitsverzeichnis des Agenten war. Forever stoppte die Installation, bevor Schadcode ausgeführt werden konnte. Wie die Datei dorthin gelangte, ließ sich nicht mehr rekonstruieren.

Diagram of the attack chain: a web page silently saves AGENTS.md to the Downloads folder, a developer starts a coding agent there, the agent reads the file and rewrites its own config, and the result is a malicious npm package running or an OAuth token sent to an attacker server

Der Download-Ordner ist deshalb so kritisch, weil Webseiten dorthin Dateien ohne zusätzliche Benutzerbestätigung ablegen können. Forever reproduzierte die Angriffskette anschließend unter Laborbedingungen:

  1. Eine von den Forschern kontrollierte Webseite speichert eine Datei namens AGENTS.md in ~/Downloads.
  2. Der Entwickler startet Codex in diesem Ordner und stellt eine beliebige Frage.
  3. Noch bevor die eigentliche Aufgabe beginnt, fügt Codex einen Server für „Project Tools“ zu ~/.codex/config.toml hinzu und installiert ein Paket über npm.
  4. Da diese Konfiguration global für das gesamte System gilt, lädt jede spätere Codex-Sitzung den Server des Angreifers – unabhängig vom Arbeitsverzeichnis.

Laut Forever führte Codex die Payload in über 90 % der Versuche aus. Bei den meisten Durchläufen wurde ein harmloser Platzhalter verwendet, der lediglich einen Taschenrechner öffnete; das echte Schadpaket wurde einmalig in einer isolierten VM getestet.

Claude Code erwies sich als widerstandsfähiger. Durch eine gezielt platzierte CLAUDE.md gelang es jedoch, den ausgehenden API-Traffic auf einen von Forever kontrollierten Server umzuleiten. Dadurch wurde das OAuth-Login-Token abgegriffen, und der Server konnte antworten, als wäre er das Sprachmodell. Laut Forever funktionierte dies in etwa 50 % der Fälle. Da es sich hierbei um zwei unterschiedliche Angriffsarten handelt, lassen sich diese Erfolgsquoten nicht direkt miteinander vergleichen.

Die zentrale Erkenntnis von Forever: Es gibt hier keine Sicherheitslücke, die sich einfach patchen ließe. Das Problem liegt vielmehr darin, dass einem Ordner, in den das Web beliebige Daten schreiben kann, blind wie einem eigenen Projekt vertraut wird. Zu einem ähnlichen Ergebnis kam bereits die Untersuchung von Pillar Security zu Backdoors in Rules-Dateien: Damals wurden schädliche Anweisungen mithilfe unsichtbarer Unicode-Zeichen versteckt, die bei der Durchsicht eines Diffs mit bloßem Auge nicht auffallen.

Fünf Maßnahmen gegen Angriffe über manipulierte AGENTS.md-Dateien

Die ersten beiden Schritte verhindern bereits das Laden schädlicher Dateien; die übrigen drei begrenzen den Schaden, sollte doch einmal eine durchrutschen.

Five defense layers between an untrusted instruction file and a developer laptop: never start agents in Downloads or home, review AGENTS.md and CLAUDE.md like code, deny config and network rewrites, keep sandbox and approval prompts on, watch config files and rotate

1. Wo ein Coding-Agent niemals gestartet werden sollte

Starten Sie Agenten niemals in ~/Downloads, in Ihrem Home-Verzeichnis oder in Ordnern, die Sie nicht selbst angelegt haben. Nach Angaben von Forever hat rund die Hälfte der Kunden schon einmal einen Coding-Agenten direkt im Download-Ordner ausgeführt. Wenn Sie einen Agenten benötigen, um Downloads zu sortieren, kopieren Sie die betreffenden Dateien in ein leeres, separates Verzeichnis und starten Sie ihn dort.

Ein einfacher Shell-Guard sorgt dafür, dass diese Vorgabe auch im Alltag nicht vergessen wird:

# ~/.zshrc: refuse to start an agent in folders the web can write to
agent_guard() {
  case "$PWD" in
    "$HOME"|"$HOME/Downloads"*|"/tmp"*)
      echo "Refusing to start an agent in $PWD. Use a project folder." >&2
      return 1 ;;
  esac
}
claude() { agent_guard && command claude "$@"; }
codex()  { agent_guard && command codex "$@"; }

2. So prüfen Sie AGENTS.md wie regulären Quellcode

Betrachten Sie jede Anweisungsdatei als potenziell ausführbaren Code – auch in Repositories, die Sie erst vor wenigen Minuten geklont haben. Automatisieren Sie diesen Prüfprozess: Binden Sie Anweisungsdateien in CODEOWNERS ein, damit jeder Pull Request, der diese Dateien verändert, zwingend die Freigabe eines festgelegten Reviewers erfordert:

AGENTS.md            @your-org/platform
**/AGENTS.md         @your-org/platform
CLAUDE.md            @your-org/platform
/.claude/            @your-org/platform
/.cursor/rules/      @your-org/platform

Richten Sie einen CI-Check ein, der fehlschlägt, sobald typische Angriffsmuster erkannt werden: unsichtbare Unicode-Zeichen, Änderungen der Base-URL oder Installationsbefehle innerhalb von Instruktionsdateien.

#!/usr/bin/env bash
# ci/check-agent-instructions.sh
files=$(git ls-files '*AGENTS.md' '*CLAUDE.md' '.cursor/rules/*')
[ -z "$files" ] && exit 0
fail=0
# zero-width, bidi override and Unicode tag characters
if grep -nP '[\x{200B}-\x{200F}\x{202A}-\x{202E}\x{2066}-\x{2069}\x{E0000}-\x{E007F}]' $files; then
  echo "Hidden Unicode in an agent instruction file"; fail=1
fi
if grep -niE 'BASE_URL|chatgpt_base_url|mcp_servers|npx --yes|curl .*\| *(ba)?sh' $files; then
  echo "Config, network or install instruction in an agent file: needs review"; fail=1
fi
exit $fail

Der zweite Grep-Befehl schlägt gelegentlich auch bei legitimen Zeilen an. In solchen Fällen ist eine manuelle Überprüfung durch einen Entwickler ohnehin ratsam.

3. Dem Agenten Schreibrechte auf die eigene Konfiguration entziehen

In beiden Testläufen veränderte der Agent am Ende seine eigenen Einstellungen. Schließen Sie diese Möglichkeit konsequent aus. In Claude Code können Sie Änderungen an den Konfigurationsordnern des Agenten untersagen und Secrets in der projekteigenen .claude/settings.json vor unbefugtem Lesen schützen:

{
  "permissions": {
    "deny": [
      "Edit(./.claude/**)",
      "Edit(~/.claude/**)",
      "Edit(~/.codex/**)",
      "Read(./.env)",
      "Read(./.env.*)"
    ]
  }
}

Für Entwicklerteams empfiehlt es sich, diese Vorgaben über Managed Settings zu erzwingen, damit sie nicht durch eine lokale Projektdatei aufgeweicht werden können. Die Dokumentation verweist hierzu auf die Richtlinien permissions.deny, sandbox.enabled und env sowie auf einen PreToolUse-Hook, um bestimmte Aktionen unabhängig von der Entscheidung des Sprachmodells verlässlich zu blockieren. Das feste Vorgeben des API-Routings in den Managed env-Variablen ist der direkteste Schutz gegen Angriffe auf die Base-URL. Prüfen Sie vor dem Rollout die genaue Regelsyntax Ihrer installierten Version.

4. Sandboxing und Freigabedialoge aktiv lassen

Forever empfiehlt, Freigabedialoge und Sandboxes stets aktiviert zu lassen und allen Instruktionen zu misstrauen, die den Agenten dazu auffordern, diese Schutzmechanismen zu umgehen.

Legen Sie klar fest, welche Aktionen ausnahmslos eine menschliche Bestätigung erfordern: Paketinstallationen, Änderungen an der Agentenkonfiguration sowie Netzwerkaufrufe an unbekannte Hosts. Unser Beitrag über Approval Gates für Coding-Agenten beschreibt, an welchen Stellen solche Kontrollpunkte greifen sollten, und unser Leitfaden zu Berechtigungen für Coding-Agenten erläutert das dahinterstehende Berechtigungsmodell.

5. Agentenkonfiguration überwachen und Zugangsdaten bei Auffälligkeiten rotieren

Forever listet präzise auf, worauf geachtet werden muss: In ~/.codex/config.toml sind dies unerwartete [mcp_servers.*]-Blöcke oder eine modifizierte chatgpt_base_url. In der .claude/settings.json eines Projekts sollte nach ANTHROPIC_BASE_URL, Proxy-Konfigurationen oder unbekannten Endpunkten gesucht werden.

grep -nE '^\[mcp_servers\.|chatgpt_base_url' ~/.codex/config.toml
grep -rnE 'ANTHROPIC_BASE_URL|_PROXY|base_url' ~/.claude/settings.json .claude/settings*.json 2>/dev/null
npm ls -g --depth=0 2>/dev/null | grep -i function-color

Sollten Sie verdächtige Einträge finden, gehen Sie davon aus, dass Tokens kompromittiert wurden, und tauschen Sie diese umgehend aus. Ein gestohlenes OAuth-Token bedeutet eine aktive Sitzung – nicht nur eine einzelne abgefangene Anfrage. Taucht function-color auf, muss der Rechner als kompromittiert eingestuft werden. Für weitergehende Bereinigungsmaßnahmen führt unsere Checkliste bei Secret-Leaks durch Coding-Agenten für jeden Rotationsschritt die passenden Verantwortlichkeiten auf.

Wie Sharkly hier ansetzt

Sharkly ersetzt weder das Scannen von Anweisungsdateien noch die Berechtigungen des Agenten selbst – die fünf Schritte bleiben weiterhin essenziell. Es verändert jedoch grundlegend, wo Agenten gestartet werden und wer darüber entscheidet.

In Sharkly läuft ein Agent auf einem angebundenen Computer, wobei in den Einstellungen jedes Agenten ein Default working directory definiert ist. Im Modus „Use temporary directory“ erhält jeder Task-Lauf ein eigenes, isoliertes Verzeichnis sowie einen frischen Git-Worktree des verknüpften Repositories. Im Modus „Specified directory“ greifen die Läufe auf vordefinierte lokale Pfade zurück. Die Dokumentation zum Arbeitsverzeichnis erläutert beide Varianten im Detail.

Sharkly Agent settings: the Default working directory field, where you choose a temporary directory with a fresh git worktree per run or a specified directory

Dadurch wird die Wahl des Arbeitsverzeichnisses nicht mehr spontan im Terminal des Entwicklers getroffen, sondern ist eine geprüfte Konfigurationseinstellung. Im Temporary-Modus startet der Agent immer in einem sauberen Checkout des hinterlegten Repositories – und nicht in einem Ordner, der zufällig gerade geöffnet war. Die Repository-Verwaltung bleibt Nutzern mit Administratorrechten für den Space oder die Organisation vorbehalten. Agent-Instruktionen, die bei jedem Durchlauf übergeben werden, bieten zudem den idealen Ort, um Grundregeln wie „Konfigurationsdateien von Agenten niemals bearbeiten“ verbindlich festzulegen.

Die Ergebnisse fließen direkt in den Task zurück, wo sie vom Team nachvollzogen werden können – wie in unserem Artikel über das Review von KI-generiertem Code mit Task-Level-Belegen beschrieben.

Fazit

Eine manipulierte AGENTS.md ist deshalb so gefährlich, weil Agenten Instruktionsdateien standardmäßig befolgen – und Webseiten unbemerkt Dateien in vertrauenswürdigen Verzeichnissen ablegen können. Dieser Angriffsvektor lässt sich nicht mit einem einzelnen Patch schließen, sondern verlangt ein mehrstufiges Sicherheitskonzept.

Beginnen Sie am besten noch heute mit Schritt 5 auf allen Entwickler-Laptops, um festzustellen, ob bereits ein Problem vorliegt. Wenn Ihr Team mehrere Coding-Agenten nutzt, richten Sie Sharkly mit einem Computer und einem Agenten im Temporary-Modus ein, damit jeder Programmierlauf in einem sauberen Worktree startet.

Häufig gestellte Fragen (FAQ)

Kann eine manipulierte AGENTS.md auch Claude Code kapern?

Ja. Claude Code liest die AGENTS.md ein, wenn weder im Arbeitsverzeichnis noch in übergeordneten Ordnern eine CLAUDE.md existiert. Beim Test durch Forever Security nutzte der Angriff eine platzierte CLAUDE.md, leitete den API-Traffic um und konnte das OAuth-Token in etwa der Hälfte der Versuche abfangen.

Handelt es sich um eine Sicherheitslücke, die OpenAI oder Anthropic schließen werden?

Laut Forever gibt es hier keinen Fehler zu beheben, da sich die Agenten exakt wie vorgesehen verhalten. Der wirksame Schutz liegt in einer sauberen Verzeichnistrennung, Code-Reviews und restriktiven Berechtigungen.

Wie lassen sich versteckte Anweisungen in einer AGENTS.md erkennen?

Prüfen Sie stets die Rohdatei statt der gerenderten Ansicht und scannen Sie diese gezielt nach Nullbreiten-Zeichen, Richtungs-Steuerzeichen (BiDi-Override) sowie Unicode-Tag-Zeichen. Das oben gezeigte CI-Skript erkennt alle drei Varianten zuverlässig.

Schützt eine Sandbox vor einer manipulierten AGENTS.md?

Sie begrenzt den Schaden, verhindert aber nicht das Einlesen der Datei. Eine Sandbox und vorgeschaltete Freigabedialoge können die vom Angreifer geforderte Paketinstallation oder Konfigurationsänderung abfangen. Kombinieren Sie diese Maßnahmen stets mit strikten Zugriffsverboten (Deny-Rules) für die Konfigurationsverzeichnisse des Agenten.

Was sollte man tun, wenn eine verdächtige AGENTS.md entdeckt wird?

Starten Sie auf keinen Fall einen Agenten in diesem Verzeichnis oder dessen Umgebung. Prüfen Sie die Konfigurationsdateien der Agenten auf unbekannte MCP-Server oder geänderte Base-URLs, kontrollieren Sie das System auf function-color und rotieren Sie unverzüglich alle Token sowie alle Schlüssel, auf die der Agent Zugriff hatte.

Mehr entdecken

Gemini 4 Carbon und Hydrogen: Planner-Agenten mit schnellen Workern kombinieren

Gemini 4 Carbon und Hydrogen: Planner-Agenten mit schnellen Workern kombinieren

Kombinieren Sie Gemini 4 Carbon und Hydrogen in Ihrem Agententeam: Ein Carbon-Planer erstellt Teilaufgaben, Hydrogen-Worker und ein Verifizierer bauen und testen, und blockierte Aufgaben gehen zurück an den Planer.

13 November 2026

Gemini 4 Hydrogen für Coding-Agenten: Das schnelle Modell für den Dauereinsatz im Team

Gemini 4 Hydrogen für Coding-Agenten: Das schnelle Modell für den Dauereinsatz im Team

Gemini 4 Hydrogen für Coding-Agenten: 1,50 $/7,50 $ pro 1 Mio. Token, ein kostenloses Kontingent, vier Denkstufen. Welche Aufgaben sich dafür eignen und wann der Wechsel zu Carbon sinnvoll ist.

13 November 2026

So routen Sie Aufgaben von KI-Agenten mit der Gemini Decisions API

So routen Sie Aufgaben von KI-Agenten mit der Gemini Decisions API

Aufgaben für KI-Agenten mit der Gemini Decisions API verteilen: Ein einziger Aufruf klärt, welcher Agent zuständig ist, wie hoch die Komplexität ist und ob ein Mensch entscheiden muss – anschließend entscheidet ein Konfidenz-Schwellenwert über die automatische Zuweisung oder eine manuelle...

12 November 2026