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. Для устранения уязвимости необходимо выполнить одно из следующих действий:
-
Обновление фреймворка Наиболее безопасный путь — миграция на поддерживаемые версии RichFaces 4.x (где данный механизм пересмотрен) или на современные JSF-фреймворки (PrimeFaces, OmniFaces).
-
Применение патча на уровне исходного кода Если миграция невозможна, необходимо внести изменения в класс
org.ajax4jsf.resource.UserResourceи пересобрать библиотеку. Исправление должно заключаться в добавлении проверки типов при десериализации данных или полном отключении возможности передачи исполняемых выражений черезUriData. -
Использование исправленной библиотеки от сообщества Если вы используете JBoss Enterprise Application Platform (EAP), проверьте наличие кумулятивных патчей безопасности в Red Hat Customer Portal, соответствующих вашей версии подписки.
Временные меры
Если немедленное обновление кода невозможно, примените следующие компенсирующие меры контроля:
- Блокировка на уровне Web Application Firewall (WAF)
Настройте правила фильтрации для блокировки запросов, содержащих подозрительные сериализованные объекты в параметре
DATAдля путей, обрабатываемыхorg.ajax4jsf.resource.UserResource. Пример паттерна для поиска:
/org.ajax4jsf.resource.UserResource/DATA/
- Ограничение доступа в 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>
-
Настройка Java Security Manager Настройте политики Java Security Manager, чтобы ограничить права процесса сервера приложений на выполнение системных команд (Runtime.exec) и открытие сетевых соединений, что затруднит эксплуатацию RCE.
-
Обновление среды выполнения Убедитесь, что используется актуальная версия Java JRE/JDK с включенными механизмами фильтрации десериализации (JEP 290), и настройте глобальный фильтр через системное свойство:
-Djdk.serialFilter=!org.ajax4jsf.resource.UserResource$UriData;*