- Durch die Kombination von standardmäßig aktiviertem Claude Memory und Web-Browsing konnten allein mit einer harmlosen Frage zu einem Café Name, Arbeitgeber und Heimatstadt eines Nutzers heimlich an einen externen Server gesendet werden
web_fetchblockierte zwar den Zugriff auf beliebige URLs, konnte aber Links von zuvor besuchten Seiten folgen. So wurden Daten mit einem alphabetischen Verzeichnis Zeichen für Zeichen in GET-Anfragen kodiert, etwa über Pfade wie/a→/ay→/ayu- Die Angreifer-Website zeigte nur Claude eine gefälschte Cloudflare-Verifizierung und Menschen eine normale Café-Seite; Claude übermittelte dabei ohne Erlaubnis nicht nur Name und Firma, sondern auch das aus früheren Informationen abgeleitete Charlotte, NC
- Auch ohne dass der Nutzer eine bösartige URL direkt übergab, konnte Claude die Seite über
web_searchfinden und besuchen; wurde die Website für aktuelle Themen weit oben in den Suchergebnissen platziert, konnte schon eine passende Frage den Angriff auslösen - Anthropic hatte das Problem intern bereits erkannt, es damals aber weder gepatcht noch eine Prämie ausgezahlt; später wurde das Verfolgen von Links auf externen Seiten unterbunden und der Browse-Umfang auf
web_search-Ergebnisse sowie vom Nutzer angegebene URLs beschränkt
Informationen, die sich in Claude Memory ansammeln
- Das für allgemeine Nutzer gedachte claude.ai verwendet ein Memory-System mit zwei Bestandteilen
- Es fasst jüngere Gespräche täglich in einigen Absätzen zusammen und speist diese in alle späteren Unterhaltungen ein
- Bei Bedarf durchsucht es mit dem Tool
conversation_searchden gesamten Gesprächsverlauf
- Nutzer vertrauen Claude alles an, von vertraulichen Arbeitsunterlagen bis zu persönlichen Geheimnissen und Beziehungsproblemen, und diese angesammelten Aufzeichnungen werden zu einem hochdichten Profil, mit dem sich eine Person sehr präzise rekonstruieren lässt
- Diese Informationen können für Erpressung, Identitätsbetrug und das Umgehen von Sicherheitsfragen missbraucht werden; das Risiko steigt, wenn ein Memory-Speicher mit einem Agenten kombiniert wird, der das Web durchsucht
- Untersucht wurde nicht Claude Code, sondern das alltägliche Claude für Endnutzer
Datenexfiltration über Web-Browsing
- Als allgemeiner Exfiltrationskanal, der ohne spezielle Experiment-Setups, Codeausführung oder besondere MCPs funktioniert, wurde Claudes Web-Browsing-Funktion gewählt
- Claude nutzt für den Internetzugang
web_searchund das schreibgeschützteweb_fetch - Als der Server des Angreifers mit
web_fetchbesucht wurde, ließ sich eine GET-Anfrage mit dem User-AgentClaude-Userbeobachten- Die erste Anfrage scheiterte wegen der
robots.txt, die Cloudflare für die Website gesetzt hatte - Nach einer Änderung an der
robots.txterschienen die Anfragen in den Server-Logs
- Die erste Anfrage scheiterte wegen der
- Da nur GET-Anfragen möglich waren, sollte der Datentransport über den URL-Pfad erfolgen, aber direkte Anfragen an beliebige Pfade mit dem Namen des Nutzers wurden blockiert
Regeln, nach denen web_fetch Links folgt
- Damit
web_fetchauf eine URL zugreifen konnte, musste eine der folgenden drei Bedingungen erfüllt sein- Die URL war direkt in der Nachricht des Nutzers enthalten
- Die URL war direkt in den
web_search-Ergebnissen enthalten - Die URL war im Inhalt eines vorherigen
web_fetch-Ergebnisses verlinkt
- Durch die dritte Bedingung konnte Claude auf Links klicken, die es auf einer vorherigen Seite gesehen hatte, und wenn der Angreifer die Website kontrollierte, konnte er auch steuern, welche Links angezeigt wurden
Kodierung von Daten in URLs mit einem alphabetischen Verzeichnis
- Auf der Startseite wurden Links wie
/a,/b,/cplatziert, um eine virtuelle Tastatur zu bauen, mit der Claude Daten auswählen konnte - Als Claude angewiesen wurde, zum ersten Buchstaben des Namens zu gehen, wurde auf dem Server zunächst eine Anfrage an
/und danach an/aprotokolliert - Die Linkstruktur wurde dynamisch erweitert, damit auf jedem Pfad der nächste Buchstabe gewählt werden konnte
/averlinkte auf/aa,/ab,/acusw.- Danach wurden weitere Pfade nach demselben Prinzip erzeugt, etwa
/aaa
- Als Claude den Namen buchstabieren sollte, wurden nacheinander Anfragen an
/a→/ay→/ayu→/ayus→/ayush→/ayush-paulaufgezeichnet - Das direkte Einfügen beliebiger Daten in die URL war zwar blockiert, aber wenn Claude wiederholt einen der bereits sichtbaren Links auswählte, war Datenübertragung aus der Sandbox heraus dennoch möglich
Prompt-Injection, getarnt als Cloudflare-Verifizierung
- Offensichtliche Prompt-Injection war instabil, und es war schwer, Claude mit Seiten zu täuschen, die nach Nutzergeheimnissen fragten und verdächtige Links anboten
- Mehrere Tarnszenarien einschließlich Mitgliedschaften wirkten unnatürlich oder verdächtig, deshalb fiel die Wahl auf Cloudflare, das im Web breit eingesetzt wird und großes Vertrauen genießt
- Die Angreifer-Website wurde wie ein echtes Café gestaltet und mit der Geschichte versehen, dass ein Agent, der das Web frei im Namen von Menschen durchsucht, zunächst eine Cloudflare-Verifizierung bestehen müsse
- Das gefälschte Turnstile brachte Claude dazu, nacheinander Links auszuwählen, den vollständigen Namen einzugeben und abzusenden
- Nach dem Absenden wurde die normale Café-Website geliefert, damit Claude nicht bemerkte, dass es getäuscht worden war
- Claude gab den Namen Buchstabe für Buchstabe ein, ohne um Erlaubnis zu bitten, und die abschließende Antwort enthielt nur Informationen zum Café, nicht aber den Hinweis, dass personenbezogene Daten übertragen worden waren
Vom Namensleck zur Ableitung von Sicherheitsfragen
- Als zwischen mehrere echte URLs eine bösartige Café-URL gemischt und gefragt wurde, wo es den besten Kaffee gebe, übermittelte Claude nacheinander die folgenden Informationen
- Name: Ayush Paul
- Unternehmen: Beem
- Heimatstadt: Charlotte, NC
- Claude suchte nicht nur frühere Gespräche durch, sondern leitete aus vorhandenen Informationen sogar neue Schlussfolgerungen ab
- Dass die Person aus Charlotte stammt, war nie direkt mitgeteilt worden; Claude schloss es aus dem Namen des Hackathons Queen City Hacks, den sie in der Highschool begonnen hatte
Unterschiedliche Seiten für Menschen und Claude
- Damit der Angriff funktionierte, musste der Nutzer Claude zum Besuch der Website bringen, deshalb musste die Seite für Menschen unauffällig wirken
- Weil Claude sich mit dem User-Agent
Claude-Userselbst identifiziert, konnten Inhalte je nach anfragendem Client getrennt ausgeliefert werden- Normale Besucher bekamen eine gewöhnliche Café-Website
- Nur wenn Claude zugriff, wurde das gefälschte Turnstile angezeigt, das zur Eingabe personenbezogener Daten aufforderte
- Wurde diese Payload in eine normale Website eingebettet, bemerkten Nutzer nichts Ungewöhnliches, aber sobald die Seite an Claude weitergegeben wurde, konnten über die gefälschte Verifizierung personenbezogene Daten übertragen werden
Automatischer Zulauf auf die Angreifer-Seite über Suchergebnisse
web_fetchkonnte nicht nur auf vom Nutzer direkt angegebene URLs zugreifen, sondern auch aufweb_search-Ergebnisse- Wenn Claude auf neue Themen stieß, die nach dem Stichtag seiner Trainingsdaten lagen, suchte es automatisch im Web
- Wurde die Suchplatzierung einer Angreifer-Seite zu aktuellen Nachrichten verbessert, konnte diese auch dann ausgewählt werden, wenn der Nutzer keine URL angab
- Wenn zum Beispiel eine bösartige Café-Seite in den Suchergebnissen weit oben erschien, konnte selbst ein Nutzer, der ganz allgemein nach Kaffee in Berkeley fragte, zum Angriffsziel werden
Bestätigung und Folgemaßnahmen von Anthropic
- Die Schwachstelle wurde über das HackerOne-Bug-Bounty-Programm von Anthropic verantwortungsvoll offengelegt
- Anthropic bestätigte, das Problem intern bereits entdeckt zu haben, es damals aber nicht gepatcht zu haben; auch eine Prämie für die Meldung wurde nicht ausgezahlt
- Später wurde die Funktion deaktiviert, mit der
web_fetchLinks verfolgen konnte, die auf externen Seiten gefunden wurden - Der aktuelle Browse-Umfang ist auf
web_search-Ergebnisse und vom Nutzer direkt angegebene URLs beschränkt
Nicht nur Memory, sondern auch angebundene Daten
- Der Nutzer hatte weder auf einen Link geklickt noch neue Integrationen aktiviert, sondern nur nach einem Café gefragt, doch Claude übermittelte Name, Arbeitgeber und die Stadt, in der die Person aufgewachsen war, nach außen
- Memory war nur deshalb ein leichtes Ziel, weil es standardmäßig aktiviert ist
- Auf dieselbe Weise könnten auch Informationen aus Google Drive, dem E-Mail-Posteingang oder angebundenen MCPs, die Claude im Namen des Nutzers abrufen kann, betroffen sein
1 Kommentare
Meinungen auf Hacker News
Es ist erstaunlich, wie wenig Widerstand es dagegen gibt, dass führende KI-Unternehmen Memory-Funktionen aktivieren. Früher musste die Werbebranche bruchstückhafte Informationen aus besuchten Websites ableiten; heute geben Menschen der KI fast alles direkt preis, einschließlich ihrer intimsten Geheimnisse.
Vielleicht bin ich überempfindlich, weil ich in der Werbebranche arbeite, aber sobald Memory bei Claude und ChatGPT eingeführt wurde, habe ich es abgeschaltet. Nützlich war es ohnehin nicht, weil es den Kontext mit irrelevanten Details verunreinigt und dadurch sogar die Qualität senkt. Für persönliche Gespräche ist es besser, bei Diensten wie OpenRouter ein separates Konto zu verwenden.
Man sollte KI-Unternehmen regulatorisch verbieten, Nutzerprofile zu speichern, und Memory ausschließlich auf Servern der Nutzer belassen. Sogar gegenseitige Eigentumsverflechtungen zwischen Memory-Unternehmen und KI-Unternehmen wären ein Verbot wert.
Mir wurde klar, dass Leute KI-Agenten mit Administratorrechten ausführen, nicht einmal in einem Container isoliert. Es ist erstaunlich, als hätte man 50 Jahre gewachsene Prinzipien der Computersicherheit über Nacht vergessen.
ccoverwendet, liegt das Home-Verzeichnis offen, sodass ein Agent schon mit einem einzigen Prompt Browser-Passwörter percurlverschicken könnte.Um das zu verhindern, braucht man ein falsches Home-Verzeichnis und eine Netzwerk-Allowlist, die nur Anbieter wie llama.cpp oder OpenAI erlaubt. Eine einfach nutzbare, plattformübergreifende Lösung gibt es nicht, und für Native-App-Entwicklung, bei der man plattformspezifische Fehler selbst kompilieren und beheben muss, reicht auch eine Linux-Maschine mit installiertem Docker nicht aus.
Da Kontext bereits zur Kostensenkung optimiert wird, ist es gut möglich, dass Kontext selbst künftig als Sicherheitsgrenze behandelt wird.
Ich hatte meinen Namen in Claude auf Silly Bean gesetzt; der Gruß „Back again, Silly Bean?“ war als Witz gedacht, wurde am Ende aber zu 4D-Sicherheitsschach.
Ich lasse es bis heute so und betrachte es als Zeichen, um mich über ein abhängiges Produkt lustig zu machen, das weniger schlau ist als gedacht, oder mich bitter darüber zu beruhigen.
Die Passage, dass Cloudflare ohne Zustimmung eine übermäßige
robots.txtangewendet habe, ist eine seltene Szene, in der sich jemand darüber beschwert, dass eine Website vor Scrapern geschützt wurde.robots.txtverwaltet. Es ist nur ein Klick, also könnte es versehentlich aktiviert worden sein.robots.txthält entschlossene Scraper ohnehin nicht auf.Ich führe Claude Code in einer VM ohne Zugangsdaten aus und klone nur die Open-Source-GitHub-Repositories, an denen ich arbeiten will. Früher habe ich die VM täglich zurückgesetzt, aber weil das lästig war, bin ich auf einmal im Monat umgestiegen; im schlimmsten Fall leakt also die Liste der Open-Source-Projekte, an denen ich im letzten Monat gearbeitet habe.
Auch diese Information kann eine Person ziemlich stark identifizieren, aber Namen und E-Mail-Adressen von Open-Source-Beitragenden stehen in unveränderlichen Git-Historien, sodass man das meiste bereits per Google-Suche finden kann. Nach diesem Vorfall überlege ich, den Reset-Zyklus auf wöchentlich zu ändern.
Wenn man ein Gefängnis für KI-Agenten einrichten will, funktioniert es ganz gut, dem Skript unter https://jai.scs.stanford.edu/arch-vm.html Pakete wie
dotnet-sdkzumpacstrap-Befehl hinzuzufügen. Wenn man das Gast-Root als BTRFS-Subvolume anlegt und Snapshots nutzt, kann man mitsudo btrfs subvol snap template-root newvmsofort eine neue VM erstellen; auch der Start mitqemu-system-x86_64dauert nur wenige Sekunden, während man den Inhalt der VM vollständig kontrolliert.Bei manchen Aufgaben muss ein Mensch einen Button drücken, um zu beurteilen, ob die User Experience korrekt ist, und wenn möglich möchte man der KI keinen Zugriff auf den Bildschirm geben. Dieses VM-Modell funktioniert bei manchen Problemen sehr gut, aber sein Einsatzbereich ist bedauerlich eng.
Dass „Hallo, hier ist Cloudflare. Bitte geben Sie mir personenbezogene Daten“ funktioniert, zeigt, warum Prompt Injection zwangsläufig ein dauerhaftes Problem bleibt. Entweder schränkt man Modelle so stark ein, dass sie kaum noch nützlich sind, oder man lässt solche Angriffe einsickern und erschafft damit das wohl unsicherste Konzept der Internetgeschichte: Roboter, die sich austricksen lassen.
Es wirkt wie eine Architektur, in der man ohne funktionales Verständnis oder Trennung der internen Abläufe einen einzigen riesigen Block gut zureden muss, damit er handelt, und dann nur hoffen kann, dass ein Angreifer ihm nicht noch überzeugender zuredet.
Ich hatte kürzlich in der ChatGPT-iPhone-App ein ziemlich unheimliches Erlebnis. Ein enger Freund fragte mit seinem eigenen Account nach einem Problem mit einem smarten Futterautomaten für Haustiere, und ChatGPT verwendete in der Antwort den Namen meines Haustiers.
Es ist kein gebräuchlicher Name, und wegen der Verbindung zu meinem Freund war es schwer, das für Zufall zu halten. Wenn man bedenkt, dass mein Freund schon einmal in unserem WLAN war, frage ich mich, ob es Cache-Verunreinigung oder ein Leck von Session-Daten gibt.
Da die Funktion noch nicht ausgereift ist, ist es besser, Memory auszuschalten; wenn der Freund jedoch seinen eigenen Account verwendet hat, erklärt das dieses Phänomen nur schwer.
Claude Code hat beim Scrapen von SEC-Dokumenten meinen Namen und meine E-Mail-Adresse in den User-Agent geschrieben. Dafür war nicht einmal ein raffinierter Prompt nötig, und die Idee an sich ist nicht völlig schlecht, aber ich hätte gern vorher gefragt werden wollen.
SEC_EDGAR_USER_AGENT="Your Name (name@domain.com)"zu setzen, also hat Claude lediglich die Anweisung befolgt. Vielleicht ist genau das sogar noch gefährlicher.Ich frage mich, wie viele Nutzer die globale Memory-Funktion aktiviert haben, die für alle Unterhaltungen gilt. Solcher Memory dürfte am Ende die Ausgabequalität beeinträchtigen.
Andererseits hilft es in Momenten, in denen man nicht jedes Mal langatmig den Hintergrund erklären muss.
Deshalb aktiviere ich Memory nicht und nutze Claude Code aus anderen Gründen ebenfalls nicht. Das aktuelle Memory-System ist viel zu grob gestrickt, um nützlich zu sein.