
Эксплойт для предварительной аутентификации RCE в Craft CMS (CVE-2025-32432), объединяющий отравление сессии с небезопасной десериализацией для выполнения произвольных команд на уязвимых серверах.
Удалённое выполнение кода в Craft CMS без предварительной аутентификации
Обнаружено и разработано Mohammed Idrees Banyamer
CVE-2025-32432 — критическая уязвимость удалённого выполнения кода (RCE) без аутентификации, затрагивающая несколько версий Craft CMS. Объединяя несанитизированное хранение данных сессии с небезопасной десериализацией гаджета, неаутентифицированный злоумышленник может выполнять произвольные команды на удалённом сервере.
| Ветка | Уязвимы до |
|---|---|
| Craft CMS 3.x | ≤ 3.9.14 |
| Craft CMS 4.x | ≤ 4.14.14 |
| Craft CMS 5.x | ≤ 5.6.16 |
⚠️ Все старые версии, проявляющие описанное поведение маршрутизации, также, вероятно, уязвимы.
Уязвимость возникает из-за объединения двух различных слабостей в конечной точке assets/generate-transform:
Старое поведение маршрутизации записывает необработанные параметры запроса непосредственно в файл сессии PHP (/tmp/sess_<PHPSESSID>) без какой-либо санитизации или фильтрации.
Цепочка десериализации гаджетов Yii (FieldLayoutBehavior → PhpManager) позволяет злоумышленнику принудительно включить произвольный файл — в данном случае отравленный файл сессии.
Совокупное воздействие: Полная компрометация сервера, кража данных, горизонтальное перемещение и многое другое.
requestsurllib3# Установка через файл зависимостей
pip install -r requirements.txt
# Или прямая установка
pip install requests urllib3
python exploit.py -u <target_url> -c "<команда>" [опции]
| Флаг | Описание | По умолчанию |
|---|---|---|
-u, --url | Обязательный. Базовый URL цели (например, https://example.com) | — |
-c, --cmd | Обязательный. Системная команда для выполнения (например, id, whoami) | — |
-a, --asset | Известный корректный ID ресурса (значительно ускоряет эксплуатацию) | Нет |
--scan-max | Максимальный ID ресурса для перебора, если ID не указан | 300 |
-t, --timeout | Тайм-аут запроса в секундах | 15 |
-v, --verbose | Включить подробный/отладочный вывод | Выкл |
# Автоэксплуатация — автоматический перебор ID ресурса
python exploit.py -u https://craft.example.com -c "id"
# С известным ID ресурса — более надёжно и быстрее
python exploit.py -u https://craft.example.com -c "cat /etc/passwd" -a 42
# Пользовательский тайм-аут + подробный вывод
python exploit.py -u https://craft.example.com -c "uname -a" -t 10 -v
Шаг 1 ──► Установка сессии
Получение главной страницы → получение cookie PHPSESSID
Шаг 2 ──► Определение ID ресурса
Предоставлен через флаг -a ИЛИ перебором (обнаружение по отсутствию 404)
Шаг 3 ──► Отравление сессии
Вредоносный GET-запрос → внедрение сырого PHP в /tmp/sess_<PHPSESSID>
Шаг 4 ──► Запуск RCE
Сформированная нагрузка десериализации → PhpManager включает файл сессии
→ PHP выполняется → системная команда запускается → вывод возвращается
💡 Вывод команды печатается (первые 2 000 символов). Для полного взаимодействия рекомендуется обратный шелл.
requirements.txt
requests>=2.31.0
urllib3>=2.0
Этот инструмент предназначен исключительно для образовательных целей и санкционированных оценок безопасности.
Не используйте его против любой системы без явного письменного разрешения владельца системы.
Автор не несёт никакой ответственности за любое неправомерное использование или ущерб, причинённый этим инструментом. Используя данное программное обеспечение, вы соглашаетесь, что несёте единоличную ответственность за свои действия и будете соблюдать все применимые местные, национальные и международные законы.
| Роль | Детали |
|---|---|
| 🔍 Обнаружение CVE и первоначальный эксплойт | Mohammed Idrees Banyamer |
| 🐙 GitHub | @TheMursalin |
| 🤝 Улучшение кода | Приветствуются вклады сообщества |
⭐ Если вы нашли это полезным, подпишитесь на @TheMursalin для получения новых эксплойтов, разборов и инструментов безопасности.
Этот проект выпущен под лицензией MIT — подробности см. в файле LICENSE.