Kann eine AGENTS.md im Downloads-Ordner Codex und Claude Code kapern? config.toml und settings.json prüfen, vorbeugen und den Key tauschen (mit Prüfbefehlen)

Laut einem Bericht von Forever Security kann eine in ~/Downloads abgelegte AGENTS.md Codex dazu bringen, einen MCP-Server in die globale config.toml einzutragen und ein bösartiges npm-Paket zu installieren; eine gezielt gebaute CLAUDE.md kann Claude Code dazu bringen, ANTHROPIC_BASE_URL auf den Server eines Angreifers umzubiegen. Dieser Leitfaden liefert Prüfbefehle für macOS/Linux und PowerShell, zeigt eine korrekte AICodeWith-Konfiguration, berichtet unsere trust_level-Tests und erklärt, wie Sie nach einem Vorfall den Key tauschen.

10 分钟阅读
Kann eine AGENTS.md im Downloads-Ordner Codex und Claude Code kapern? config.toml und settings.json prüfen, vorbeugen und den Key tauschen (mit Prüfbefehlen)

Kurz gesagt: Laut dem Bericht von Forever Security vom 22. Oktober hat jemand im Ordner ~/Downloads auf dem Rechner eines echten Kunden eine als Engineering-Richtlinien getarnte Datei abgelegt: AGENTS.md. Startet Codex in diesem Ordner, folgt es der Datei und trägt einen MCP-Server in die globale ~/.codex/config.toml ein, über den dann das bösartige npm-Paket function-color installiert wird. Die Forscher bauten außerdem eine CLAUDE.md, die Claude Code dazu bringt, in die .claude/settings.json des Projekts eine ANTHROPIC_BASE_URL zu schreiben, die auf ihren Server zeigt – damit erhalten sie das Login-Token.

Wer einen Drittanbieter-API-Key nutzt, ändert ohnehin base_url, model_provider und ANTHROPIC_BASE_URL. Am wichtigsten ist deshalb: Unterscheiden Sie die Adressen, die Sie selbst gesetzt haben, von denen, die jemand hinzugefügt hat. Die Befehle unten dauern etwa eine Minute.

Das Wichtigste

  • Beide Clients wurden vorgeführt: Laut Bericht ließ sich Codex in mehr als neun von zehn Tests zur Installation des Pakets bringen; Claude Code war schwerer zu täuschen und schrieb die bösartigen Einstellungen in etwa der Hälfte der Tests. Keiner der beiden hat einen Bug im eigentlichen Sinn – beide tun, was die Anweisungsdatei sagt.
  • Codex ändert seine globale Konfiguration: ~/.codex/config.toml gilt für alle Codex-Sitzungen auf dem Rechner, der MCP-Server des Angreifers lädt also weiter, auch wenn Sie den Downloads-Ordner verlassen.
  • Claude Code ändert die Projektkonfiguration: Die Projekt-.claude/settings.json kann eine ANTHROPIC_BASE_URL setzen, die die global gesetzte AICodeWith-Adresse überschreibt. In unserem Test auf der Box lieferte claude -p nach dieser einen zusätzlichen Zeile im Projekt 90 Sekunden lang keine Antwort; nach dem Entfernen antwortete es normal in 2,4 Sekunden.
  • Was zu prüfen ist: Bei Codex [mcp_servers.*] und base_url; bei Claude Code in jeder settings.json nach ANTHROPIC_BASE_URL suchen. Die korrekten AICodeWith-Adressen stehen weiter unten.
  • trust_level funktioniert weiterhin: Getestet mit Codex CLI 0.164.0 verhindert [projects."<path>"] trust_level = "untrusted", dass die AGENTS.md dieses Ordners geladen wird. Das ist nicht dasselbe wie das abgeschaffte approval_policy = "untrusted".
  • Nach einem Vorfall: Verdächtige Konfigurationsblöcke löschen, den alten Key im Dashboard löschen und einen neuen anlegen; wer sich bei Claude Code mit einem offiziellen Konto anmeldet, führt /logout aus und meldet sich neu an.

API Key erstellen – derselbe Key für Claude Code und Codex →

Was passiert ist: wie die beiden Clients missbraucht wurden

Laut The Hacker News und BleepingComputer stoppte Forever Security auf einem Kundenrechner den Versuch von Codex, function-color zu installieren, und verfolgte die Anweisung zurück in den Ordner ~/Downloads, zu einer Datei namens AGENTS.md. Wie die Datei dorthin kam, konnten sie nicht klären; sie bauten aber eine Demo-Seite, die beim Öffnen still eine AGENTS.md in den Downloads-Ordner lädt. Chrome, Edge und Firefox speichern Dateien standardmäßig ohne Nachfrage in diesem Ordner.

CodexClaude Code
Präparierte DateiAGENTS.md (aus dem echten Angriff, ein etwa 13 KB großes „Engineering-Richtlinien“-Dokument)CLAUDE.md (von den Forschern nach dem echten Vorbild gebaut)
Geänderte KonfigurationGlobal ~/.codex/config.toml, angehängt wird [mcp_servers.project-tools]Projekt .claude/settings.json, geschrieben wird ANTHROPIC_BASE_URL
Folgen (laut Bericht)Der MCP-Server führt beim Start einen Befehl aus und installiert function-color; danach lädt er bei jedem Codex-Start, in jedem OrdnerAnfragen und das OAuth-Token gehen an den Server des Angreifers, der sich zudem als Modell ausgeben und auszuführende Befehle zurückgeben kann
Erfolgsquote laut BerichtMehr als neun von zehnEinstellungen in etwa jedem zweiten Fall geschrieben

Laut Bericht lässt die Codex-Datei Codex außerdem mit --dangerously-bypass-approvals-and-sandbox ein zweites codex exec starten, um trotz Sandbox ins Netz zu kommen. Forever sieht bei keinem der beiden Anbieter etwas zu „patchen“, weil die Clients einfach der Anweisungsdatei folgen – der Schutz liegt also bei Ihnen.

Vor der Prüfung: So sieht eine korrekte AICodeWith-Konfiguration aus

Wenn Sie AICodeWith nach dem Leitfaden zur Codex config.toml eingerichtet haben, sollte der adressbezogene Teil Ihrer globalen ~/.codex/config.toml so aussehen und nicht mehr enthalten:

toml
model_provider = "aicodewith"
model = "gpt-6.1-sol"

[model_providers.aicodewith]
name = "aicodewith"
base_url = "https://api.aicodewith.ai/chatgpt/v1"
wire_api = "responses"
experimental_bearer_token = "YOUR_API_KEY"

Wenn Sie Claude Code mit der Anleitung zur Drittanbieter-API für Claude Code eingerichtet haben, sollte Ihre ~/.claude/settings.json Folgendes enthalten:

json
{
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.aicodewith.ai",
    "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY"
  }
}

Die Faustregel ist einfach: Ist eine Adresse nicht api.aicodewith.ai und haben Sie sie nicht selbst eingetragen, behandeln Sie sie als verdächtig. Bei einem anderen Dienst vergleichen Sie mit der Adresse, die Sie ursprünglich eingetragen haben.

Prüfbefehle: macOS / Linux

Fügen Sie den ganzen Block in ein Terminal ein. Er liest nur und ändert nichts:

bash
echo "== 1 Codex global config =="
grep -nE '^\[mcp_servers|^\[model_providers|^[[:space:]]*(model_provider|base_url|chatgpt_base_url|openai_base_url|command|args)[[:space:]]*=' ~/.codex/config.toml
echo "== 2 project .codex/config.toml =="
find ~ -maxdepth 6 -path '*/.codex/config.toml' -not -path "$HOME/.codex/*" 2>/dev/null
echo "== 3 Claude Code settings =="
find ~ -maxdepth 6 \( -path '*/.claude/settings.json' -o -path '*/.claude/settings.local.json' \) 2>/dev/null | xargs grep -nE 'ANTHROPIC_BASE_URL|HTTPS?_PROXY|apiKeyHelper' 2>/dev/null
echo "== 4 instruction files in Downloads =="
ls -la ~/Downloads/AGENTS.md ~/Downloads/CLAUDE.md ~/Downloads/.claude ~/Downloads/.codex 2>/dev/null
echo "== 5 function-color =="
find ~ /tmp -maxdepth 6 -type d -name function-color -path '*node_modules*' 2>/dev/null

Listen Sie dann die MCP-Server mit dem jeweiligen Client-Befehl auf; die Ergebnisse sollten übereinstimmen:

bash
codex mcp list
claude mcp list

Prüfbefehle: Windows PowerShell

powershell
"== 1 Codex global config =="
Select-String -Path "$env:USERPROFILE\.codex\config.toml" -Pattern '^\[mcp_servers','^\[model_providers','^\s*(model_provider|base_url|chatgpt_base_url|openai_base_url|command|args)\s*='
"== 2 project .codex / .claude settings =="
Get-ChildItem $env:USERPROFILE -Recurse -Depth 6 -Force -File -ErrorAction SilentlyContinue -Include config.toml,settings.json,settings.local.json | Where-Object { $_.Directory.Name -in '.codex','.claude' } | Select-String -Pattern '^\[mcp_servers','base_url','ANTHROPIC_BASE_URL','HTTPS?_PROXY','apiKeyHelper'
"== 3 instruction files in Downloads =="
Get-ChildItem "$env:USERPROFILE\Downloads" -Force -ErrorAction SilentlyContinue | Where-Object { $_.Name -in 'AGENTS.md','CLAUDE.md','.claude','.codex' }

Test: So sieht die Ausgabe bei sauberer Konfiguration und mit hinzugefügten Einträgen aus

Wir haben die Befehle oben auf der Box in einem isolierten Test-Home-Verzeichnis ausgeführt (Codex CLI 0.164.0, Claude Code 2.1.310), nur mit einem AICodeWith-Test-Key. Wir haben weder ein echtes bösartiges Paket noch eine Angriffsdatei ausgeführt.

Saubere Konfiguration: Die bash-Version war nach etwa 0,08 Sekunden fertig:

text
== 1 Codex global config ==
1:model_provider = "aicodewith"
5:[model_providers.aicodewith]
7:base_url = "https://api.aicodewith.ai/chatgpt/v1"
== 2 project .codex/config.toml ==
== 3 Claude Code settings ==
/home/you/.claude/settings.json:3:    "ANTHROPIC_BASE_URL": "https://api.aicodewith.ai",
== 4 instruction files in Downloads ==
== 5 function-color ==

Dann haben wir von Hand drei harmlose Demo-Einträge hinzugefügt: einen Server, der nur echo ausführt, eingetragen als [mcp_servers.project-tools]; eine Projekt-.claude/settings.json mit einer ANTHROPIC_BASE_URL, die auf eine nicht existierende Domain zeigt; und eine leere ~/Downloads/AGENTS.md. Zweiter Durchlauf (etwa 0,06 Sekunden):

text
== 1 Codex global config ==
1:model_provider = "aicodewith"
5:[model_providers.aicodewith]
7:base_url = "https://api.aicodewith.ai/chatgpt/v1"
11:[mcp_servers.project-tools]
12:command = "echo"
13:args = ["harmless-demo"]
== 3 Claude Code settings ==
/home/you/proj/demo/.claude/settings.json:1:{"env":{"ANTHROPIC_BASE_URL":"https://gateway.example.invalid"}}
/home/you/.claude/settings.json:3:    "ANTHROPIC_BASE_URL": "https://api.aicodewith.ai",
== 4 instruction files in Downloads ==
-rw-r--r-- 1 you you 7 Oct 28 00:25 /home/you/Downloads/AGENTS.md

codex mcp list listet ihn ebenfalls auf:

text
Name           Command  Args           Env  Cwd  Status   Auth
project-tools  echo     harmless-demo  -    -    enabled  Unsupported

Die PowerShell-Version (pwsh 7) war im selben Verzeichnis nach etwa 0,4 Sekunden fertig und fand alle drei.

Die Projektadresse überschreibt die globale: Die globale ~/.claude/settings.json zeigt auf AICodeWith, doch nach der zusätzlichen ANTHROPIC_BASE_URL-Zeile im Projekt gab claude -p "Reply OK" 90 Sekunden lang überhaupt keine Antwort (die Anfrage ging an die nicht existierende Adresse). Nach dem Löschen der Projektzeile kam nach 2,4 Sekunden OK. Genau so missbraucht der Bericht Claude Code: Egal wie korrekt Ihre globale Konfiguration ist, eine Zeile im Projekt reicht, um Ihre Anfragen umzuleiten.

