Programmierhilfe GitHub Copilot macht Code unsicherer

Gut 40 Prozent des von GitHub Copilot vorgeschlagenen Codes enthält Schwachstellen. Zu diesem Schluss kommen US-Professoren, die die Copilot-Vorschläge prüften.

Lesezeit: 3 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 50 Beiträge
Aufmacher Github Copilot erzeugt unsicheren Code

(Bild: JINOLD/Shutterstock.com)

Von
  • Uli Ries
Inhaltsverzeichnis

Im Rahmen der Sicherheitskonferenz Black Hat 2022 haben die beiden Professoren Hammond Pearce und Benjamin Tan von der New York University gemeinsam mit Kollegen ihre Untersuchung vorgestellt, wie sicher die von Github Copilot vorgeschlagenen Code-Bestandteile sind.

Github Copilot ist seit rund sechs Wochen verfügbar. Bei der KI-basierten Codevervollständigung handelt sich um eine kostenpflichtige Erweiterung für Programmierumgebungen.

Laut der Untersuchung reißen im Schnitt gut 40 Prozent der Vorschläge, die Copilot als erstes präsentiert und die der jeweilige Programmierer daher wahrscheinlich auch übernimmt, ernst zu nehmende Löcher in die Sicherheit des Codes.

Beeinflusst wird die Qualität der Vorschläge von einer ganzen Reihe an Faktoren, darunter die jeweilige Sprache. In C geschriebener Code führte zu mehr unsicheren Vorschlägen als Python-Code. Aber auch die Güte des vom jeweiligen Programmierer bereits geschriebenen Codes oder sogar der Name des Entwicklers haben Einfluss.

Als Grund für die teilweise haarsträubend unsicheren Vorschläge machen die Forscher das Training des auf OpenAI Codex, einem auf Programmcode optimierten Nachfahren von GPT-3, basierenden Copiloten aus: Die Software schlägt die jeweils wahrscheinlichste Vervollständigung der aktuellen Eingabe vor. Die Wahrscheinlichkeit berechnet sie anhand des Materials, das Copilot während des Trainings zugeführt bekam. Das KI-Modell generiert somit nicht den schnellsten, elegantesten oder sichersten Code, sondern eher den, der am besten zum vorhandenen Code passt.

So ist dann auch nachvollziehbar, warum Copilot während des Tests den seit Langem als unsicher bekannten Hash-Algorithmus MD5 zum Verschleiern von Passwörtern vorschlug. Wahrscheinlich traf Copilot in den Trainingsdaten häufiger auf MD5 als auf die sichereren Alternativen wie SHA-256 oder SHA-3.

Um die Sicherheit der vorgeschlagenen Code-Bestandteile zu bewerten, untersuchten die Forscher die mit Hilfe von Copilot erzeugten Programme sowohl automatisiert mittels Githubs CodeQL, als auch manuell. Als Benchmark dienten 18 Einträge aus der Liste der Top 25 Common Weakness Enumerations (CWEs) aus dem Jahr 2021. Die Forscher schrieben zuerst 54 sogenannte Szenarien für die 18 CWEs. Die Szenarien sind unvollständige Programmschnipsel, die Copilot dazu auffordern, Code zu generieren, der eine CWE enthalten könnte. In den Szenarien selbst ist noch kein unsicherer Code enthalten.

Die Forscher ließen Copilot jeweils maximal 25 Vorschläge zum betreffenden Szenario beisteuern und prüften den Code anschließend auf Funktionstüchtigkeit. De facto lauffähige Programme unterzogen sie dann der Sicherheitsbewertung.

Von den insgesamt 1084 validen Programmen enthielten 44 Prozent eine CWE. Im Fall von 24 der 54 Szenarien war es jeweils der erste von Copilot vorgeschlagene Schnipsel, der verwundbaren Code erzeugt hat. Die Forscher sagten während ihres Vortrags, dass sie diese Top-Vorschläge für gefährlicher halten als per Copy-and-paste von Stackoverflow eingefügten Code, da letzteres eine größere Hürde sei als das Akzeptieren der Copilot-Vorschläge.

Bezogen auf die Programmiersprachen zeigten sich deutliche Unterschiede. Während 50 Prozent der 513 in C geschriebenen Programme Schwachstellen hatten, lag der Wert im Fall von Python bei gut 38 Prozent. In einem Whitepaper haben die Forscher sämtliche Resultate im Detail festgehalten. Darunter auch die, bei denen Copilot sich mittels Vervollständigung von Verilog-Code am Design von Hardware-Komponenten versuchen sollte.

(dmk)