Secure Coding: CWE 1123 – Sich selbst modifizierenden Code vermeiden

Seite 2: Java-bezogene CVEs basierend auf CWE-1123

Inhaltsverzeichnis
close notice

This article is also available in English. It was translated with technical assistance and editorially reviewed before publication.

Während es möglicherweise keine spezifischen CVEs (Common Vulnerabilities and Exposures) gibt, die ausdrücklich als durch CWE-1123 (Excessive Use of Self-Modifying Code) verursacht gekennzeichnet sind, können mehrere Java-bezogene Schwachstellen im Zusammenhang mit sich selbst modifizierendem Code entstehen. Dabei handelt es sich typischerweise um Probleme beim dynamischen Laden von Klassen, der Reflection und der Bytecode-Manipulation. Hier folgen einige Beispiele für Java-basierte CVEs, die sich auf diese Praktiken beziehen:

CVE-2014-0114

Beschreibung: Sicherheitslücke bei der Remotecodeausführung in Apache Commons Collections

Ausgabe: Diese Sicherheitslücke beinhaltet das Verwenden von Reflection zur Manipulation serialisierter Daten, was die Möglichkeit eröffnet, beliebigen Code auszuführen. Die Schwachstelle wurde in der Apache Commons Collections-Bibliothek gefunden, wo bestimmte Klassen verwendet werden konnten, um bei Deserialisierung beliebigen Code auszuführen. Dabei handelt es sich um eine Form von selbständigem Verhalten, da die serialisierten Daten den Ausführungsfluss des Programms verändern könnten.

Auswirkungen: Angreifer können diese Sicherheitslücke ausnutzen, um beliebige Befehle auf dem Server auszuführen, auf dem die anfällige Anwendung läuft.

CVE-2013-2423

Beschreibung: Sicherheitslücke bei der Remotecodeausführung in Oracle Java SE

Ausgabe: Diese Sicherheitslücke entsteht durch unsachgemäße Handhabung bestimmter Methoden in Java, was die Möglichkeit eröffnet, beliebigen Code auszuführen. Sie nutzt Reflections- und Class-Loader-Mechanismen, um bösartigen Code einzuschleusen und auszuführen.

Auswirkungen: Durch das Ausnutzen dieser Schwachstelle können Angreifer remote beliebigen Code auf dem betroffenen System ausführen, was schlimmstenfalls zu dessen vollständiger Kompromittierung führt.

CVE-2015-1832

Beschreibung: Sicherheitslücke bei Android-Remotecodeausführung in Apache Cordova

Ausgabe: Diese Sicherheitslücke beinhaltet das dynamische Laden von Klassen und eine unsachgemäße Validierung von Eingaben. Dadurch konnten Angreifer durch Ausnutzen der WebView-Komponente Schadcode in eine mit Apache Cordova erstellte Android-Anwendung einschleusen.

Auswirkungen: Eine erfolgreiche Ausnutzung könnte zur Ausführung beliebigen Codes im Kontext der betroffenen Anwendung führen, und potenziell Datenlecks oder weitere Risiken nach sich ziehen.

CVE-2012-0507

Beschreibung: Sicherheitslücke bei der Remotecodeausführung in Oracle Java SE

Ausgabe: Diese Sicherheitslücke beinhaltet die Verwendung von Reflection und dynamisches Laden von Klassen, um einen Fehler in der Java Runtime Environment (JRE) auszunutzen. Die Sicherheitslücke ermöglicht es einem nicht vertrauenswürdigen Java-Applet, aus der Java-Sandbox auszubrechen und beliebigen Code auszuführen.

Auswirkungen: Diese Sicherheitslücke ermöglicht es einem Angreifer, mit den Rechten des Benutzers, der das Java-Applet ausführt, beliebigen Code auf dem Hostsystem auszuführen.

CVE-2019-12384

Beschreibung: Deserialisierungsschwachstelle FasterXML jackson-databind

Ausgabe: Diese Sicherheitslücke betrifft die unsichere Handhabung der Deserialisierung mithilfe der Jackson-Databind-Bibliothek. Durch Ausnutzen der Verarbeitung polymorpher Typen könnten Angreifer bösartigen Code einschleusen, der während der Deserialisierung ausgeführt wird.

Auswirkungen: Das Ausführen beliebigen Codes könnte zu potenziellen Datenschutzverletzungen sowie der Kompromittierung des Systems führen.

Minderungsstrategien zu den CVEs

Vermeiden Sie Praktiken mit sich selbst änderndem Code: Verwenden Sie kein dynamisches Laden von Klassen, Reflection oder Bytecode-Manipulation, es sei denn, dies ist unbedingt erforderlich. Stellen Sie bei Bedarf sicher, dass ordnungsgemäße Validierungs- und Sicherheitsmaßnahmen vorhanden sind.

Verwenden Sie sichere Deserialisierung: Vermeiden Sie die Deserialisierung nicht vertrauenswürdiger Daten. Wenn eine Deserialisierung erforderlich ist, sollten Bibliotheken und Techniken verwendet werden, die eine strenge Typprüfung und -validierung erzwingen.

Sicherheitspatches anwenden: Aktualisieren und patchen Sie Bibliotheken und Frameworks regelmäßig, um sich vor bekannten Schwachstellen zu schützen.

Codeüberprüfungen und statische Analyse: Führen Sie gründliche Prüfungen des Codes durch und verwenden Sie statische Analysetools, um den Einsatz riskanter Codepraktiken zu erkennen und einzudämmen.

Best Practices für die Sicherheit: Um die Angriffsfläche zu verringern, befolgen Sie bewährte Sicherheitspraktiken, wie etwa Least Privilege (geringstmögliche Rechte), Eingabevalidierung und Richtlinien für sichere Programmierung.