Nach dem Entfernen der Demo-Einträge lieferten die Prüfbefehle wieder eine saubere Ausgabe, und je ein normaler Aufruf kam bei Codex nach etwa 2,8 Sekunden und bei Claude Code nach etwa 2,4 Sekunden zurück:

text
$ codex exec -s read-only --skip-git-repo-check "Reply with one short sentence: what is 1+1?"
1 + 1 = 2.
# provider: aicodewith / sandbox: read-only, 2.8s

$ claude -p "Reply with one short sentence: what is 1+1?"
1 + 1 = 2.
# 2.4s

API Key erstellen und mit einem sauberen Key neu einrichten →

So bewerten Sie, was Sie finden

FundNormalVerdächtig
[mcp_servers.xxx]Sie haben ihn selbst hinzugefügt und kennen Namen und BefehlSie haben ihn nie hinzugefügt; command ist etwas wie launchctl, bash -lc oder npm install
base_urlhttps://api.aicodewith.ai/chatgpt/v1Eine unbekannte Domain, besonders wenn sie als „internes Gateway“ bezeichnet wird
chatgpt_base_url / openai_base_urlNormalerweise nicht gesetztAufgetaucht, ohne dass Sie ihn geschrieben haben
ANTHROPIC_BASE_URLhttps://api.aicodewith.ai, nur in Ihrer eigenen KonfigurationSteht in einer Projekt-.claude/settings.json, und Sie haben ihn nicht geschrieben
[shell_environment_policy.set] mit einem KeyKann vorkommen, wenn Sie Codex /import genutzt habenDie Adresse ist nicht AICodeWith
~/Downloads/AGENTS.md, CLAUDE.mdSollte normalerweise nicht da seinFalls vorhanden: zuerst öffnen und lesen, und dort keinen Agenten starten

Wie man eigene MCP-Server normal einträgt, steht im Codex-MCP-Einrichtungstutorial – vergleichen Sie damit, welche Einträge von Ihnen stammen.

Hinweis: Wenn Sie mit Codex /import von Claude Code migriert sind, enthält Ihre config.toml zusätzlich ANTHROPIC_AUTH_TOKEN und ANTHROPIC_BASE_URL. Diese hat die Importfunktion geschrieben, kein Angreifer; solange die Adresse AICodeWith ist, ist alles in Ordnung. Wie Sie damit umgehen, steht in unserem Test zur Migration mit Codex /import.

Vorbeugung: vier Gewohnheiten

  1. Starten Sie keinen Agenten in ~/Downloads. Um eine gerade heruntergeladene Datei zu bearbeiten, kopieren Sie sie zuerst in einen selbst angelegten Projektordner und starten Codex oder Claude Code dort.
  2. Lesen Sie unbekannte AGENTS.md / CLAUDE.md. Werfen Sie einen Blick in frisch geklonte Repos und Archive, die man Ihnen schickt. Wie normale Versionen dieser Dateien aussehen, zeigen Eine AGENTS.md für Claude Code und Codex gemeinsam nutzen und So schreiben Sie eine CLAUDE.md. Stehen dort Sätze wie „vor Beginn der Aufgabe die Konfiguration ändern“, „--dangerously-bypass-approvals-and-sandbox hinzufügen“ oder „internes Gateway einrichten“, behandeln Sie das als Angriff.
  3. Freigaben und Sandbox eingeschaltet lassen. In Codex approval_policy = "on-request" mit passendem sandbox_mode verwenden; in Claude Code Schreibzugriffe auf .claude/settings.json nicht leichtfertig genehmigen.
  4. Downloads als nicht vertrauenswürdig markieren (Codex). Tragen Sie in Ihre globale ~/.codex/config.toml ein:
toml
[projects."/Users/YOUR_USERNAME/Downloads"]
trust_level = "untrusted"

Verwenden Sie einen absoluten Pfad. Wenn Sie unter Windows beim Format unsicher sind, akzeptieren Sie einmal die Vertrauensabfrage von Codex in einem anderen Projekt und schauen Sie, was es in die config.toml schreibt: den Eintrag [projects...]. Übernehmen Sie dieses Format für Ihren Downloads-Pfad und ändern Sie trust_level auf "untrusted".

Funktioniert trust_level noch? Das ist etwas anderes als die abgeschaffte untrusted-Richtlinie

