Claude Code versieht Anfragen mit Steganografie-Markierungen
(thereallo.dev)- Das Claude-Code-2.1.196-Binary enthält eine Funktion, die den Satz mit dem aktuellen Datum im System-Prompt verändert und dabei Klassifikationssignale in der Anfrage verbirgt
- Der Trigger ist
ANTHROPIC_BASE_URL; wenn dieser gesetzt ist oder nicht auf das offizielleapi.anthropic.comzeigt, werden Hostname und Zeitzone geprüft und dabei Apostroph und Datums-Trennzeichen verändert - Der Hostname wird mit einer per base64 codierten und mit dem XOR-Schlüssel
91decodierten Liste von Domains und Keywords verglichen; enthalten sind unter anderemdeepseek,zhipu,moonshot,baidu.com,bytedance.net,proxyai.com - Wird der offizielle Anthropic-API-Endpunkt verwendet oder ist
ANTHROPIC_BASE_URLnicht gesetzt, erfolgt eine frühe Rückgabe und das übliche FormatToday's date is 2026-06-30.bleibt erhalten - Es lässt sich nicht eindeutig als bösartige Funktion einstufen, aber wenn ein Entwicklerwerkzeug mit Dateisystem- und Shell-Zugriff unsichtbare Unicode-Markierungen nutzt, um Klassifikationsinformationen zu verbergen, untergräbt das das Vertrauen
Marker, die im Datumssatz versteckt werden
- Das Claude-Code-Binary enthält eine Funktion, die die aktuelle Datumszeichenfolge verändert, die in den System-Prompt eingefügt wird
- Der Standardsatz hat die folgende Form
Today's date is 2026-06-30.
- Es gibt zwei Stellen, die verändert werden können
- das Apostroph in
Today's - das Datums-Trennzeichen: Änderung von
-zu/
- das Apostroph in
- Der resultierende Satz sieht äußerlich wie ein gewöhnlicher Datumshinweis aus, enthält in der Rohanfrage jedoch versteckte Marker
- Da auf diese Weise Daten in etwas verborgen werden, das wie Klartext aussieht, handelt es sich um Prompt-Steganografie
ANTHROPIC_BASE_URL aktiviert den bedingten Pfad
- Der Trigger ist
ANTHROPIC_BASE_URL, also das Override für die API-Basis-URL von Claude Code - Ist
ANTHROPIC_BASE_URLnicht vorhanden, gibt die Funktion früh zurück - Selbst wenn ein Wert vorhanden ist, wird derselbe Pfad verlassen, wenn der Host
api.anthropic.comist - Nur wenn keine frühe Rückgabe erfolgt, werden die folgenden Bedingungen geprüft
- ob die Systemzeitzone
Asia/ShanghaioderAsia/Urumqiist - ob der Hostname der API-Basis-URL mit einer decodierten Domainliste übereinstimmt oder eine ihrer Subdomains ist
- ob der Hostname bestimmte Keywords von AI-Laboren enthält
- ob die Systemzeitzone
In Datum und Apostroph codierte Informationen
- Ist die Zeitzone
Asia/ShanghaioderAsia/Urumqi, ändert sich die Schreibweise des Datums2026-06-30→2026/06/30
- Je nach Klassifikation des Hostnamens ändert sich das Apostroph in
Today's- allgemein:
' - bekannte Domain:
\u2019 - Labor-Keyword:
\u02BC - bekannte Domain und zugleich Labor-Keyword enthalten:
\u02B9
- allgemein:
- Diese Unicode-Zeichen weisen in den meisten Monospace-Schriften nur sehr geringe visuelle Unterschiede auf und sind daher schwer zu bemerken
Versteckte Liste von Domains und Keywords
- Die Listen mit Domains und Keywords sind als base64-Zeichenfolgen gespeichert und werden mit dem XOR-Schlüssel
91decodiert - Die decodierte Liste der Labor-Keywords lautet wie folgt
deepseekmoonshotminimaxxaminimzhipubigmodelbaichuanstepfun01aidashscopevolces
- Die decodierte Domainliste ist größer und umfasst Domains chinesischer Unternehmen, AI-Unternehmen sowie Proxy-, Reseller- und Gateway-Domains
- Beispielhafte Einträge sind die folgenden
cnbaidu.comalibaba-inc.comalipay.comantgroup-inc.cnbytedance.netkuaishou.comxiaohongshu.comjd.combilibili.coiflytek.comstepfun-inc.commoonshot.aianyrouter.topclaude-code-hub.appclaude-opus.topopenclaude.meproxyai.comyunwu.aizenmux.ai
- Die vollständige Liste ist unter cc-domains.js einsehbar
Position im Systemkontext
- Das Ergebnis der Datumsfunktion wird beim Aufbau des Agent-Kontexts als Wert
currentDateeingefügt - In demselben Kontext können abhängig von den Bedingungen auch Projektinformationen enthalten sein, die mit der E-Mail-Adresse des Nutzers verknüpft sind
- Der Marker wird damit Teil des Systemkontexts, der an das Modell gesendet wird
- Es bleibt zudem möglich, dass das Anthropic-Backend diesen Wert parst
Bestätigte Installationsumgebung
- Das überprüfte installierte Claude-Code-Binary war mit einer Anthropic-Signatur versehen
Identifier=com.anthropic.claude-codeTeamIdentifier=Q6L2SF6YDWTimestamp=Jun 29, 2026SHA256=6fc6e61ab7582c2bf241225ff90d9f79e91d69380cb9589fc9dedd3a30070f5a
- Zum Zeitpunkt der Überprüfung war
ANTHROPIC_BASE_URLin der Shell nicht gesetzt, und die Zeitzone warAsia/Hong_Kong - In dieser Umgebung wurden ein gewöhnliches Apostroph und eine Datumszeichenfolge im Format
YYYY-MM-DDerzeugt
Betroffene Anwendungsfälle und Grenzen
- Für die meisten Nutzer dürfte dieser Pfad inaktiv bleiben
- Wird der offizielle Anthropic-API-Endpunkt verwendet oder ist
ANTHROPIC_BASE_URLnicht gesetzt, bleibt der Datums-Prompt in einer gewöhnlichen Form - Interessant wird es in Fällen, in denen Claude Code über eine benutzerdefinierte Base-URL geroutet wird
- internes Gateway
- lokaler Proxy
- Modell-Router
- Reseller
- Forschungsumgebung
- In diesem Fall klassifiziert Claude Code den Hostnamen und codiert das Ergebnis in den Prompt
- Die Umgehungsmöglichkeiten sind einfach
- Hostnamen ändern
- Zeitzone ändern
- Binary patchen
- Prozess wrappen
- Ein ernsthafter Angreifer kann dieses Signal außer Kraft setzen, sodass eher gewöhnliche Entwickler mit ungewöhnlichen, aber legitimen Setups leichter zum Ziel von Fingerprinting werden
Eine Implementierung, die Vertrauen untergräbt
- Es ist möglich, dass Anthropic damit API-Reseller, nicht autorisierte Claude-Code-Gateways oder Modell-Pipelines für „distillation attacks“ erkennen möchte
- Wenn eine benutzerdefinierte
ANTHROPIC_BASE_URLauf eine bekannte Reseller-Domain zeigt oder der Hostnamedeepseekoderzhipuenthält, könnte dies als Erkennungssignal genutzt werden - Das Problem ist die Art der Implementierung
- Der System-Prompt wird stillschweigend verändert
- Informationen zur Klassifikation von Proxy oder Gateway werden an Stellen codiert, die wie gewöhnliche englische Sätze aussehen
- Die Domainliste wird hinter XOR und base64 verborgen
- Ein Coding-Agent kann auf dem lokalen Rechner Code prüfen, Befehle ausführen, Pakete installieren, Dateien bearbeiten und Commits pushen
- Um benutzerdefinierte API-Gateways zu erkennen, wären auch dokumentierte explizite Telemetrie-Felder, öffentliche Richtlinien oder Release Notes möglich
- Wenn ein Werkzeug mit Dateisystem- und Shell-Zugriff Klassifikationsbits in unsichtbarer Prompt-Interpunktion verbirgt, fällt es schwer, auch anderen Datenschutzbehauptungen zu vertrauen
1 Kommentare
Meinungen auf Hacker News
Es gibt Reaktionen, die die Schwere des Umstands herunterspielen, dass ein Dienstanbieter nicht transparent offengelegt hat, was genau ein von ihm auf Kundenmaschinen bereitgestelltes Tool tut.
Nur weil es geschäftlich notwendig war, heißt das nicht, dass man auf eine ehrliche Offenlegung verzichten darf.
Dass ihre Lösung nutzlos würde, wenn sie sie ehrlich offenlegten, ist auch nicht mein Problem; vielmehr frage ich mich, wenn sie das für in Ordnung hielten, was sie auf meiner Maschine sonst noch sammeln, etwa personenbezogene Daten.
Zynisch betrachtet fühlt es sich weniger wie eine Bewertung dieses Falls an, sondern eher so, als spiegelten sich in der Kommentarstimmung Gefühle gegenüber AI/Anthropic/den USA usw. wider.
Das wirkt wie eine naheliegende Gegenmaßnahme, um genau solche Vorgänge sichtbar zu machen.
Abgesehen von Werturteilen überrascht mich etwas, dass das so schlampig implementiert wurde.
Man hätte vermutlich denselben Effekt erzielen können und zugleich die Wahrscheinlichkeit senken, dass es per Reverse Engineering entdeckt wird.
Dieses Gebiet ist als „underhanded code“ bekannt, geprägt durch den Underhanded C Contest: https://www.underhanded-c.org
Eine wenig bekannte „Kunst“, aus naheliegenden Gründen. Es gibt deutlich cleverere Wege, dieses Ziel zu erreichen.
Eine offensichtliche Methode wäre, mehr vom Client auf den Server zu verlagern; eine andere, plausibel abstreitbaren Client-Code auf deutlich harmloser wirkende Weise zu schreiben.
Einiges von dem, was hinzugefügt wurde, ist nur clientseitig möglich, anderes hätte man verlagern können, und auch die Teile, die einen Client benötigen, hätten subtiler und plausibler gestaltet werden können.
Vielleicht wussten sie, dass JS-Bundles so stark geprüft werden, dass es am Ende ohnehin entdeckt und berichtet würde, und haben es deshalb nicht noch heimlicher und täuschender gemacht; trotzdem wirkt es etwas lieblos.
Ein wirklich entschlossenes großes AI-Labor am Destillieren von Modellen zu hindern, ist schwierig; aber A) man kann viele schlampige Token-Reseller stoppen, die schnell Geld machen wollen, und B) jemand in einem solchen großen Labor könnte vergessen, den Workaround einzubauen, und sich so selbst enttarnen.
Ich sehe das ähnlich wie den Kauf einer Plastikeule, weil viele Vögel im Garten sind. Selbst wenn die Eule die meisten, aber nicht alle Vögel vertreibt und man zusätzlich ein Ultraschallgerät kauft, gibt es keinen Grund, die Eule abzubauen.
Denn nun hat man nicht nur eine, sondern zwei Verteidigungsschichten.
Nicht, weil Anthropics Modell schlecht wäre, sondern weil Claude jeden Tag irgendetwas Neues und Nerviges kaputtzumachen scheint; ich wechsle deshalb zunehmend zu Codex und OpenCode.
Große Sprachmodelle können die Token-Verteilung nutzen, um Steganotext zu erzeugen, der sich wie plausible Prosa liest, aber zu einer Payload dekodiert werden kann¹.
¹ https://github.com/hodgesmr/calgacus-mlx
Anthropic könnte das nicht als dauerhaftes Erkennungssystem gegen Proxy-Reseller implementiert haben, sondern als punktuelles Sampling-System, um herauszufinden, wo und in welchem Kontext gerade Proxy-Reselling stattfindet.
Irgendwann wird es auffliegen, aber bis dahin kann Anthropic nützliche Snapshot-Daten gewinnen.
Das Fazit dieses Blogposts ist etwas überempfindlich.
Die Absicht dieser Steganografie ist sehr klar: die Nutzung durch chinesische Unternehmen zu identifizieren, die möglicherweise Modelldestillation betreiben.
Unklar ist, inwiefern das in irgendeiner Form „normale Entwickler bestraft“.
Zu legitimen Gründen zählen: zu analysieren, was Claude Code an Anthropic sendet, um sicherzustellen, dass keine Daten abfließen; je nach Prompt-Schwierigkeit dynamisch ein Modell auszuwählen oder ein bestimmtes Modell zu erzwingen; je nach Projekt zwischen mehreren Anthropic-Konten zu wechseln; Zugangsdaten, personenbezogene Daten und Geschäftsgeheimnisse herauszufiltern usw.
Der Zweck heiligt nicht immer die Mittel.
Ob diesmal Schaden entstanden ist oder nicht: Das ist eine Verletzung von Vertrauen und Autonomie.
Selbst wenn der Code zumindest im Moment nur dazu da ist, Staatsfeind Nummer eins aufzuspüren und zu verpfeifen, wäre man zu Recht wütend, wenn jemand heimlich ein Rootkit installiert hätte.
Im Gegensatz zu Claude Code ist die Codex CLI freie Open-Source-Software, daher ist die Wahrscheinlichkeit geringer, dass sie so etwas tut, und es gibt einen weiteren Grund, Claude Code und Claude generell zu meiden.
Ich hoffe, dass bei Codex viele Augen nach solchem bösartigen Verhalten Ausschau halten.
Ich bin gegenüber Datenschutzrichtlinien und Geschäftspraktiken sehr skeptisch, aber ich frage mich, welchen Nachteil ich als Kunde dadurch habe.
Wenn es hilft, den Zeitpunkt hinauszuzögern, an dem die Subventionen wegfallen, scheint das aus Kundensicht eher vorteilhaft.
Falls solche betrügerischen Proxys allerdings chinesischen Forschungslaboren helfen, aufzuholen, könnte es langfristig sogar dazu beitragen, dass ich eine hochwertige persönliche KI bekomme, die ich auf eigener Hardware vollständig kontrolliere.
Ich sage nicht, dass ich das unterstütze, aber ich erkenne an, dass es diesen Anreiz gibt.
Ein freier Open-Source-Client bedeutet nur, dass noch mehr Analyse serverseitig versteckt passiert.
Es sind keine reproduzierbaren Builds, aber es gibt immerhin ein bisschen Herkunftsgarantie, dass es aus dem echten Repository kommt.
Die Reaktion „Wenn der Client ein eigenes API-Gateway erkennen will, soll er es einfach klar sagen. Er soll ein dokumentiertes explizites Telemetrie-Feld senden, die Richtlinie sichtbar machen und das Verhalten in die Release Notes aufnehmen“ wirkt sehr naiv.
Wenn der Client dem Gateway ein explizites Telemetrie-Feld sendet, kann ein bösartiges Gateway dieses Feld sehr leicht entfernen oder verändern, sodass es wie normaler Traffic aussieht.
Der Grund, warum ein steganografisches Katz-und-Maus-Spiel wertvoll ist: Für ein Gateway ist es viel schwieriger, sämtliche verwendeten Fingerprinting-Mechanismen ständig zu reverse-engineeren.
Natürlich werden manche bösartigen Gateways weiterhin aufholen, aber nicht alle werden das immer schaffen.
Wenn man kein chinesisches Destillationslabor ist, ist das eine völlig unproblematische Angelegenheit.
Denn der internationale Markt für KYC-Umgehungsdienste ist sehr weit entwickelt.
Nicht nur AI-Tools, sondern auch Entwicklungstools sollten in einer Sandbox ausgeführt werden.
In Python- oder JavaScript-Paket-Repositories kann zum Beispiel alles Mögliche landen; es gibt keine Verträge mit Antivirenfirmen und keine vertrauenswürdige zivilgesellschaftliche Prüfung, also sollte man sie nicht ohne Sandbox ausführen.
Man muss sich klarmachen, dass anonyme Nutzer aus jedem Land beliebige Dinge hochladen können und Millionen Entwickler das auf ihren eigenen Rechnern ausführen können.
IDEs, IDE-Plugins, LSP-Server und AI-Plugins gehören alle in eine Sandbox.
Die meisten davon werden nicht von Antivirenfirmen geprüft und sollten nicht ohne Einschränkungen laufen.
Außerdem gibt es längst ein Theorem, dass kein Antivirus die Sicherheit von Code zu 100 % garantieren kann.
Interessanterweise erwähnt die pip-Dokumentation in der „Getting Started“-Doku weder Sandboxing noch Malware, als lebte sie in einer wunderbaren Welt ohne böswillige Menschen, Unternehmen oder Staaten.
Ich hoffe, dass zumindest auf HN niemand in so einer Illusion lebt.
Weil ich IDEs, LSP und AI-Tools nutzen will, muss ich zuerst ein eigenes Sandboxing-System schreiben, und Linux stellt nur primitive Basisfunktionen bereit, was sehr viel Zeit kostet.
Wenn man zum Beispiel ohne Root-Rechte den gesamten Netzwerkverkehr kontrollieren will, muss man einen User-Namespace erstellen, dort Root-Rechte erlangen, einen Network-Namespace erstellen, einen „Traffic Collector“ schreiben, der im Namespace läuft und Daten an ein „Supervisor“-Programm außerhalb weiterleitet, und dieses Supervisor-Programm muss den Traffic zum Ziel routen.
Selbst um Traffic ohne Root-Rechte schlicht zu filtern und zu inspizieren, verlangt Linux viel zu viel Aufwand.
Auch im Benutzernamen oder Hostnamen darf keinerlei Information zurückbleiben. Wie dieser Beitrag beweist, werden solche Informationen gegen Sie verwendet werden.
Zusammengefasst hat Anthropic bereits Folgendes getan: Schon Jahre, bevor Regierungen es verlangten, Menschen herausgefiltert, die auf der falschen Seite von „all humanity“ stehen; Modelle auf willkürliche Weise herabgestuft und später sinngemäß mit „tut uns leid, aber eigentlich auch nicht“ reagiert; Antworten heimlich verändert und Nutzer aktiv sabotiert, sodass sie falsche Ergebnisse bekamen.
Was sollen wir als Nächstes erwarten? Malware, die die Maschinen missliebiger Nutzer bricked? Eine Ausweitung auf noch mehr unerwünschte Personen?
Man sieht schon, wie sich Dario Amodeis utopische Zukunftsvision für „all humanity“ entfalten wird.
Aus der Perspektive, dass diese Leute ernsthaft glauben, Superintelligenz zu bauen, ist das alles verständlich.
Die überwältigende Mehrheit des AI-Safety-Lagers hat deutlich mehr Leben und Zeit in dieses Problem investiert als der übliche HN-Lehnstuhlkommentator, ist der Ansicht, dass China nicht als Erstes Superintelligenz erreichen darf, dass Zugang zu Superintelligenz nur verifizierten guten Akteuren erlaubt sein sollte und dass ein Scheitern an diesem Ziel ein Wettrennen ist, bei dem die Menschheit ausstirbt.
Wenn man nicht annimmt, dass „wir glauben, dass wir Superintelligenz bauen“ eine Lüge ist, wird fast alles, was sie tun, nachvollziehbar.
Einen ähnlichen Mechanismus zur System-Prompt-Injektion hatte ich hier gemeldet:
https://news.ycombinator.com/item?id=48259288
https://github.com/anthropics/claude-code/issues/62061
Wie erwartet scheinen sie immer neue und „kreative“ Verwendungen dafür zu finden.
Ich werde es weiter per Patch entfernen.
Mir war nicht klar, dass der System-Prompt Dinge einschleust wie „Vermeide Abstraktionen; drei ähnliche Codezeilen sind besser als ein Helper“.
Dem stimme ich nicht zu.
Gibt es eine Möglichkeit, das zu beheben, indem man Anweisungen in CLAUDE.md schreibt, die solche Prompts überschreiben? Den System-Prompt selbst kann man vermutlich nicht direkt ändern, aber sollte CLAUDE.md nicht die letzte Entscheidungsgewalt haben?
Ich verstehe die vom Autor betonte Datenschutzsorge nicht so recht.
Klar: Wenn man bei etwas „Heimlichem“ erwischt wird, macht einen das immer verdächtig. Umgekehrt hat es aber keinen Sinn, so ein „Sicherheitsfeature“ zu implementieren, wenn man öffentlich macht, wie es funktioniert.
Und meiner Meinung nach ist Steganografie keine Security by Obscurity.
So wie es bei RSA keine Security by Obscurity ist, den privaten Schlüssel geheim zu halten, ist es Teil des Sicherheitsmodells, Dinge geheim zu halten, die geheim bleiben müssen.
Vermasselt haben sie es aber an dem Punkt, an dem sie es umgesetzt haben, indem sie per Fingerprinting meine Zugriffsmuster erfassen, ohne sie vorher offenzulegen.
Das ist nicht nur „heimlich“, sondern schlicht heimlich, unehrlich und skrupellos.
Dass dieser Fall harmlos ist, ist auch kein großer Trost. Wer garantiert, dass keine personenbezogenen Daten gesammelt werden?
Dass ihr Verhalten geschäftlich Sinn ergibt, ist kein Grund, warum Menschen täuschende und kundenfeindliche Entscheidungen akzeptieren sollten.
Oder vielleicht versteht man nicht einmal diese Annahme; tatsächlich scheint es aber eher so, als interessiere man sich nicht für die Privatsphäre anderer.
Bei „Dieses Feature bestraft also vor allem Leute, die leicht per Fingerprinting zu erfassen sind, also normale Entwickler, die seltsame, aber legale Dinge tun“: Was genau ist hier mit Bestrafung gemeint?
Erst recht, wenn man bedenkt, dass solche Technik existiert und öffentlich gesagt wurde, man wolle sie bei Fable in Produktion einsetzen.