CVE-2018-14667

Red Hat JBoss RichFaces Framework

ВЫСОКАЯ ВЕРОЯТНОСТЬ

Дата обнаружения

2023-09-28

Официальное описание

Red Hat JBoss RichFaces Framework contains an expression language injection vulnerability via the UserResource resource. A remote, unauthenticated attacker could exploit this vulnerability to execute malicious code using a chain of Java serialized objects via org.ajax4jsf.resource.UserResource$UriData.

🛡️
Технический анализ и план устранения

Суть уязвимости

CVE-2018-14667 представляет собой критическую уязвимость типа Expression Language (EL) Injection в фреймворке RichFaces (версии 3.x). Проблема локализована в компоненте UserResource.

Уязвимость возникает из-за небезопасной десериализации данных в параметре DATA, передаваемом через URL к ресурсам org.ajax4jsf.resource.UserResource. Удаленный неавторизованный злоумышленник может отправить специально сформированный запрос, содержащий цепочку сериализованных Java-объектов. При обработке этого запроса сервер выполняет произвольный код в контексте приложения (Remote Code Execution - RCE), используя возможности языка выражений (EL) для обхода ограничений.

Как исправить

Основная сложность заключается в том, что проект RichFaces 3 официально признан устаревшим (End of Life) и не получает официальных обновлений от Red Hat. Для устранения уязвимости необходимо выполнить одно из следующих действий:

  1. Обновление фреймворка Наиболее безопасный путь — миграция на поддерживаемые версии RichFaces 4.x (где данный механизм пересмотрен) или на современные JSF-фреймворки (PrimeFaces, OmniFaces).

  2. Применение патча на уровне исходного кода Если миграция невозможна, необходимо внести изменения в класс org.ajax4jsf.resource.UserResource и пересобрать библиотеку. Исправление должно заключаться в добавлении проверки типов при десериализации данных или полном отключении возможности передачи исполняемых выражений через UriData.

  3. Использование исправленной библиотеки от сообщества Если вы используете JBoss Enterprise Application Platform (EAP), проверьте наличие кумулятивных патчей безопасности в Red Hat Customer Portal, соответствующих вашей версии подписки.

Временные меры

Если немедленное обновление кода невозможно, примените следующие компенсирующие меры контроля:

  1. Блокировка на уровне Web Application Firewall (WAF) Настройте правила фильтрации для блокировки запросов, содержащих подозрительные сериализованные объекты в параметре DATA для путей, обрабатываемых org.ajax4jsf.resource.UserResource. Пример паттерна для поиска:
/org.ajax4jsf.resource.UserResource/DATA/

  1. Ограничение доступа в web.xml Запретите доступ к ресурсу UserResource, если он не используется в бизнес-логике вашего приложения, добавив security-constraint в web.xml:
<security-constraint>
    <web-resource-collection>
        <web-resource-name>Block UserResource</web-resource-name>
        <url-pattern>*/org.ajax4jsf.resource.UserResource/*</url-pattern>
    </web-resource-collection>
    <auth-constraint/>
</security-constraint>

  1. Настройка Java Security Manager Настройте политики Java Security Manager, чтобы ограничить права процесса сервера приложений на выполнение системных команд (Runtime.exec) и открытие сетевых соединений, что затруднит эксплуатацию RCE.

  2. Обновление среды выполнения Убедитесь, что используется актуальная версия Java JRE/JDK с включенными механизмами фильтрации десериализации (JEP 290), и настройте глобальный фильтр через системное свойство:

-Djdk.serialFilter=!org.ajax4jsf.resource.UserResource$UriData;*