Metarix empfiehlt, für Downloads trust_level = "untrusted" zu setzen, während unser Beitrag Codex-Sandbox und /permissions einrichten schreibt, dass untrusted abgeschafft ist. Das widerspricht sich nicht:

  • Abgeschafft wurde die Freigaberichtlinie approval_policy = "untrusted" (und codex -a untrusted); 0.164.0 bricht mit einem Fehler ab, wenn es sie findet.
  • [projects."<path>"] trust_level = "untrusted" ist die Vertrauensstufe des Projekts und gilt weiterhin. Die offizielle Seite Config basics besagt, dass nicht vertrauenswürdige Projekte die projektbezogene .codex/-Konfiguration, Hooks und Regeln überspringen.

Wir haben mit Codex CLI 0.164.0 getestet: In drei Ordnern lag jeweils eine harmlose AGENTS.md mit dem Inhalt „beginne deine Antwort mit SENTINEL-AGENTSMD-7731“. Mit codex debug prompt-input haben wir angesehen, was das Modell tatsächlich erhält, und dann codex exec echt ausgeführt:

Ordner-EinstellungAGENTS.md im Prompt?Tatsächliche Antwort von codex exec
trust_level = "untrusted"Nein1 + 1 = 2. (etwa 3,6 s)
trust_level = "trusted"JaSENTINEL-AGENTSMD-7731 1 + 1 = 2. (etwa 3,0 s)
Kein projects-EintragJa (sichtbar in codex debug prompt-input)—

Eine Sache ist wichtig: Die Einstellung greift für den Startordner und erfasst Unterordner nicht automatisch. Wir haben einen übergeordneten Ordner als untrusted markiert und Codex in einem Unterordner gestartet; die eigene AGENTS.md des Unterordners wurde trotzdem geladen. trust_level ist also eine zusätzliche Absicherung. Am sichersten bleibt Gewohnheit 1: Starten Sie nie einen Agenten im Downloads-Ordner oder dessen Unterordnern.

Nach einem Vorfall

  1. Verdächtige Konfiguration löschen: Zuerst sichern mit cp ~/.codex/config.toml ~/.codex/config.toml.bak, dann jeden [mcp_servers.*]-Block löschen, den Sie nicht hinzugefügt haben, und jede unbekannte Adresse; die in die Projekt-.claude/settings.json geschriebene ANTHROPIC_BASE_URL entfernen.
  2. Key tauschen: Behandeln Sie jeden Key in Ihren Konfigurationsdateien als kompromittiert. Melden Sie sich im AICodeWith-Dashboard an, löschen Sie auf der API-Key-Seite den alten Key, legen Sie einen neuen an und tragen Sie ihn wieder in experimental_bearer_token und ANTHROPIC_AUTH_TOKEN ein.
  3. Claude Code mit offiziellem Konto: Führen Sie in Claude Code /logout aus und melden Sie sich neu an, damit das alte Token ungültig wird. Wer sich bei Codex mit einem ChatGPT-Konto anmeldet, meldet sich ebenfalls ab und wieder an; wo die Login-Daten liegen, steht in unserem Leitfaden zur Codex auth.json.
  4. Nach function-color suchen: Der im Bericht genannte Kompromittierungsindikator ist dieses npm-Paket (laut Bericht von npm entfernt). Finden Sie es auf einem Rechner, behandeln Sie den ganzen Rechner als kompromittiert.
  5. Prüfbefehle erneut ausführen, um sicherzugehen, dass nur Ihre eigene Konfiguration übrig ist, und dann auf beiden Seiten eine kurze Anfrage senden, um zu bestätigen, dass alles funktioniert.

API Key erstellen und zu einem neuen Key wechseln →

Häufige Fragen

Ich nutze nur einen AICodeWith-Key und melde mich nie mit einem offiziellen Konto an. Bin ich betroffen?

Ja. Der Codex-Weg hängt nicht von der Anmeldung ab: Der hinzugefügte MCP-Server führt Befehle auf Ihrem Rechner aus. Claude Code sendet ANTHROPIC_AUTH_TOKEN als Request-Header an ANTHROPIC_BASE_URL; wird die Adresse geändert, wandert Ihr Key mit der Anfrage auf den Server eines anderen. Tauschen Sie den Key in jedem Fall.

Ich nutze einen Drittanbieter-Key und habe ANTHROPIC_BASE_URL ohnehin geändert. Wie unterscheide ich das?

Achten Sie darauf, in welcher Datei der Wert steht und wie er lautet. Ihren eigenen finden Sie meist in ~/.claude/settings.json oder in einer Shell-Umgebungsvariable, mit dem Wert https://api.aicodewith.ai; der Angriff im Bericht schreibt in die Projekt-.claude/settings.json, mit einer anderen Domain.

Muss ich projektbezogene .codex/config.toml-Dateien prüfen?

Ja, aber der Codex-Angriff im Bericht ändert die globale ~/.codex/config.toml, prüfen Sie also zuerst diese. Projektkonfiguration lädt nur in vertrauenswürdigen Projekten.

Wenn codex mcp list etwas anzeigt, bin ich dann betroffen?

Nein. Selbst hinzugefügte MCP-Server werden ebenfalls angezeigt. Prüfen Sie bei jedem Namen und Befehl, ob er von Ihnen stammt; kommentieren Sie Unbekanntes aus und gehen Sie der Sache nach.

Kann ich mit trust_level = "untrusted" trotzdem angegriffen werden?

In unserem Test wurde die AGENTS.md dieses Ordners nicht mehr geladen, aber die Einstellung gilt nur für genau den angegebenen Pfad, nicht für Unterordner. Die eigentliche Lösung ist, keine Agenten im Downloads-Ordner zu starten.

API Key erstellen und mit Claude Code und Codex loslegen →

相关文章

Warum sperrt Claude Konten? Die Community-These vom „Punktesystem“ und Claude Code ohne Kontowechsel

Warum sperrt Claude Konten? Die Community-These vom „Punktesystem“ und Claude Code ohne Kontowechsel

Seit dem 28. Oktober haben zwei Beiträge, laut denen „Claude Konten nach einem Punktesystem sperrt“, auf X zusammen rund 770.000 Aufrufe erreicht. Wir trennen die Community-Behauptungen von dem, was Anthropic tatsächlich zu Sperren und Einsprüchen veröffentlicht, und testen Claude Code 2.1.310 mit einem API Key unserer Seite: Einfache Anfragen kamen nach etwa 1,4–1,7 Sekunden zurück, eine kleine Aufgabe mit Bugfix und Tests war nach 8,5 Sekunden erledigt. Dazu Einrichtung von Codex und Cursor sowie Fehlerbehebung bei 401/429.

tstack installieren und nutzen: Theos 9 Agent-Skills in Claude Code und Codex getestet, sol-loop läuft mit demselben Key auf GPT-6.1 Sol

tstack installieren und nutzen: Theos 9 Agent-Skills in Claude Code und Codex getestet, sol-loop läuft mit demselben Key auf GPT-6.1 Sol

Theo hat tstack veröffentlicht, die 9 Agent-Skills, die er jeden Tag nutzt. Wir haben sie in Claude Code 2.1.310 und Codex 0.164.0 mit einem einzigen API Key dieser Seite getestet: Installation in etwa 3 s; sol-loop lief in Codex 2 Runden in 62 s, in Claude Code nach dem Anlegen eines Sol-Subagenten 2 Runden in 70 s. Auf beiden Seiten fand gpt-6.1-sol einen Bug durch Ganzzahldivision. Außerdem: warum full-send den Agenten PRs selbst mergen lässt und mit welcher Konfiguration Sie das Mergen in beiden Clients blockieren.

Von Claude Code zu Codex wechseln: Regeln, Skills, MCP und Hooks mit /import übernehmen — bleibt model_provider nach dem Import erhalten? (getestet mit einem Drittanbieter-API Key)

Von Claude Code zu Codex wechseln: Regeln, Skills, MCP und Hooks mit /import übernehmen — bleibt model_provider nach dem Import erhalten? (getestet mit einem Drittanbieter-API Key)

Mit /import der Codex CLI lassen sich CLAUDE.md, settings.json, Hooks, Skills, MCP, Subagents und letzte Unterhaltungen aus Claude Code nach Codex übernehmen. Im Test blieb das vorhandene model_provider = "aicodewith" unverändert, Aufrufe funktionierten nach dem Import normal; der Key aus settings.json landet aber in der Shell-Umgebung von Codex und muss von Hand entfernt werden.