CVE-2024-4879
ServiceNow Utah, Vancouver, and Washington DC Now Platform
2024-07-29
ServiceNow Utah, Vancouver, and Washington DC Now Platform releases contain a jelly template injection vulnerability in UI macros. An unauthenticated user could exploit this vulnerability to execute code remotely.
Технический анализ и план устранения
Суть уязвимости
CVE-2024-4879 представляет собой критическую уязвимость типа Jelly Template Injection в UI-макросах платформы ServiceNow. Проблема возникает из-за недостаточной фильтрации входных данных, передаваемых в движок рендеринга Jelly.
Поскольку Jelly используется для динамической генерации веб-интерфейсов на стороне сервера, злоумышленник может внедрить вредоносный код в параметры запроса. Это позволяет неавторизованному удаленному пользователю (Unauthenticated) добиться выполнения произвольного кода (RCE) в контексте серверного приложения, что ведет к полной компрометации экземпляра ServiceNow и потенциальному доступу к конфиденциальным данным.
Как исправить
Основным и единственным надежным способом устранения уязвимости является обновление платформы до исправленных версий (Hot Fix или Patch), выпущенных вендором.
- Определите текущую версию вашей платформы через "Stats" в интерфейсе ServiceNow.
- Перейдите в портал поддержки (Now Support) и скачайте соответствующее обновление.
- Установите исправление для вашей ветки:
- Washington DC: Обновитесь до версии Patch 1 Hotfix 2b, Patch 2 Hotfix 2 или выше.
- Vancouver: Обновитесь до версии Patch 6 Hotfix 2, Patch 7 Hotfix 3b, Patch 8 Hotfix 4, Patch 9 или выше.
- Utah: Обновитесь до версии Patch 10 Hotfix 3 или выше.
Для проверки статуса обновления в консоли можно использовать скрипт (через Scripts - Background) для вывода версии:
gs.info(gs.getProperty('glide.build.name') + " : " + gs.getProperty('glide.build.version'));
Временные меры
Если немедленное обновление невозможно, необходимо применить компенсирующие меры контроля для снижения риска эксплуатации:
-
Настройка IP Access Controls: Ограничьте доступ к экземпляру ServiceNow только доверенными IP-адресами (VPN компании), чтобы отсечь внешних неавторизованных атакующих.
-
Настройка Web Application Firewall (WAF): Настройте правила фильтрации для блокировки подозрительных последовательностей в URL-параметрах, характерных для Jelly Injection (например, поиск тегов
<j:,jelly:,${, или вызовов Java-классов). -
Мониторинг логов: Настройте алертинг на необычные HTTP-запросы к UI-макросам. Проверьте логи транзакций на наличие ошибок парсинга Jelly:
var gr = new GlideRecord('syslog');
gr.addEncodedQuery('messageLIKEjelly^ORmessageLIKEtemplate^level=2');
gr.query();
while(gr.next()){
gs.print(gr.time + " : " + gr.message);
}
- Ограничение доступа к UI Macros: Проведите аудит публично доступных UI-макросов и страниц, требующих аутентификации, и временно отключите неиспользуемые публичные компоненты через системные свойства.