
CVE-2026-11374-check — Updated!
Скрипт обнаружения для CVE-2026-11374
CVE-2026-11374 Сценарий обнаружения предусловия для ManageEngine AD360
Скрипт обнаружения предусловия эксплуатации CVE-2026-11374 — предсказуемой уязвимости SSO-билетов, которая приводит к неаутентифицированному захвату учётных записей во всём комплексе ManageEngine AD360. Четыре продукта, попадающие в область действия, используют общий ManageEngineADSFramework:
| Продукт | Затронутая сборка | Исправленная сборка |
|---|---|---|
| ADSelfService Plus | ≤ 6528 | 6529 |
| RecoveryManager Plus | ≤ 6320 | 6321 |
| M365 Manager Plus | ≤ 4816 | 4817 |
| ADAudit Plus | ≤ 8702 | 8703 |
В затронутых сборках SSO-билет — это просто System.currentTimeMillis() (предсказуемая метка времени), снятая при входе жертвы, поэтому его можно воспроизвести через cookie CUSTOM_SSO_TICKET, чтобы перехватить эту сессию. Исправление заменяет билет на UUID.randomUUID() (достаточно случайный идентификатор). Путь воспроизведения доступен только когда продукт интегрирован с AD360: ADSFilter допускает его при условии isProductIntegrated(). Это условие и есть предусловие, которое проверяет данный инструмент.
ПРИМЕЧАНИЕ: этот детектор подтверждает предусловие, а не саму уязвимость. Результат
POTENTIALLY_AFFECTED— это не вердикт «подтверждённо уязвим»; подробнее см. ниже.
Безопасно ли его запускать?
Да. Он предназначен для использования в производственной среде и при оценке безопасности.
- Ничего не эксплуатируется. Зонд отправляет недействительный SSO-билет (
1700000000000— значение в миллисекундах, достаточно старое, чтобы никогда не оказаться в кэше), поэтому ни одна сессия не восстанавливается. Сервер лишь просит очистить отправленные нами cookie. - Состояние цели не меняется. Каждый запрос — обычный
GET, и единственные затронутые cookie — одноразовые, которые отправляет инструмент. - Никакого перебора или разрешения сессий. Инструмент не предпринимает активное разрешение билета по метке времени, которое доказало бы эксплуатируемость; это уже эксплуатация, а не обнаружение, и она вне рамок данного инструмента (см. Ограничения).
Что этот инструмент может и чего не может сказать
Патч CVE-2026-11374 изменил только способ генерации билета (с миллисекунд на UUID); он не менял путь воспроизведения cookie, который проверяет этот зонд. В результате исправленная установка отвечает побайтово идентично уязвимой на любой неаутентифицированный запрос.
Что инструмент может сделать без аутентификации и без разрушающих воздействий:
- Подтвердить, что у доступного продукта из области действия активен путь воспроизведения cookie CustomSSO (то есть он интегрирован с AD360), что является предусловием эксплуатации CVE-2026-11374.
- Определить, какой именно из четырёх продуктов отвечает, по cookie сессии, уникальной для каждого продукта.
- По возможности извлечь номер сборки актива как подсказку. Это доступно для ADSelfService Plus, ADAudit Plus и M365 Manager Plus; недоступно для RecoveryManager Plus.
Чего он не может:
- Отличить уязвимую версию от исправленной. Для этого не существует безопасного, пассивного, неаутентифицированного сигнала. Результат
POTENTIALLY_AFFECTEDозначает, что предусловие выполнено, и вам следует проверить уровень патча, а не то, что хост подтверждённо уязвим. - Подтвердить эксплуатируемость. Доказательство фактической эксплуатируемости хоста требует наблюдения за форматом выданного билета (13-значное число — уязвимо, UUID — исправлено; для обоих нужен аутентифицированный доступ или доступ к хосту), локального чтения
conf/product.confлибо активного разрешения действующего билета (реальная эксплуатация, намеренно не реализована здесь). - Полностью доверять номеру сборки ADSelfService Plus ниже исправленной. Параметр
?build=у ADSSP иногда показывает реальную сборку, а иногда — замороженное значение-заглушку, которое оказывается ниже исправленной сборки, поэтому значение ниже исправленной неоднозначно, и инструмент помечает его как неопределённое. Значение на уровне исправленной сборки или выше по-прежнему является надёжным признаком установки патча, поскольку заглушка всегда слишком низкая, чтобы достичь его.
Требования
- Python 3.7+ и библиотека
requests. Установка:pip install requests.
Использование
# single host (prefer a URL or host:port; ports differ per product)
./cve_2026_11374_check.py https://adssp.example.com:8888
# multiple hosts (scheme optional: https is tried first, then http)
./cve_2026_11374_check.py host-a:8081 host-b:8365
# scan a list, one target per line ('#' comments allowed), compact output
./cve_2026_11374_check.py -f targets.txt --brief
# machine-readable output for pipelines
./cve_2026_11374_check.py -f targets.txt --json > results.json
Порты по умолчанию различаются для каждого продукта (ADSelfService Plus 8888, ADAudit Plus 8081, M365 Manager Plus 8365, RecoveryManager Plus 8090), поэтому передавайте URL или host:port. Для адреса без порта по умолчанию используется 8888.
Параметры
| Флаг | Описание |
|---|---|
targets | Один или несколько адресов host, host:port или https://host:port |
-f, --targets-file FILE | Читать цели из файла (по одной на строку; комментарии #) |
--brief | Одна выровненная строка на цель, удобно при сканировании многих хостов |
--json | Выдавать структурированные результаты в JSON |
--timeout SECS | Таймаут на запрос (по умолчанию: 15) |
--no-build | Пропускать дополнительный запрос номера сборки при положительном результате |
--no-color | Отключить цветной вывод (также учитывает NO_COLOR и не-TTY) |
Примеры
Интегрированная с AD360 консоль (подробный режим, используется по умолчанию). Во второй строке поясняется, что это предусловие, а не вердикт об уязвимости; третья — полученная по возможности подсказка о сборке:
$ ./cve_2026_11374_check.py https://adssp.example.com:8888
[!] https://adssp.example.com:8888: POTENTIALLY_AFFECTED
ADSelfService Plus: AD360-integrated, CustomSSO replay path active - precondition met. Not confirmed vulnerable; verify patch level (fixed build 6529).
build: 6519 (below fixed 6529 - inconclusive: ?build= may be a stale placeholder or a hotfix)
Автономная установка того же продукта, где путь воспроизведения неактивен:
$ ./cve_2026_11374_check.py https://adssp.example.com:8888
[+] https://adssp.example.com:8888: UNAFFECTED
ADSelfService Plus: standalone / not AD360-integrated (no cleanup), so the replay path isn't reachable here. Verify build >= 6529 regardless.
Сканирование списка с одной выровненной строкой на хост (--brief). Код возврата равен 1, если хотя бы один хост — POTENTIALLY_AFFECTED, иначе 0; это удобно в скриптах. Завершающая пометка показывает определённый продукт, а при находке — номер сборки:
$ ./cve_2026_11374_check.py -f targets.txt --brief; echo "exit: $?"
POTENTIALLY_AFFECTED https://host-a:8888 ADSelfService Plus 6519
POTENTIALLY_AFFECTED http://host-b:8081 ADAudit Plus 8530
UNAFFECTED http://host-c:8365 M365 Manager Plus
UNAFFECTED https://host-d:443
INCONCLUSIVE http://host-e:8888 ADSelfService Plus
ERROR host-f:8888 timeout
exit: 1
Машиночитаемый вывод (--json). Каждый результат содержит verdict, а также state и detail, лежащие в его основе, определённый product и — при находке — объект build: build — найденный номер, fixed_build — порог для этого продукта, patch_hint — направленная оценка (likely_patched на уровне исправленной сборки или выше, иначе inconclusive), а note — краткое пояснение: