Пять записей в каталоге CISA KEV за три года - столько раз Ivanti EPMM потребовал экстренного патчинга как активно эксплуатируемый продукт. Четыре из пяти CVE имеют EPSS-скор выше 0.8, а CVE-2023-35078 держит абсолютный максимум шкалы - 1.0. По данным Unit 42 (Palo Alto Networks), в интернете торчит более 4 400 EPMM-инстансов. IBM X-Force Threat Intelligence Index 2025 фиксирует среднее время устранения CVE в организациях - 29 месяцев. Арифметика простая: пока одни патчат, другие уже внутри.
Ниже - разбор механик, которые APT-группы и автоматизированные боты используют для превращения уязвимого MDM-сервера в точку initial access. Если вы работаете с инфраструктурой, где стоит EPMM, - читайте внимательно, тут есть чем заняться прямо сегодня.
Почему Ivanti EPMM - приоритетная цель для атакующих
Ivanti Endpoint Manager Mobile (ранее MobileIron Core) - enterprise-платформа MDM/UEM для управления мобильным флотом. По данным Hadrian, EPMM контролирует раздачу приложений, даёт доступ к внутренним ресурсам и применяет политики безопасности на iOS и Android устройствах. Место в kill chain - initial access (T1190, Exploit Public-Facing Application): компрометация EPMM-сервера открывает путь от интернета к внутренней инфраструктуре.На практике скомпрометированный EPMM-сервер даёт атакующему:
- Credential access (T1552.001, Credentials In Files) - конфигурации LDAP/AD-интеграций, сертификаты, учётки администраторов
- Контроль устройств - модификация MDM-политик, push-конфигурации на весь мобильный парк
- PII - по описанию CISA, атакующий получает имена, номера телефонов, идентификаторы устройств, GPS-координаты (если включена геолокация)
- Lateral movement - EPMM интегрирован с Ivanti Sentry и корпоративными системами аутентификации, это готовый мост во внутреннюю сеть
По сути - MDM-сервер, проектировавшийся как внутренний инструмент администрирования, торчит на внешнем периметре с прямым доступом из интернета. И в нём находят bash-скрипты, обрабатывающие пользовательский ввод. Что может пойти не так?
Контекст применимости: внешний пентест, internet-exposed on-premises EPMM. Облачный Ivanti Neurons for MDM, Ivanti EPM и Ivanti Sentry не подвержены CVE-2026-1281/1340, по данным Hadrian.
Хронология критических CVE в Ivanti EPMM
CVE-2023-35078: authentication bypass, запустивший серию
| Параметр | Значение |
|---|---|
| Тип | Authentication Bypass |
| EPSS | 1.0000 (percentile 1.0) |
| CISA KEV | 2023-07-25 |
| SSVC Decision | Act - патчить немедленно |
| Связь с ransomware | Подтверждена CISA |
По описанию CISA, уязвимость позволяла неаутентифицированно обращаться к определённым API-путям EPMM. Атакующий получал доступ к PII и мог вносить конфигурационные изменения на сервере. С этой CVE началась серия атак на Ivanti MDM-инфраструктуру - включая подтверждённые ransomware-кампании. CISA классифицирует эксплуатацию как active, automatable - yes, technical impact - total.
EPSS 1.0 - это не абстрактная метрика. Это значит, что каждый сканер с базой CVE уже проверяет ваш периметр на эту дыру.
CVE-2025-4427 + CVE-2025-4428: chained auth bypass и code injection
Две CVE, которые работают в паре - классическая chained exploitation:| CVE | Тип | Корневая причина | EPSS |
|---|---|---|---|
| CVE-2025-4427 | Authentication Bypass в API | Небезопасная реализация Spring Framework | score 0.9957, percentile 0.9994 (Top 1%) |
| CVE-2025-4428 | Code Injection (RCE) через API (требует аутентификации, используется после CVE-2025-4427) | Небезопасная реализация Hibernate Validator (связана с CVE-2025-35036) | score 0.8692, percentile 0.9972 (Top 1%) |
Обе добавлены в CISA KEV 2025-05-19 со статусом SSVC Act: exploitation - active, automatable - yes, technical impact - total.
Цепочка атаки: CVE-2025-4427 обходит аутентификацию в API-компоненте EPMM, открывая доступ к защищённым ресурсам. CVE-2025-4428 позволяет аутентифицированному атакующему через специально сформированные API-запросы выполнить произвольный код. В связке - полный захват системы без учётных данных.
Ivanti закрыла обе уязвимости в версиях EPMM 11.12.0.5, 12.3.0.2, 12.4.0.2 и 12.5.0.1. На Exploit-DB опубликован публичный эксплоит (EDB-52421, автор - İbrahimsql, дата публикации 2025-08-26). В репозитории nuclei-templates ProjectDiscovery доступен шаблон
CVE-2025-4427.yaml для автоматического обнаружения уязвимых инстансов.CVE-2026-1281 + CVE-2026-1340: pre-auth RCE через bash arithmetic expansion
| CVE | CVSS | Компонент | CISA KEV | Deadline | EPSS |
|---|---|---|---|---|---|
| CVE-2026-1281 | CISA SSVC: Act (CVSS не опубликован в NVD) | In-House App Distribution | 2026-01-29 | 2026-02-01 (3 дня) | 0.8123 |
| CVE-2026-1340 | CISA SSVC: Act (CVSS не опубликован в NVD) | Android File Transfer | 2026-04-08 | 2026-04-11 (3 дня) | 0.8200 |
Обе - code injection, позволяющий неаутентифицированному атакующему выполнить произвольный код. По данным Unit 42 и Hadrian, обе оцениваются как Critical, но CVSS-скор не опубликован в NVD. CISA классифицирует обе как SSVC Act (exploitation - active, automatable - yes, technical impact - total).
Дедлайн на устранение CVE-2026-1281 - 3 дня с момента публикации. Три дня. Один из самых коротких сроков в истории CISA KEV - и это говорит о серьёзности ситуации красноречивее любого CVSS-скора.
Затронутые версии (по данным Hadrian): 12.5.0.x, 12.5.1.0, 12.6.0.x, 12.6.1.0, 12.7.0.x.
Unit 42 фиксирует: до момента публикации 29 января 2026 уже шла активная эксплуатация. Атакующие ускоряют операции, переходя от reconnaissance к развёртыванию dormant backdoors для сохранения доступа после патчинга. То есть даже если вы поставили патч в тот же день - проверьте, не оставили ли вам "подарок".
Bash arithmetic expansion: механика RCE в CVE-2026-1281 и CVE-2026-1340
Предусловия применимости: внешний пентест, internet-exposed on-premises EPMM версий 12.5.0.x - 12.7.0.x. Облачный Neurons for MDM не подвержен.
Этот раздел основан на исследованиях Unit 42 (Tier-1) и Hadrian Security.
Уязвимая архитектура и цепочка variable indirection
Конфигурация Apache в EPMM определяет два экземпляраRewriteMap, указывающих на bash-скрипты: /mi/bin/map-appstore-url (CVE-2026-1281) и /mi/bin/map-aft-store-url (CVE-2026-1340). Когда HTTP-запрос поступает на эндпоинты /mifs/c/appstore/fob/ или /mifs/c/aftstore/fob/, параметры передаются напрямую в соответствующий bash-скрипт.Вдумайтесь: пользовательский ввод из URL попадает прямиком в bash. В 2026 году.
Скрипт разбирает key-value пары из URL, присваивая их переменным:
gStartTime, gEndTime, gHashPrefixString. Переменная gPath определена ранее как пустая строка. Затем gStartTime используется в арифметическом сравнении - и здесь срабатывает ловушка bash arithmetic expansion.Эксплуатация через variable indirection (по данным Hadrian):
- Атакующий устанавливает
st=theValue(два пробела для прохождения 10-символьной валидации длины). Скрипт присваивает этоgStartTime. - Параметр
h=gPath[command]присваивается переменнойtheValueв последней итерации цикла. По реверс-анализу Hadrian, bash-скрипт разбирает key-value пары через цикл, где последний параметр (h) перезаписывает переменную, имя которой совпадает с текущим значениемgHashPrefixString- а оно равноtheValue(установлено черезst). Точный механизм присвоения реконструирован Hadrian и может отличаться в деталях от исходного кода. - При арифметическом сравнении
(( gStartTime > gEndTime ))bash рекурсивно вычисляет имена переменных как арифметические выражения (документированное поведение bash arithmetic evaluation):gStartTime-> строкаtheValue-> переменнаяtheValue-> массивgPath[...]-> command substitution внутри индекса.
(( )) составляет суть класса уязвимостей bash arithmetic expansion (CWE-94). Красивая цепочка, если смотреть со стороны. Не очень красивая, если это ваш сервер.Минимальный PoC для CVE-2026-1281 (по данным Hadrian):
Код:
GET /mifs/c/appstore/fob/3/5/sha256:kid=1,st=theValue%20%20,et=1337133713,h=gPath%5B%60id%20>%20/mi/poc%60%5D HTTP/1.1
Host: target.example.com
h: gPath[id > /mi/poc] - записывает вывод id в файл /mi/poc на целевом сервере. CVE-2026-1340 эксплуатируется аналогично, но через эндпоинт /mifs/c/aftstore/fob/.По данным Hadrian, класс уязвимостей bash arithmetic expansion известен минимум с 2014 года, но систематически пропускается на security review. Опасные контексты:
$((expression)), ((expression)), ${var[index]}, [[ $var -eq $other ]]. Двенадцать лет - и та же ошибка в продакшн-коде enterprise-продукта.Ограничения техники
Когда техника не работает:- На облачном Ivanti Neurons for MDM - другая архитектура
- После установки патча 12.8.0.0, где bash-скрипты архитектурно заменены Java-классами:
RewriteMap mapAppStoreURL "prg:/bin/java -cp /mi/bin AppStoreUrlMapper" - WAF с инспекцией URL-encoded backticks (
%60) и квадратных скобок (%5B,%5D) может заблокировать базовый PoC (но обход через альтернативные кодировки вероятен - не стоит полагаться только на WAF) - Если
/mifs/c/(app|aft)store/fob/закрыты на уровне сетевого фильтра - до скрипта запрос не дойдёт - Для CVE-2025-4427/4428 механизм другой (Spring Framework + Hibernate Validator) - эти ограничения не применяются
От fingerprinting до persistence: эксплуатация уязвимостей Ivanti EPMM по шагам
📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме
, который разворачивает web shell, криптомайнер или persistent backdoor. В отдельных кейсах наблюдалась загрузка Nezha monitoring agent - open-source утилиты мониторинга серверов, которую приспособили как botnet-агент, с fallback на Gitee для жертв из Китая.
Persistence через web shell (T1505.003). Unit 42 зафиксировали установку JSP web shell с именами
401.jsp, 403.jsp, 1.jsp в директорию /mi/tomcat/webapps/mifs/. Hadrian отмечает среди используемых Behinder - Java web shell с шифрованным каналом связи. Если Tomcat работает от root (а он часто работает от root) - атакующий получает полный контроль. Unit 42 подчёркивает: dormant backdoors сохраняют доступ даже после установки патча.Credential access и lateral movement. Скомпрометированный EPMM открывает доступ к учётным данным администраторов, конфигурациям LDAP/AD и соединениям с Ivanti Sentry. При incident response аудитируйте все Sentry-соединения и конфигурации аутентификации - это вектор lateral movement.
Defense evasion (T1562.001). Hadrian предупреждает: атакующие очищают локальные логи Apache и системные журналы. Без централизованного SIEM forensic-данные утеряны. Я видел кейсы, когда после инцидента на руках оставалось буквально ничего - потому что всё хранилось локально на скомпрометированном хосте.
Detection и threat hunting для уязвимостей Ivanti EPMM
Regex для Apache HTTPD access-логов, разработанный Ivanti совместно с NCSC-NL:
Код:
^(?!127\.0\.0\.1:\d+ .*$).*?\/mifs\/c\/(aft|app)store\/fob\/.*?404
- Запросы к
/mifs/c/appstore/fob/или/mifs/c/aftstore/fob/с ответом HTTP 404 - Bash-метасимволы в URL-параметрах:
%60(backtick),%24%28($(),%7C(pipe) - Серии запросов с одного IP к этим эндпоинтам с малым интервалом - признак автоматизированного сканирования
- Сравнение хешей JSP-файлов в
/mi/tomcat/webapps/mifs/с эталоном чистой установки - любые расхождения подозрительны - POST-запросы к страницам ошибок (401.jsp, 403.jsp) с нестандартными параметрами - это не пользователи ошибаются, это web shell
- Неизвестные WAR/JAR файлы в директориях Tomcat
- Исходящие TCP-соединения от EPMM-серверов к IP за пределами белого списка (особенно нестандартные порты)
- Долгоживущие сессии к внешним адресам
- Паттерны reverse shell в трафике:
bash -i,nc -e,python -c 'import socket'
Чеклист харденинга Ivanti EPMM
- Обновить EPMM немедленно. Установить RPM-патч (12.x.0.x или 12.x.1.x в зависимости от версии). Патч не требует даунтайма. Целевая версия - 12.8.0.0, где bash-скрипты заменены Java-классами
- Если инстанс был exposed до патча - считать скомпрометированным. Запускать incident response, пересобирать из заведомо чистого образа. Без вариантов
- Закрыть эндпоинты. Убедиться, что
/mifs/c/(app|aft)store/fob/не доступны из интернета. Закрыть через firewall или reverse proxy - Сетевая сегментация. EPMM-сервер - в изолированный VLAN. Ограничить исходящие соединения whitelist'ом
- Централизованное логирование. Apache access/error логи и системные журналы EPMM - в SIEM. Настроить алерты на regex из раздела detection
- Аудит файловой системы. Сравнить хеши JSP-файлов в
/mi/tomcat/webapps/mifs/с эталоном - Аудит Ivanti Sentry. Проверить все EPMM–Sentry соединения на предмет несанкционированных конфигураций
- Аудит учётных записей. Проверить наличие неизвестных административных аккаунтов и изменений в LDAP/AD-конфигурации аутентификации
- Мониторинг исходящих соединений. Алерты на TCP-соединения от EPMM к IP за пределами белого списка
- Переприменять RPM после обновлений. Временные RPM-патчи сбрасываются при обновлении EPMM - это задокументированное ограничение. Забудете - и снова exposed
RewriteMap - артефакт эпохи, когда EPMM сидел за корпоративным файрволом и принимал запросы от десятка доверенных устройств. Замена bash на Java-классы в 12.8.0.0 - правильный ход, но он закрывает один конкретный вектор.Сколько ещё legacy-скриптов живёт в
/mi/bin/, которые никто не проверял на arithmetic expansion, glob expansion и прочие bash-специфичные injection?Для тех, кто работает с инфраструктурой, где стоит Ivanti, вот что я бы сделал прямо сейчас: grep по всем bash-скриптам в
/mi/bin/ на паттерны ${, $(( , [[ ... -gt с пользовательским вводом в переменных. Если находите - у вас потенциально ещё один 0-day до того, как его найдёт кто-то снаружи. Если хочешь отработать command injection через аналогичные bash-примитивы на стенде - web-категория на HackerLab.pro (https://hackerlab.pro) содержит задачи с похожей механикой.
Последнее редактирование модератором: