CVE-2017-1000486

Primetek Primefaces Application

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

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

2022-01-10

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

Primetek Primefaces is vulnerable to a weak encryption flaw resulting in remote code execution

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

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

Уязвимость (CVE-2017-1000486) в библиотеке Primefaces связана со слабым шифрованием (использование режима ECB в AES) при сериализации состояния компонентов ViewState. Злоумышленник может: * Перехватить и расшифровать сериализованные данные ViewState. * Подменить их, внедрив вредоносную сериализованную Java-команду. * Отправить модифицированный запрос на сервер, что приведет к выполнению произвольного кода на уязвимом приложении при десериализации.

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

Основное решение — обновить библиотеку Primefaces до исправленной версии.

  1. Определите текущую версию Primefaces в вашем проекте (например, проверьте файл pom.xml для Maven или build.gradle для Gradle).
  2. Обновите зависимость до одной из патченных версий:

    • Для Primefaces 5.x — обновитесь до версии 5.3.18 или выше.
    • Для Primefaces 6.x — обновитесь до версии 6.2.4 или выше.
    • Для Primefaces 7.x — обновитесь до версии 7.0.2 или выше.

    Пример для Maven (обновление до 6.2.4): xml <dependency> <groupId>org.primefaces</groupId> <artifactId>primefaces</artifactId> <version>6.2.4</version> </dependency> 3. Пересоберите и переразверните ваше приложение на всех серверах. 4. Убедитесь, что в проекте не осталось старых версий JAR-файлов primefaces-*.jar.

Временное решение

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

  1. Настройте WAF (Web Application Firewall):

    • Добавьте правило для блокировки запросов, содержащих в параметрах (особенно в javax.faces.ViewState) подозрительные шаблоны, характерные для эксплойтов десериализации (например, rO0ABX, ACED, java.lang.).
    • Пример правила для ModSecurity (CRS): SecRule ARGS "@rx (?:rO0ABX|ACED|java\.lang\..*?\.)" \ "id:1000486,\ phase:2,\ deny,\ msg:'CVE-2017-1000486 - Primefaces RCE Attempt'"
  2. Ограничьте доступ к приложению:

    • Настройте сетевые ACL или файрвол, чтобы разрешить доступ к веб-приложению только из доверенных сетей (например, корпоративной VPN).
  3. Измените ключ шифрования (временная мера): В web.xml вашего приложения можно задать собственный сильный ключ, что усложнит атаку, но не устранит уязвимость полностью. xml <context-param> <param-name>primefaces.SECRET</param-name> <param-value>ВАШ_СЛОЖНЫЙ_КЛЮЧ_МИНИМУМ_32_СИМВОЛА</param-value> </context-param> Перезапустите приложение после изменения.