Zurück zum Blog

Was sendet Ihr KI-Assistent nach außen: Traffic-Audit mit mitmproxy

Die Analyse des Traffics von GitHub Copilot hat gezeigt: Der Client sammelt bis zu 20 Kontextdateien, Diff-Änderungen und den Inhalt der offenen .env - alles wird als normaler Text an den Server gesendet, während die lokale Chat-Historie unverschlüsselt gespeichert wird. Eine Schritt-für-Schritt-Anleitung, wie man mitmproxy im lokalen Modus einrichtet, die Canary in der Anfrage abfängt und warum die standardmäßige Inhaltsausschlussfunktion im Agentenmodus nicht hilft.

📅15. August 2026
Was sendet Ihr KI-Assistent nach außen: Traffic-Audit mit mitmproxy

Am 11. August 2026 verbreitete sich auf Hacker News eine Analyse, die jeder lesen sollte, der einen AI-Assistenten in seiner Arbeits-IDE hat: Ein Forscher stellte VS Code mit GitHub Copilot hinter einen abfangenden Proxy und beobachtete, was genau auf die Server gesendet wird. Es stellte sich heraus, dass in der Anfrage deutlich mehr enthalten ist als die Zeile, die Sie hinzufügen, einschließlich des Inhalts der offenen .env im Klartext.

Die gute Nachricht: Jeder kann dies überprüfen, und nicht nur mit Copilot. Im Folgenden finden Sie eine praktische Anleitung, wie Sie in 20–30 Minuten die Traffic-Auditierung Ihres Assistenten einrichten, was in den abgefangenen Anfragen zu suchen ist und welche Einschränkungen die Standardmechanismen zum Ausschluss von Dateien haben.

Warum man es selbst machen sollte

Die Dokumentation des Anbieters beschreibt die Richtlinien, nicht das tatsächliche Verhalten des Clients. Zwischen „wir verwenden Ihren Code nicht zum Trainieren“ und „der Client sendet Ihren Code nicht an den Server“ liegt ein Abgrund: Um einen Hinweis zu generieren, muss das Modell den Kontext erhalten, und die Frage ist nur, wie umfassend der Client diesen Kontext sammelt.

Ein Audit ist notwendig, wenn Sie:

  • auf Basis eines NDA arbeiten oder mit personenbezogenen Daten von Kunden umgehen und wissen müssen, was über den Perimeter hinausgeht;
  • Geheimnisse, Konfigurationen von Ständen, interne Adressen und Tokens in Ihrem Repository speichern;
  • für die Compliance im Team verantwortlich sind und nicht nur einen Screenshot der Einstellungen benötigen, sondern ein Protokoll der tatsächlichen Anfragen;
  • einfach verstehen möchten, warum der Assistent plötzlich „weiß“, dass es eine Datei gibt, die Sie nicht geöffnet haben.

Was im Traffic von Copilot gefunden wurde

Die Analyse, um die es geht, basierte auf dem klassischen mitmproxy: VS Code wurde auf einen lokalen Proxy auf Port 8080 geleitet und die strenge Zertifikatsüberprüfung wurde deaktiviert. Die wichtigsten Erkenntnisse:

  • Der Kontext ist breiter als eine Datei. Bei Inline-Vervollständigungen sammelt der Client bis zu 20 Dateien, 8 Zusammenfassungen der letzten Änderungen und 3 Zeilen Kontext um jede Änderung herum, plus den vollständigen Text der aktuellen Datei und kürzlich bearbeitete Dateien in Form von Diffs.
  • Geheimnisse werden nicht maskiert. Im Anfragekörper enthielt das Feld prompt eine Zeile wie TEST_ENV_VAR_SECRET="mysecretenvvar" – das heißt, Umgebungsvariablen aus der offenen Datei wurden als normaler Text gesendet.
  • Die lokale Datenbank ist ebenfalls offen. Die Datei session-store.db speichert user_message und assistant_response unverschlüsselt und unverändert: darin sammelten sich Tokens, Schlüssel von Cloud-Anbietern und Passwörter aus Verbindungszeichenfolgen, die Sie einmal in den Chat eingefügt haben.
  • Serviceaufrufe. Neben den eigentlichen Vervollständigungen ruft der Client /models, /agents/swe/models, /models/session/intent und OAuth-Endpunkte von GitHub auf – daran lässt sich gut erkennen, wie der Assistent Ihre Anfrage noch vor der Generierung der Antwort klassifiziert.

Es ist wichtig zu beachten: Der Client sendet die URL des aktuellen Repositories an den Server, um die anwendbare Ausschlussrichtlinie zu erhalten. An sich ist dieser Fakt harmlos, aber er bedeutet, dass die Zusammensetzung Ihres Arbeitsbaums ebenfalls ein Signal ist.

