Статья Уязвимости Ivanti Endpoint Manager: цепочки эксплуатации EPMM от auth bypass до pre-auth RCE

Серверный модуль на тёмном антистатическом коврике. Экран панели отображает код уязвимости, красные и зелёные индикаторы отбрасывают точечные отражения.


Пять записей в каталоге 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 и корпоративными системами аутентификации, это готовый мост во внутреннюю сеть
Unit 42 наблюдали атаки на государственные и муниципальные органы, здравоохранение, производство, юридические сервисы и high-tech компании в США, Германии, Австралии и Канаде.

По сути - MDM-сервер, проектировавшийся как внутренний инструмент администрирования, торчит на внешнем периметре с прямым доступом из интернета. И в нём находят bash-скрипты, обрабатывающие пользовательский ввод. Что может пойти не так?

Контекст применимости: внешний пентест, internet-exposed on-premises EPMM. Облачный Ivanti Neurons for MDM, Ivanti EPM и Ivanti Sentry не подвержены CVE-2026-1281/1340, по данным Hadrian.

Хронология критических CVE в Ivanti EPMM​

1781942302432.webp

CVE-2023-35078: authentication bypass, запустивший серию​

ПараметрЗначение
ТипAuthentication Bypass
EPSS1.0000 (percentile 1.0)
CISA KEV2023-07-25
SSVC DecisionAct - патчить немедленно
Связь с 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-4427Authentication Bypass в APIНебезопасная реализация Spring Frameworkscore 0.9957, percentile 0.9994 (Top 1%)
CVE-2025-4428Code 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​

CVECVSSКомпонентCISA KEVDeadlineEPSS
CVE-2026-1281CISA SSVC: Act (CVSS не опубликован в NVD)In-House App Distribution2026-01-292026-02-01 (3 дня)0.8123
CVE-2026-1340CISA SSVC: Act (CVSS не опубликован в NVD)Android File Transfer2026-04-082026-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​

Untitled.webp

Предусловия применимости: внешний пентест, 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):
  1. Атакующий устанавливает st=theValue (два пробела для прохождения 10-символьной валидации длины). Скрипт присваивает это gStartTime.
  2. Параметр h=gPath[command] присваивается переменной theValue в последней итерации цикла. По реверс-анализу Hadrian, bash-скрипт разбирает key-value пары через цикл, где последний параметр (h) перезаписывает переменную, имя которой совпадает с текущим значением gHashPrefixString - а оно равно theValue (установлено через st). Точный механизм присвоения реконструирован Hadrian и может отличаться в деталях от исходного кода.
  3. При арифметическом сравнении (( 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
URL-decoded значение 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 к этим эндпоинтам с малым интервалом - признак автоматизированного сканирования
Web shell и файловая система:
  • Сравнение хешей 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 предоставляет клиентам Exploitation Detection Script (разработан совместно с NCSC-NL). Если EPMM-логи подаются в Cortex XDR/XSIAM - Unit 42 публикует XQL-запросы для threat hunting.

Чеклист харденинга Ivanti EPMM​

  1. Обновить EPMM немедленно. Установить RPM-патч (12.x.0.x или 12.x.1.x в зависимости от версии). Патч не требует даунтайма. Целевая версия - 12.8.0.0, где bash-скрипты заменены Java-классами
  2. Если инстанс был exposed до патча - считать скомпрометированным. Запускать incident response, пересобирать из заведомо чистого образа. Без вариантов
  3. Закрыть эндпоинты. Убедиться, что /mifs/c/(app|aft)store/fob/ не доступны из интернета. Закрыть через firewall или reverse proxy
  4. Сетевая сегментация. EPMM-сервер - в изолированный VLAN. Ограничить исходящие соединения whitelist'ом
  5. Централизованное логирование. Apache access/error логи и системные журналы EPMM - в SIEM. Настроить алерты на regex из раздела detection
  6. Аудит файловой системы. Сравнить хеши JSP-файлов в /mi/tomcat/webapps/mifs/ с эталоном
  7. Аудит Ivanti Sentry. Проверить все EPMM–Sentry соединения на предмет несанкционированных конфигураций
  8. Аудит учётных записей. Проверить наличие неизвестных административных аккаунтов и изменений в LDAP/AD-конфигурации аутентификации
  9. Мониторинг исходящих соединений. Алерты на TCP-соединения от EPMM к IP за пределами белого списка
  10. Переприменять RPM после обновлений. Временные RPM-патчи сбрасываются при обновлении EPMM - это задокументированное ограничение. Забудете - и снова exposed
Пять critical CVE за три года в одном продукте - не серия неудачных совпадений. Это архитектурная проблема: MDM-платформы проектировались как внутренние инструменты администрирования, а развёртываются на внешнем периметре с прямым доступом из интернета. Bash-скрипты, обрабатывающие пользовательский ввод через 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) содержит задачи с похожей механикой.
 
Последнее редактирование модератором:
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🧭 Навигатор · ИБ 2026
Не знаешь, какой трек твой?
5 направлений ИБ, реальные зарплаты и точка входа для каждого — в одном треде.
JuniorSenior+
100K → 600K+ ₽ /мес
Открыть навигатор →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab