Secure Coding: CWE 1123 – Sich selbst modifizierenden Code vermeiden
Seite 2: Java-bezogene CVEs basierend auf CWE-1123
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.