Содержание статьи
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Уязвимости CVE-2026-41940 был присвоен рейтинг опасности 9,8. Хакеру достаточно найти страницу логина в WHM, чтобы захватить сервер.
WHM (Web Host Manager) — это панель администрирования сервера, которая работает над cPanel и используется для управления аккаунтами cPanel и самим сервером. При авторизации от имени root пользователь получает рут‑права и на сервере тоже. По факту рут в WHM — это рут на сервере.

CVE-2026-41940 сводится к двум независимым проблемам в коде. Первая проблема — недостаточная санитизация ввода. Основной демон панельки cpsrvd выполняет частичную очистку ввода в пароле пользователя: удаляет нулевые символы \, но игнорирует \. Это прямой путь к CRLF-инъекции.
CRLF-инъекция — уязвимость веб‑приложений, при которой злоумышленник внедряет символы перевода строки (\, 0x0A, LF) и возврата каретки (\, 0x0D, CR) в HTTP-запрос или заголовок. Это приводит к нарушению поведения: приложение думает, что закончилась одна строка и началась другая. В cPanel эта уязвимость позволяет обойти авторизацию, манипулируя файлом сессии.
Сессии cPanel хранятся в двух местах:
/— «сырые» сессии в форматеvar/ cpanel/ sessions/ raw/ key=value, по одной записи в строке;/— кешированные сессии в формате JSON для быстрой загрузки.var/ cpanel/ sessions/ cache/
В сыром формате сессии разделителем служит символ новой строки \. В исходниках есть функция, которая очищает ввод от переносов (filter_sessiondata(), но по каким‑то причинам разработчики не применили ее к паролю в механизме авторизации через заголовок Authorization: . Злоумышленник может напрямую записывать в файл сессии любые значения. Например:
root:x
successful_internal_auth_with_timestamp=9999999999
user=root
tfa_verified=1
hasroot=1
Это файл сессии, достаточный для обхода авторизации и получения root на сервере.
Строка root: нужна для корректности файла: этот логин и пароль никогда не будут проверяться. Для байпаса важна переменная successful_internal_auth_with_timestamp, которая сообщает системе, что аутентификация уже пройдена в прошлом (например, через SSO или внутренний сервис).
Переменная user определяет имя пользователя. Для обхода двухфакторной аутентификации нужна tfa_verified — переменная, которая указывает WHM, что пользователь работает с правами root.
Проблема не была бы критической при правильной работе механизма кодирования перед сохранением сессии. По задумке разработчиков пароль должен храниться в таком виде:
pass=4105507475805483666373230303331643466366435323130356033393439383
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»
