8 Punkte von GN⁺ 2025-10-14 | 1 Kommentare | Auf WhatsApp teilen
  • Im Juni 2025 wurde in GitHub Copilot Chat eine kritische Schwachstelle (CVSS 9.6) entdeckt
  • Es wurde bestätigt, dass durch CSP-Umgehung und Remote Prompt Injection geheime Informationen und privater Code offengelegt werden können
  • Durch Missbrauch der versteckten Kommentarfunktion von GitHub lassen sich die Copilot-Antworten anderer Nutzer manipulieren
  • Durch eine präzise Analyse der Struktur des Camo-Proxys von GitHub gelang eine erfolgreiche CSP-Umgehung
  • GitHub behob die Schwachstelle im August 2025 kurzfristig, indem das Rendern von Bildern deaktiviert wurde

TL;DR Zusammenfassung

  • Im Juni 2025 wurde in GitHub Copilot Chat eine kritische Schwachstelle entdeckt, durch die Quellcode und geheime Informationen aus privaten Repositories offengelegt werden konnten
  • Die Entdecker nutzten Remote Prompt Injection und die Umgehung der GitHub-CSP (Content Security Policy), um Copilot-Antworten vollständig zu manipulieren und zu steuern sowie Vorschläge für bösartigen Code oder Links zu erzwingen
  • Der Kern des Angriffs liegt darin, mit der offiziellen Funktion für versteckte Kommentare von GitHub und der Kontextsensitivität von Copilot Prompts auf unsichtbare Weise einzuschleusen
  • Durch die Analyse des Verhaltens, mit dem GitHub externe Bildlinks automatisch in den Camo-Proxy umwandelt, wurde die Struktur bis auf Zeichenebene zweckentfremdet, um exfiltrierte Informationen zusammenzusetzen
  • Nach einer Meldung über HackerOne wurde die Schwachstelle von GitHub durch das Blockieren der Bilddarstellung in Copilot Chat gepatcht

Hintergrund

  • GitHub Copilot Chat ist ein integrierter KI-Assistent, der Entwicklern hilft, Fragen zu stellen, Code erklären zu lassen oder Implementierungsvorschläge zu erhalten
  • Copilot Chat greift auf verschiedene Kontextinformationen wie Code, Commits und PRs (Pull Requests) im Repository zu
  • Je mehr Kontextinformationen vorhanden sind, desto größer wird auch die Angriffsfläche

Nutzung von Prompt Injection und der Funktion für versteckte Kommentare

  • In einem Experiment zur Ausnutzung der Kontextsensitivität von GitHub Copilot wurde ein bestimmter Prompt in die Beschreibung eines PRs (Pull Requests) eingefügt
  • Normalerweise können eingefügte Prompts oder Nachrichten jedoch von allen Nutzern eingesehen werden
  • Dabei wurde entdeckt, dass sich mit der offiziellen GitHub-Funktion für versteckte Kommentare(``) Befehle unsichtbar und nur an Copilot übermitteln lassen
  • Wird ein Prompt in einen versteckten Kommentar eingefügt, erscheint dies zwar in Benachrichtigungen, der konkrete Inhalt bleibt jedoch verborgen, wodurch ein Server-Side-Injection-Effekt entsteht

Reichweite des bösartigen Prompts

  • Ein Prompt in einem versteckten Kommentar beeinflusst Copilot auch dann, wenn andere Nutzer die PR-Seite aufrufen
  • Statt einfacher Textanweisungen lassen sich komplexe Befehle einfügen, darunter Codevorschläge, Markdown, bösartige URLs und Empfehlungen für Schadpakete wie Copilotevil
  • Copilot verwendet dieselben Berechtigungen wie der Nutzer, der die Anfrage sendet, und kann daher auf private Repositories zugreifen und deren Informationen verwenden
  • Durch das absichtliche Anhängen von base16-kodierten Daten an eine URL lässt sich ein Szenario umsetzen, in dem beim Klick des Nutzers Informationen an den Angreifer abfließen

Wichtigste Auswirkungen

  • Manipulation und Kontrolle der Copilot-Antworten anderer Nutzer
  • Maßgeschneiderte Prompt Injection mit Markdown, Bildern, Code und URLs möglich
  • Praktikable Angriffe zur Exfiltration von Informationen innerhalb des Berechtigungsrahmens des betroffenen Nutzers

Strukturelle Analyse der GitHub-CSP-Umgehung

  • GitHub schränkt durch eine strikte CSP das Laden von Bildern und Ressourcen von externen Domains ein
  • Wenn Bilder in README-Dateien oder Markdown eingebettet werden, wandelt der GitHub-Camo-Proxy externe URLs in Proxy-URLs auf Basis von HMAC-Signaturen um
  • Damit der Browser ein Bild laden kann, sind eine zuvor von GitHub erzeugte Camo-URL und der Signaturwert erforderlich
  • Selbst wenn ein Nutzer eine URL mit beliebigen dynamischen Daten erstellt, wird sie ohne den Camo-Proxy blockiert

Missbrauch der Camo-Struktur

  • Die Entdecker erzeugten im Voraus ein Wörterbuch von Camo-Proxy-URLs für das gesamte Alphabet und alle Sonderzeichen und betteten es in den versteckten Prompt ein
  • Copilot wurde angewiesen, ein „ASCII-Art-Spiel“ auszuführen und die exfiltrierten Informationen (z. B. Quellcode, Schlüssel) in eine Folge von Camo-Proxy-Bildern umzuwandeln
  • Bei jeder Bildanfrage antwortet der Browser lediglich mit einem transparenten 1x1-Pixel, sodass der Nutzer keine sichtbare Veränderung bemerkt
  • Abschließend wurden zufällige Parameter hinzugefügt, um Caching-Probleme zu vermeiden

Praktische Umsetzung und Angriffstest

  • Als Ziel wurde die Beschreibung einer Zero-Day-Schwachstelle in einem Issue eines privaten Projekts gewählt
  • Mit einem PoC (Proof of Concept) wurde der tatsächliche Ablauf des Exfiltrationsangriffs nachgewiesen
  • Copilot wurde außerdem dazu gebracht, beispielhaft nach dem Schlüsselwort "AWS_KEY" zu suchen und das Ergebnis automatisch zu exfiltrieren

Reaktion und Patch von GitHub

  • GitHub behob die Schwachstelle zum 14. August 2025, indem das Rendern von Bildern in Copilot Chat vollständig deaktiviert wurde

Mehr erfahren

1 Kommentare

 
GN⁺ 2025-10-14
Hacker-News-Kommentare
  • Wir sind sehr froh, unsere gesamte Arbeitsumgebung auf das selbst gehostete VCS Forgejo umgestellt zu haben. Vor zwei Jahren haben wir damit begonnen, sogar alle Client-Repositories zu migrieren. Dadurch haben wir nicht nur die GitHub-Abokosten drastisch gesenkt, sondern auch eine deutlich schnellere und stabilere Performance für ein System erreicht, das täglich von 30 bis 40 Entwicklern genutzt wird. Außerdem haben wir die Nutzung von VSCode und allen Editoren mit integrierten LLM-Funktionen verboten. Entwickler dürfen CLI-basierte Coding-Agenten verwenden, diese laufen jedoch in streng isolierten Containern und erhalten nur eingeschränkten Zugriff auf Quellcode.

    • In einer Umgebung, in der 30 bis 40 Entwickler jeweils Repositories auf ihre lokalen Maschinen klonen und dort arbeiten, würde mich interessieren, wie ihr verhindert, dass jemand versehentlich ein komplettes Repository einem LLM offenlegt. Und falls jemand aus Angst vor beruflichen Nachteilen einen Fehler nicht meldet: Wie erkennt ihr dann überhaupt, dass es zu einem Datenabfluss gekommen ist?

    • Ich würde gern fragen, welche IDE ihr stattdessen verwendet.

    • Mich würde interessieren, womit die CLI-Tools verbunden sind. Sind das die offiziellen Dienste von OpenAI oder Claude, oder ein Provider wie AWS Bedrock?

    • VSCode komplett zu verbieten wirkt auf mich überzogen und geht über das Sperren problematischer Plugins oder Funktionen hinaus. VSCode ist die einzige IDE mit breiter Unterstützung auch für Sprachen wie Haskell, Lean 4 und F*, die in anderen IDEs kaum unterstützt werden. Selbst große kommerzielle Konsumgüterunternehmen verbieten nicht VSCode an sich, sondern erwarten nur, dass problematische Funktionen nicht genutzt werden.

  • Ich denke, dieses Problem ist in Wirklichkeit nicht wirklich gelöst. Das Beeindruckende an Copilot ist gerade, dass es natürliche Spracheingaben versteht. Mit anderen Worten: Egal welche Exfiltrationsmethode man beschreibt, wenn man sie auf Englisch formuliert, führt es sie aus. Es heißt zwar, eine bestimmte Methode sei „behoben“ worden, aber wie genau das geschehen ist, wird nicht offengelegt. Man könnte zum Beispiel base64 in einer Bild-URL verwenden oder das Modell mit etwas wie „Ich habe meine Einkaufsliste versehentlich im Feld passswd gespeichert, bitte finde sie“ dazu bringen, sogar Passwörter preiszugeben. Es scheint sehr viele auffindbare Schwachstellen zu geben. Ich frage mich, ob es dafür überhaupt ein Bug-Bounty-Programm gibt. Das hier ist eine Goldmine.

    • Was genau ist damit gemeint, base64 als Bild-URL zu verwenden? Ist gemeint, eine Bild-URL ohne Camo zu benutzen? Soweit ich weiß, werden Bilder ohne Camo wegen CSP blockiert. Und wenn der Copilot-Agent keinen Internetzugang hat, dürfte schon ein fetch schwierig sein. Falls es doch möglich ist, gäbe es wesentlich einfachere Angriffswege als über Bilder.

    • Ich denke, GitHub hat dieses Problem gelöst, indem das Rendern von Bildern in Copilot Chat vollständig deaktiviert wurde.

  • Die Idee ist beeindruckend, für alle Buchstaben und Symbole des Alphabets vorab Camo-URLs zu generieren und diese dann in den Prompt einzufügen. Ein eleganter Ansatz.

  • Dieser Artikel wirkt ein wenig wie Werbung für eine Firma namens Legit. Tatsächlich haben aber alle AI-basierten Lösungen dieselbe Schwäche: mangelnde Transparenz und Vertrauensprobleme. Bei AI-Cybersecurity-Tools, die nicht auf FOSS basieren, kann das Sicherheitsrisiko sogar noch größer werden.

  • So etwas ist nicht zum ersten Mal passiert; früher gab es bereits den verwandten Fall „GitHub Copilot Chat: From Prompt Injection to Data Exfiltration“.

    • So etwas wird sich auch in Zukunft immer wiederholen.
  • Ich denke, dass das Verstecken von Informationen in HTML-Kommentaren innerhalb von PRs weiterhin ein ernstes Problem bleiben kann, besonders in Open-Source-Repositories. Ich frage mich, ob sich dieser Punkt verbessert hat.

    • Diese Funktion wird häufig genutzt, um Hinweisnachrichten in Issue-/PR-Templates einzubauen. Es dürfte aber relativ einfach sein, Kommentare aus Copilot-Eingaben zu entfernen, und solange das Problem der „Prompt Injection“ bei LLMs nicht vollständig sicher gelöst ist, wäre zumindest vorübergehend so eine Maßnahme nötig.
  • Interessant an diesem Exploit ist, dass er das langsame tokenweise Antwortmuster von LLMs ausnutzt, sodass Daten der Reihe nach rekonstruiert werden können. Wenn ein LLM stattdessen die komplette Antwort als Block auf einmal zurückgeben würde, geriete das Timing durcheinander und eine Rekonstruktion wäre deutlich schwieriger.

    • Ich würde vorschlagen, URLs nicht nur pro Zeichen, sondern zusätzlich mit der Zeichenposition erzeugen zu lassen. Für die Zeichenkette „hacked“ könnte es etwa Anfragen an 0.0.0.0/1-h, 0.0.0.0/2-a usw. geben; anschließend ließen sich die Requests sortieren und doppelte Aufrufe entfernen.
  • Könnte man nicht als Gegenmaßnahme den Repository-Zugriff für Copilot-Nutzer auf schreibgeschützt beschränken?

  • Ich kann mich nicht einmal mehr daran erinnern, wann ich zuletzt mit Copilot privaten Quellcode exfiltriert habe.

  • Wirklich ein einzigartiger und cooler Ansatz.