Skip to main content

Code-Schwachstellen automatisch mit KI beheben

Artikel von
feature ai ide dark

14. Oktober 2024

0 Min. Lesezeit

In Snyks Bibliothek mit SecRel-Kundenworkshops gibt es einen Workshop namens Breaking AI. Darin geht es darum, wie generative KI-Assistenten wie copilot und codium Entwicklern dabei helfen können, schneller Code zu schreiben. Die zentrale Erkenntnis des Workshops: KI-Assistenten sind wie Junior-Entwickler direkt nach dem Coding-Bootcamp – extrem motiviert und hilfsbereit, aber Sie sollten ihren Code wirklich überprüfen (nichts gegen Junior-Entwickler – wir brauchen sie, und sie sind großartig!). Im Workshop zeigen wir, wie Sie KI-Assistenten und Snyk kombinieren und so zur Superkraft gelangen: schnell und sicher Code schreiben.

Um einen berühmten Koch zu zitieren: Snyk hat mit der Funktion Deep Code AI Fix jetzt „noch einen draufgelegt“. Snyk Code gab schon immer gute Empfehlungen zur Behebung von Sicherheitslücken. Außerdem lieferte es drei hilfreiche Referenzen zu anderen Open-Source-Projekten mit derselben Schwachstelle und zeigte, wie diese Projekte sie behoben hatten. Dank sorgfältig kuratierter Daten aus Snyks Security-Research-Team und einem hybriden KI-Modell, das die Leistungsfähigkeit generativer und symbolischer KI sowie Machine-Learning-Modelle vereint, kann Snyk jetzt viele häufige Sicherheitslücken direkt in Ihrer bevorzugten IDE automatisch beheben.

In diesem Blogbeitrag zeige ich Ihnen anhand eines Java-Beispielprojekts aus unseren Workshops, wie Sie Deep Code AI Fix (DCAIF) optimal nutzen können. Den Quellcode finden Sie hier. HINWEIS: Dieses Projekt weist absichtlich mehrere Schwachstellen auf und ist für den Einsatz in Produktionsumgebungen ungeeignet.

Spaß mit einer Konferenzplanungs-App

Wenn Sie schon einmal eine Tech-Konferenz besucht oder dort einen Vortrag gehalten haben, wissen Sie: Eine der größten Herausforderungen ist es, das Programm zu erstellen und zu präsentieren.

Die Beispiel-App ist eine ziemlich schlechte Version davon (ich bin KEIN guter Frontend-Entwickler!), eignet sich aber gut, um zu zeigen, dass Code technisch funktionieren und gleichzeitig unsicher sein kann.

Es handelt sich um eine Spring Boot-App mit der Template-Engine Thymeleaf. Beim Start generiert sie mithilfe der beliebten Bibliothek faker zufällige Daten zu Sprechern, Vortragstiteln und Vortragsbeschreibungen. Die Titel und Beschreibungen stammen alle aus dem Buch „Per Anhalter durch die Galaxis“. HINWEIS: Nicht alle Titel und Beschreibungen sind unbedingt für die Arbeit geeignet. Sie sind gewarnt!

Für jeden generierten Sprecher der Veranstaltung gibt es außerdem eine eigene Seite, auf der Sie eine Liste seiner Vorträge auf der Konferenz sehen können. Auf diesen Teil der App konzentrieren wir uns.

Um die App zu kompilieren und auszuführen, führen Sie Folgendes aus:

mvn clean install
mvn spring-boot:run

Wenn Sie die App starten, sehen Sie neben dem üblichen Spring-Boot-Banner und anderen Ausgaben etwa Folgendes:

Access talks for heath.davis at: http://localhost:8081/talks?username=heath.davis
Access talks for russell.bernier at: http://localhost:8081/talks?username=russell.bernier
Access talks for kenyetta.jones at: http://localhost:8081/talks?username=kenyetta.jones
Access talks for howard.bailey at: http://localhost:8081/talks?username=howard.bailey
Access talks for buddy.jast at: http://localhost:8081/talks?username=buddy.jast
Access talks for jeanice.kertzmann at: http://localhost:8081/talks?username=jeanice.kertzmann
Access talks for deborah.hamill at: http://localhost:8081/talks?username=deborah.hamill
Access talks for horacio.renner at: http://localhost:8081/talks?username=horacio.renner
Access talks for winfred.schuster at: http://localhost:8081/talks?username=winfred.schuster
Access talks for tommie.hane at: http://localhost:8081/talks?username=tommie.hane
Access talks for micah at: http://localhost:8081/talks?username=micah

HINWEIS: Die Ausgabe sieht nicht genau so aus, da die Sprecher und ihre Vorträge bei jedem Start der App zufällig generiert werden.

Wenn Sie auf einen der Links klicken oder ihn kopieren und einfügen, wird Ihnen eine Sprecherseite mit einer Liste seiner Vorträge angezeigt:

Webseite einer Java-Konferenz mit einer durchsuchbaren Liste von Vorträgen, einschließlich Namen der Referierenden, Titeln, Beschreibungen sowie Start- und Enddaten.

Los geht’s: Finden Sie die Schwachstelle

Sehen Sie sich TalkController.java an. So wird die Seite eines Sprechers gerendert. Entdecken Sie die Schwachstelle?

Wir möchten nicht, dass Sie sich auf Ihr bloßes Auge verlassen müssen! Entwickler sollen schnell vorankommen UND sicheren Code schreiben.

Für meine Java-Anwendungen verwende ich IntelliJ Idea. Außerdem nutze ich die IDE-Erweiterung von Snyk. Die gute Nachricht: Es gibt Snyk-IDE-Erweiterungen für alle gängigen IDEs, die eine große Auswahl an Programmiersprachen unterstützen.

Wenn Sie den Schritten folgen möchten und noch kein Snyk-Konto haben, können Sie hier kostenlos eines erstellen.

Habe ich schon erwähnt, dass diese App viele Schwachstellen enthält? Das liegt daran, dass wir sie in unseren Workshops verwenden. Ich möchte mich auf die Schwachstelle in TalkController.java konzentrieren:

IDE mit einer hervorgehobenen Cross-Site-Scripting-Schwachstelle in TalkController.java sowie Snyk-Ergebnissen und einem Vergleich zur Behebung durch HTML-Escaping
  1. Zeigt an, dass eine Cross-Site-Scripting-Schwachstelle (XSS) gefunden wurde

  2. Zeigt einen Diff aus einem von drei Open-Source-Projekten mit derselben Schwachstelle. Daran ist zu sehen, wie sie behoben wurde (der grüne Bereich).

  3. Die rote Wellenlinie markiert die Stelle im Code, an der sich die Schwachstelle befindet.

All das sind hilfreiche Informationen, um das Problem zu beheben. Beachten Sie jedoch das kleine Blitzsymbol (⚡️) links neben der Schwachstelle unter Nr. 1. Es zeigt an, dass sich diese Schwachstelle automatisch beheben lässt.

Wenn Sie den Mauszeiger über die rote Wellenlinie bewegen, wird die Option Dieses Problem beheben angezeigt:

Code-Editor mit einer Warnung vor einer Cross-Site-Scripting-Sicherheitslücke und einem Lösungsvorschlag für nicht bereinigte HTTP-Parametereingaben.

Bevor wir uns das Ergebnis von Deep Code AI Fix ansehen, schauen wir uns an, was copilot für uns tun würde.

Hier sehen Sie den Prompt, den ich copilot in Zeile 42 gegeben habe, und den Code, den es einfügt:

// guard against XSS
username = username.replaceAll("<", "&lt;").replaceAll(">", "&gt;");

Das könnte bei einfachen Angriffen funktionieren, aber funktioniert es auch gegen alle Arten von XSS-Angriffen? Da bin ich mir nicht so sicher. Tatsächlich ist die XSS-Schwachstelle nach einem erneuten Snyk-Scan immer noch vorhanden.

Sehen wir uns die Behebung durch Snyk an:

String usernameStr = "<h1>" + HtmlUtils.htmlEscape(username) + "'s talks<h1>";

Jetzt gefällt mir das. Es nutzt mit HtmlUtils einen idiomatischen und erwarteten Ansatz mit einer integrierten Spring-Boot-Bibliothek. Ich bin überzeugt, dass damit die Eingabe username gründlich bereinigt wird. Ein neuer Snyk-Scan zeigt, dass die Schwachstelle nicht mehr vorhanden ist.

Snyk-Benachrichtigung, die Nutzerinnen und Nutzer dazu beglückwünscht, eine Cross-Site-Scripting-Schwachstelle (XSS) behoben zu haben, mit Daumen hoch und Daumen runter als Feedback-Optionen

Daumen hoch, und wie! Die automatische Behebung von Snyk hat nicht nur die Schwachstelle beseitigt, sondern dabei auch das verwendete Framework berücksichtigt – in diesem Fall Spring Boot.

DCAIF bremst Sie nicht aus

In diesem Beitrag habe ich Ihnen gezeigt, dass Snyks Deep Code AI Fix über Empfehlungen zur Behebung hinausgeht und Probleme auch für Sie beheben kann. Den Nutzen der Behebung können Sie zudem daran erkennen, dass die ursprüngliche Sicherheitslücke nicht mehr vorhanden ist.

Wir bei Snyk sind große Fans von KI-Assistenten, aber in Sachen Sicherheit sind sie nicht besonders gut. Unsere Untersuchungen zeigen, dass die generativen KI-Systeme derzeit ungefähr so häufig unsicheren Code erzeugen wie Menschen – in etwa 40 % der Fälle. Das leuchtet ein, denn reine generative KI-Lösungen wie Copilot trainieren ihre Modelle vor allem mit vorhandenem Code. Snyks hybrider Ansatz, der symbolische KI, generative KI, Machine Learning und von unserem Security-Team kuratierte Trainingsdaten vereint, sorgt für Ergebnisse, bei denen Sicherheit an erster Stelle steht.

Sichern Sie KI-generierten Code ab

Erstellen Sie Ihr kostenloses Snyk-Konto und sichern Sie KI-generierten Code in wenigen Minuten ab. Oder buchen Sie eine Demo mit unseren Experten und erfahren Sie, wie Snyk Ihre Anwendungsfälle für Entwicklersicherheit unterstützt.

Gepostet in:

Weiterlesen

Blog

Frontier-Modelle fanden die Schwachstellen. Nur der Angreifer fand die Angriffsketten.

Die statische Analyse fand die Schwachstellen, doch erst Live-Angriffstests bewiesen, wie sie sich zu Angriffen verketten lassen. Ein Vergleich von Evo COS, Claude Security und Claude Code Security.

feature insights context
Blog

Autonome Angriffe sind bereits Realität. Die Verteidigung muss Schritt halten.

Autonome Angreifer verkürzen das Zeitfenster für die Verteidigung. Erfahren Sie, wie kontinuierliches Erkennen, Beheben, Validieren und Verhindern Sicherheitsteams helfen kann, Schritt zu halten.

Blog

Warum KI-Coding-Agenten immer wieder fehlerhafte Zugriffskontrollen schreiben

KI-Coding-Agenten können Autorisierungslogik erzeugen, die kompiliert und die Prüfung besteht, dabei aber die Daten eines Mandanten für einen anderen offenlegt. Erfahren Sie, warum fehlerhafte Zugriffskontrollen schwer zu erkennen sind und wie Sie sie verhindern.