Содержание статьи
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
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
