14. April 2023

ChatGPT ein Segen für Pentester:innen oder nicht zu gebrauchen? #2

Code Analyse – Kann ChatGPT Schwachstellen in Codeschnipseln finden?

Auch Code-Analysen werden in der IT-Sicherheitsbranche immer häufiger in Auftrag gegeben. Daher lag es nahe, ChatGPT auf seine Fähigkeiten bei der Erkennung von Schwachstellen zu testen. Die KI wurde mit drei verschiedenen Schwachstellen getestet, die alle aus öffentlich zugänglichen Quellen stammen und als Referenz dienen. Dazu wurde der ChatAI jeweils ein Stück Code übergeben und die Frage gestellt, ob dieser Code Schwachstellen enthält. Folgende Schwachstellen wurden getestet:

  • Dom Based XSS: DOM-basiertes XSS ist eine Cross-Site-Scripting-Schwachstelle, die es Angreifern ermöglicht, eine bösartige Nutzlast in eine Webseite einzuschleusen, indem sie die Browserumgebung des Clients manipulieren. Da diese Angriffe auf dem Document Object Model beruhen, werden sie auf der Client-Seite nach dem Laden der Seite ausgeführt.
  • PHP-Deserialization / Object Injection: Bei der Serialisierung wird ein Objekt in einer Programmiersprache (z. B. ein PHP-Objekt) in ein Format umgewandelt, das gespeichert oder übertragen werden kann. Bei der Deserialisierung hingegen wird das serialisierte Objekt aus einer Datei oder dem Netzwerk gelesen und wieder in ein Objekt umgewandelt. Schwachstellen bei der Deserialisierung treten auf, wenn Anwendungen Objekte ohne angemessene Bereinigung deserialisieren. Ein Angreifer kann dann serialisierte Objekte manipulieren, um den Programmablauf zu ändern.
  • Symlink Angriffe: Ein symbolischer Link, kurz Symlink, ist ein Link der auf eine bestimmte Datei verweist, wobei der Zielbenutzer oder die Zielanwendung auf den Endpunkt des Links zugreift auf den er zeigt, in der Annahme, dass sie auf die Datei mit dem Namen des Links zugreift.

Zuerst wurde ein Stück Javascript-Code übergeben, der von OWASP (Open Web Application Security Project) als Beispiel für eine DOM-basierte XSS-Schwachstelle verwendet wird. ChatGPT konnte den Code analysieren und die Schwachstelle identifizieren. Auf Anfrage wurde von ChatAI ein Beispiel generiert, mit dem die Schwachstelle ausgenutzt werden kann: https://owasp.org/www-community/attacks/DOM_Based_XSS

Im zweiten Beispiel glaubt ChatGPT eine RCE zu erkennen, obwohl diese nicht vorhanden ist. Die Schwachstelle besteht darin, dass durch die unsichere Deserialisierung Dateien des zugrundeliegenden Systems gelöscht werden können (https://owasp.org/www-community/vulnerabilities/PHP_Object_Injection). Nach einer erneuten Anfrage wurde eine Local File Inclusion Schwachstelle gefunden. Dies kommt der Lösung näher, ist aber immer noch nicht korrekt. Auch die neu erzeugten Payloads waren beim zweiten Versuch fehlerhaft.

Nachdem beide Fehler angesprochen wurden, meinte ChatGPT zunächst, der Code habe keine Schwachstellen. Nachdem explizit nach „Path-Traversal“ gefragt wurde, kam auch die KI zur richtigen Antwort. Dieses Ergebnis zeigt, dass auch die KI nicht alle Fehler erkennen kann. Hier wäre eine manuelle Analyse durch einen menschlichen Tester von Vorteil gewesen.

Im dritten und letzten Beispiel handelt es sich um Angriffe, bei denen durch die Erstellung von Symlinks andere Dateien manipuliert werden können. In der Code-Referenz wird dies durch Kommentare erläutert. (https://github.com/snoopysecurity/Vulnerable-Code-Snippets/blob/master/Symlink%20Attack/file.c). ChatGPT erkennt das Problem, geht aber nicht direkt auf die Möglichkeit ein, mit Symlinks auch andere Dateien zu manipulieren. Bei einer zweiten Nachfrage meldet ChatGPT auch hier keine Schwachstelle mehr. Erst auf eine dritte direkte Nachfrage nach Symlinks wird wieder mit dem ursprünglichen Text geantwortet, in dem nun aber auch auf Symlinks eingegangen wird.

Zusammenfassend kann gesagt werden, dass ChatGPT durchaus in der Lage ist, Schwachstellen im Code zu erkennen, aber auch bei falschen Antworten aufgibt. Erst wenn man der KI einen kleinen „Denkanstoß“ gibt, antwortet sie in den meisten Fällen richtig.

Sie haben die weiteren Teile von „ChatGPT ein Segen für Pentester:innen oder nicht zu gebrauchen?“ verpasst?

In Teil 1 finden Sie die Ergebnisse zu folgenden Beispielen:

  • Hilfe bei Programmfehlern – Kann ChatGPT bei Fehlermeldungen assistieren?
  • Vorschläge für Tools durch beschreiben der Situation – Kann ChatGPT Tools empfehlen womit z.B. Schwachstellen besser identifiziert werden können?

In Teil 3 werden außerdem folgende Fragestellungen thematisiert:

  • Suche nach CVEs anhand von Versionsnummern – Kann ChatGPT anhand von übergebenen Produktinformationen und Versionsnummern CVEs ausfindig machen?
  • Schreiben von Schwachstellen Beschreibungen – Kann ChatGPT Schwachstellen beschreiben und Lösungsvorschläge unterbreiten?