Skip to main content

So beheben Sie Java-Sicherheitsprobleme beim Programmieren in IntelliJ IDEA

Artikel von
Blog Design IntelliJ IDEA

8. April 2021

0 Min. Lesezeit

Heutzutage sind Entwickler für mehr verantwortlich als nur für die Entwicklung der Anwendung. Neben der Arbeit an Funktionen müssen sie auch auf Wartbarkeit, Skalierbarkeit, Zuverlässigkeit und Sicherheit ihrer Anwendungen achten. Viele Entwickler wissen nicht, wo sie beim Thema Sicherheit anfangen sollen. Außerdem arbeiten die meisten Unternehmen weiterhin mit einem eigenen Sicherheitsteam, anstatt Sicherheitskompetenz direkt ins Team zu integrieren.

Viele Entwickler verbringen einen Großteil ihrer Zeit in ihrer integrierten Entwicklungsumgebung (IDE). Eine gute IDE ist wie ein Schweizer Taschenmesser: das Werkzeug, zu dem Sie für fast alles greifen. Alles, was ich zum Erstellen, Ausführen, Testen, Debuggen und Absichern meiner Anwendung brauche, an einem Ort zu haben, macht eine gute IDE für viele Entwickler unverzichtbar.

Aus dem Snyk Java Ecosystem report des vergangenen Jahres wissen wir, dass IntelliJ IDEA die beliebteste und am häufigsten verwendete IDE im Bereich Java-Sicherheit ist. Dafür hat Snyk vor Kurzem ein neues Plugin zur Erkennung von Sicherheitslücken für IntelliJ IDEs veröffentlicht. Sehen wir uns an, wie wir mit diesem neuen Plugin Sicherheit und sicheres Entwickeln in diese IDE integrieren können.

Doch zunächst ein kurzer Überblick über die Themen dieses Beitrags:

Secure Coding with IntelliJ

Ich empfehle Ihnen, den Vollbildmodus zu aktivieren, damit Sie die Codebeispiele gut sehen können.

Snyk Vulnerability Scanner für IntelliJ IDEA

Gab es nicht bereits ein Snyk-IDE-Plugin für IntelliJ IDEA?

Doch, das gab es. Das alte Plugin konzentrierte sich jedoch ausschließlich auf das Scannen mit Snyk Open Source und half dabei, Sicherheitslücken in Open-Source-Abhängigkeiten zu finden und zu beheben. Das neue Plugin integriert außerdem die neu veröffentlichten Funktionen von Snyk Code und unterstützt Entwickler damit auf mehreren Ebenen.

Das Snyk-IDE-Plugin installieren

Am besten installieren Sie das Plugin über den IntelliJ IDEA Marketplace. Wenn Sie im Plugin-Marktplatz in IntelliJ IDEA einfach nach „snyk“ suchen, wird es sofort angezeigt.

IntelliJ IDEA Plugins Marketplace mit Suchergebnissen für den Snyk Vulnerability Scanner und einer Schaltfläche „Installieren“

Nach der Installation des Plugins und dem Neustart der IDE müssen Sie das Plugin authentifizieren. Um es zu verwenden, benötigen Sie mindestens ein kostenloses Snyk-Konto. Wenn Sie bereits ein Snyk-Konto haben, müssen Sie sich nur anmelden. Wenn Sie neu bei Snyk sind, führt Sie der Onboarding-Prozess durch die Registrierung für ein kostenloses Konto.

Snyk Code in IntelliJ IDEA integrieren

Wie bereits erwähnt, nutzte die vorherige Version des Snyk-Plugins für IntelliJ IDEA ausschließlich die Funktionen von Snyk Open Source. Damit konnten Sie Ihre Projekte auf Sicherheitslücken in Open-Source-Abhängigkeiten untersuchen. Mit dem neuen Plugin können Sie zusätzlich zum bestehenden Snyk Open Source-Scan auch die Funktionen von Snyk Code nutzen. Snyk Code ist ein Sicherheitsprodukt, das Ihren Code statisch auf potenziell anfällige Codemuster analysiert, die Sie oder Ihr Team erstellt haben. So können Sie mit einem einzigen Plugin Ihre gesamte Anwendung absichern. Probieren wir es aus.

Sicherheitslücken in IntelliJ beheben

Nach dem Scan meiner Anwendung sehe ich mehrere Bereiche auf dem Bildschirm. Der erste zeigt die bekannte Analyse mit Snyk Open Source. Hier wird angezeigt, dass ich Bibliotheken eingebunden habe, direkt oder transitiv, die bekannte Sicherheitslücken enthalten. Eine dieser anfälligen Bibliotheken ist snakeyaml in Version 1.24. Diese Version ist anfällig für einen Denial-of-Service-Angriff. Die Funktionsweise dieses Angriffs und wie Sie ihn verhindern können, habe ich im Blogbeitrag YAML-Parsing-Sicherheitslücken mit snakeyaml in Java verhindern erläutert.

Die Lösung ist ganz einfach: Aktualisiere ich mindestens auf Version 1.26, ist die Sicherheitslücke behoben. Beachten Sie, dass die Version mit dem Fix nicht standardmäßig die neueste Version ist. Es handelt sich um die nächstgelegene Version ohne diese Sicherheitslücke. Nachdem ich die Version in meiner pom-Datei aktualisiert und die Anwendung erneut gescannt habe, ist die Sicherheitslücke verschwunden. Die umsetzbaren Empfehlungen zur Behebung von Sicherheitslücken im Snyk IntelliJ-IDE-Plugin zeigen hervorragend, wie sich das Problem beheben lässt.

IntelliJ IDEA und das Snyk-Panel markieren eine SnakeYAML-Denial-of-Service-Schwachstelle und deren Behebung in Version 1.26.

Code auf Sicherheitslücken untersuchen

Im nächsten Bereich finden Sie Informationen zu Code-Sicherheitslücken, die das Snyk-Plugin entdeckt hat. Die Funktionen von Snyk Code weisen auf Fehler in meinem Code hin, die zu bestimmten Sicherheitslücken führen können.

Das erste Problem ist eine „Path Traversal“-Sicherheitslücke. Das Snyk-Plugin für IntelliJ IDEA zeigt mir, wo das Problem auftritt, und stellt den aktuellen Datenfluss dar. Derzeit schreibe ich eine Datei auf den Datenträger, ohne den Dateinamen zu überprüfen. Enthält der Dateiname etwas wie „../../../textfile.txt“, speichert mein Code die Datei nicht am richtigen Ort. Dieser Dateiname navigiert zurück und verlässt meinen Zielordner. Dadurch landet die Datei irgendwo auf meinem System, wo sie nicht hingehört. Noch wichtiger: Abhängig von den Berechtigungen des Prozesses kann sie vorhandene Dateien überall auf dem System außerhalb des Zielordners überschreiben.

IntelliJ-Code-Sicherheitspanel, das eine Path-Traversal-Schwachstelle in UploadController.java in Zeile 50 hervorhebt und den Datenfluss zu Files.write zeigt.

Um das zu verhindern, kann ich prüfen, ob der kanonische Pfad der neuen Datei mit dem Pfad des vorgesehenen Ziels beginnt, wie unten gezeigt.

Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());
String target = new File(UPLOADED_FOLDER).getCanonicalPath();
if (path.toFile().getCanonicalPath().startsWith(target)) {
   Files.write(path, bytes);
}

Path Traversal funktioniert nun nicht mehr, da die Datei nicht außerhalb meines Zielordners gespeichert wird. Nach einem erneuten Scan meiner Anwendung sehe ich, dass Snyk Code mir zustimmt.

Sehen wir uns ein weiteres Beispiel an. Die Codeanalyse hat ergeben, dass ich in MessageController.java in Zeile 33 eine SQL-Injection-Sicherheitslücke erstellt habe. Im Datenfluss sehe ich, dass die eigentliche SQL-Injection in MessageRepo.java liegt. Es ist äußerst hilfreich, dass Snyk Code mehrere Dateien analysieren kann, um dieses dateiübergreifende Problem zu finden – nicht viele Tools bieten diese Möglichkeit. Durch den MessageController ist die SQL-Injection von außen erreichbar und stellt eine unmittelbare Bedrohung dar, die ich beheben muss.

Snyk-Oberfläche mit hervorgehobener SQL-Injection-Schwachstelle und einem fünfstufigen Datenfluss durch Java-Controller- und Repository-Code.

Da ich das Problem nun kenne, behebe ich den Code in MessageRepo.java. Ich hänge den Parameter nicht mehr direkt an die Abfragezeichenfolge an, sondern verwende eine vorbereitete Anweisung mit Abfrageparametern. Wenn ich die vorbereitete Anweisung wie unten gezeigt implementiere und meine Anwendung erneut scanne, meldet unser Plugin die Sicherheitslücke nicht mehr.

String query = "SELECT * FROM message WHERE text LIKE ?";
PreparedStatement statement = connection.prepareStatement(query);
statement.setString(1, text);
ResultSet result = statement.executeQuery();

Wenn Sie mehr über die Vermeidung von SQL-Injections erfahren möchten, werfen Sie auch einen Blick auf unseren praktischen Spickzettel zur Vermeidung von SQL-Injections.

Codequalität

Neben dem Scannen Ihrer Open-Source-Abhängigkeiten und Ihres eigenen Codes auf Sicherheitslücken hilft Ihnen das Snyk-Plugin für IntelliJ IDEA auch dabei, die Codequalität zu verbessern.

Im folgenden Beispiel weist das Snyk-Plugin darauf hin, dass ich bestimmte Verbindungen nicht schließe. Dadurch können Ressourcenlecks entstehen. Um das zu vermeiden, sollten Ressourcen in einem finally-Block geschlossen werden.

Das Snyk IntelliJ-Plugin zeigt Codequalitätsprobleme mittlerer Schwere in MessageRepo.java an, darunter Warnungen zu fehlenden close-Aufrufen bei Datenbankabfragen und -anweisungen.

Integrieren Sie Sicherheit noch heute in IntelliJ IDEA

Der Snyk Vulnerability Scanner für IntelliJ IDEA ist im Grunde eine Komplettlösung für Java-Entwickler. Die Kombination aus den leistungsstarken Scans von Snyk Open Source und Snyk Code bietet Ihnen ein neues, leistungsstarkes Tool, um Sicherheitsfehler in Ihrer Anwendung zu vermeiden. Auch die Funktionen zur Codequalität sind eine hervorragende Ergänzung für Ihr Team. Beachten Sie, dass Sie das Plugin an Ihre Anforderungen anpassen können, falls Sie beispielsweise die Codequalitätsprüfung nicht ausführen möchten.

Dennoch müssen Java-Entwickler wie Sie und ich Verantwortung für die Anwendungen übernehmen, die wir entwickeln. Dazu gehört auch, Sicherheitsprobleme zu verhindern. Mit dem Snyk-Plugin für IntelliJ IDEA erledigen Sie das ganz bequem in Ihrer bevorzugten IDE. Probieren Sie es doch einfach aus!

Starten Sie mit Capture the Flag

Erfahren Sie in unserem virtuellen On-Demand-Workshop für Einsteiger, wie Sie Capture-the-Flag-Herausforderungen lösen.