Schritt für Schritt: Abfangen einrichten

  1. Installieren Sie mitmproxy und starten Sie es. Der Web-Interface ist ausreichend: mitmweb. Standardmäßig hört der Proxy auf Port 8080, die Konsole öffnet sich im Browser. Für CI und lange Sitzungen ist mitmdump bequemer.
  2. Installieren Sie das Root-Zertifikat. Bei der ersten Ausführung erstellt mitmproxy eine CA im Verzeichnis ~/.mitmproxy (Datei mitmproxy-ca-cert.cer). Dieses muss zu den vertrauenswürdigen Zertifikaten hinzugefügt werden – andernfalls wird die TLS-Verbindung vom Client abgebrochen. Während des Audits reicht Vertrauen auf Benutzerebene aus; danach – löschen Sie das Zertifikat, lassen Sie kein fremdes CA „für alle Fälle“ im System.
  3. Wählen Sie den Abfangmodus. Es gibt drei, und die richtige Wahl spart eine Stunde Aufwand:
    • regular – normaler Proxy, der Client wird explizit konfiguriert. Die vorhersehbarste Option.
    • local – transparenter Abfang von Anwendungen auf demselben Rechner, ohne die Programmeinstellungen zu ändern: mitmproxy --mode local:Code fängt nur den Prozess von VS Code, --mode local:42 – den Prozess mit der angegebenen PID, --mode local:!curl – alles außer curl. Dies ist der beste Weg, um einen Assistenten abzuhören, der keine Proxy-Einstellungen hat.
    • upstream – Kette, bei der hinter mitmproxy Ihr eigener Proxy steht: mitmdump --mode upstream:http://host:8081, und Benutzername und Passwort werden mit der Option --set upstream_auth=user:pass festgelegt.
  4. Leiten Sie die IDE zum Proxy (für den regular-Modus). In VS Code in settings.json:
    • "http.proxy": "http://127.0.0.1:8080"
    • "http.proxySupport": "override"
    • "http.proxyStrictSSL": false – nur während des Audits. Dieses Flag deaktiviert die Zertifikatsüberprüfung vollständig, und es ist nicht erlaubt, es in der Arbeitskonfiguration zu belassen.
  5. Beheben Sie das Zertifikatsproblem auf professionelle Weise. Die Copilot-Erweiterung läuft auf Node, daher ist der korrekte Weg, die Überprüfung nicht zu deaktivieren, sondern ein PEM mit den Root-CA plus dem mitmproxy-Zertifikat zu erstellen und es über die Umgebungsvariable NODE_EXTRA_CA_CERTS anzugeben. Die IDE muss neu gestartet werden: Die Variable wird beim Start des Prozesses gelesen.
  6. Schreiben Sie den Stream in eine Datei. In Echtzeit mit den Augen zu schauen, ist nutzlos – es gibt Dutzende Anfragen pro Minute. Aktivieren Sie --set save_stream_file=flows.dump, und um nicht alles zu sammeln, beschränken Sie die Auswahl über --set save_stream_filter=.... Danach kann die Datei bequem offline analysiert werden.
  7. Suchen Sie im Anfragekörper, nicht in der URL. Praktischer Trick: Legen Sie in ein Test-Repository eine Kanarienvogel-Datei mit einer einzigartigen Zeile (zum Beispiel CANARY_9f3c_DO_NOT_SEND), öffnen Sie sie im Editor, arbeiten Sie in einer benachbarten Datei – und suchen Sie den Kanarienvogel in den abgefangenen Körpern. So sehen Sie nicht den theoretischen, sondern den tatsächlichen Umfang der Kontextsammlung genau bei Ihrer Client-Version.

Fallstricke

Die Lizenz kann das Abfangen blockieren. Bei Unternehmensplänen gibt Copilot einen Fehler wie „Ihre aktuelle Copilot-Lizenz unterstützt keine Proxy-Verbindungen mit selbstsignierten Zertifikaten“ zurück. Dies ist kein Proxy-Bug – der Client weigert sich absichtlich, über eine selbstsignierte CA zu arbeiten. Dies kann mit einem vertrauenswürdigen Zertifikat auf Systemebene oder durch Erstellen eines PEM für Node behoben werden; wenn die Richtlinie der Organisation dies verbietet, muss das Audit mit dem Administrator abgestimmt werden, anstatt es zu umgehen.

Pinning und QUIC. Ein Teil der Clients verwendet HTTP/3 über QUIC, das ein normaler Proxy nicht sehen kann. Wenn die Anwendung nach dem Aktivieren des Abfangens „funktioniert, aber das Protokoll leer ist“ – liegt die Ursache fast immer darin: Blockieren Sie UDP/443 für den Testprozess, und der Client wird auf HTTP/2 zurückfallen.

Telemetrie und Nutzlast gehen getrennte Wege. Ziehen Sie nicht den Schluss „nichts geht weg“ aufgrund eines einzelnen Endpunkts: Überprüfen Sie die gesamte Liste der Hosts, zu denen der Prozess eine Verbindung herstellt, und nicht nur den, der in der Dokumentation erwähnt wird.

Rechtlicher Rahmen. Das Abfangen von Traffic ist auf Ihrem eigenen Computer und Ihrem eigenen Konto erlaubt. Das Abhören eines fremden Arbeitslaptops ohne Wissen des Eigentümers ist jedoch eine andere Geschichte, und keine „Sicherheit“ rechtfertigt dies.

Was mit den Ergebnissen zu tun ist

Wenn das Audit gezeigt hat, dass unnötige Dateien in die Anfragen gelangen, sehen die Standardmittel so aus – und jede hat eine spürbare Einschränkung.

  • Content exclusion. Der offizielle Mechanismus von GitHub, der Copilot verbietet, angegebene Pfade zu verwenden. Nur auf Business- und Enterprise-Plänen verfügbar, wird vom Administrator in den Copilot-Einstellungen konfiguriert, unterstützt in VS Code, Visual Studio und JetBrains; in Xcode, Eclipse und Vim/Neovim – nur für Inline-Hinweise.
  • Das Hauptproblem – Agentenmodus. Die Dokumentation besagt ausdrücklich, dass Ausschlüsse in den Modi Edit und Agent im Copilot Chat sowie im Copilot CLI nicht unterstützt werden. Das heißt, genau dort, wo der Assistent selbst durch Dateien geht, Konfigurationen liest und Befehle ausführt, wird keine plattformseitige Filterung angewendet. Wenn Sie sich auf die Content exclusion als einzige Barriere verlassen – im Agentenmodus gibt es keine Barriere.
  • .gitignore schützt nicht. Ein weit verbreiteter Irrtum: Das Ausschließen aus dem Git-Index bedeutet nicht, dass es aus dem Kontext des Assistenten ausgeschlossen wird.
  • Organisatorisches Minimum. Geheimnisse gehören in einen Geheimnismanager und nicht in .env neben dem Code; der Chat des Assistenten ist nicht der Ort, um Verbindungszeichenfolgen einzufügen; die lokale Datenbank der Historie sollte genauso gereinigt werden, wie Sie den Verlauf der Shell reinigen.

Wo hier der Proxy ist und warum er Ihnen nützt

Das Abfangen hat eine praktische Fortsetzung. Erstens ermöglicht der upstream-Modus, den gesamten Traffic des Assistenten über einen kontrollierten Ausgangsknoten zu leiten: Sie sehen gleichzeitig die Anfragen und steuern, von welcher Adresse sie gesendet werden. Dies ist notwendig, wenn die API des Assistenten aus Ihrer Region nicht verfügbar ist oder wenn die Unternehmenspolitik eine feste ausgehende IP erfordert – für ein solches Szenario sind stabile Rechenzentrums-Proxys mit fester Adresse geeignet.

Zweitens ist dasselbe Setup nützlich für die Fehlersuche bei der Automatisierung: Wenn der AI-Agent selbst auf Websites geht, zeigt das Abfangen, welche Header er tatsächlich sendet und worauf ihn die Schutzmaßnahmen abfangen. Wir haben diese Kombination in dem Artikel über Proxys für AI-Agenten in Playwright und MCP behandelt – dort geht es um die Auswahl des Adresstyps für Agentenszenarien, in denen eine residente IP und nicht eine Server-IP erforderlich ist.

Wenn Sie mitmproxy noch nie eingerichtet haben, beginnen Sie mit der grundlegenden Einrichtung des HTTPS-Abfangens – diese ist ausführlich in unserem Leitfaden zum Abfangen von Traffic über mitmproxy beschrieben, und darauf können Sie die Modi local und upstream aufbauen.

Fazit

Die Auditierung des Traffics eines AI-Assistenten ist keine Paranoia, sondern eine normale Ingenieurg Hygiene, die einen Abend und einmalig in Anspruch nimmt. Die Analyse von Copilot zeigte ein klares Bild: Der Client sammelt den Kontext umfassend, Geheimnisse gelangen in diesen Kontext ebenso wie der Code, die lokale Historie wird im Klartext gespeichert, und die Standardausschlüsse funktionieren genau im gefährlichsten Modus – dem Agentenmodus.

Überprüfen Sie nicht die Dokumentation, sondern den Traffic. Starten Sie mitmproxy im local-Modus, legen Sie eine Kanarienvogel-Datei in das Repository, sammeln Sie den Stream in eine Datei und sehen Sie mit eigenen Augen, was von Ihrem Computer gesendet wird. Danach ist die Entscheidung einfach: Entweder akzeptieren Sie bewusst dieses Übertragungsvolumen, oder Sie bringen Geheimnisse aus dem Arbeitsbaum, bevor sie von einem fremden Server gesehen werden.