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 до исправленной версии.
- Определите текущую версию Primefaces в вашем проекте (например, проверьте файл
pom.xmlдля Maven илиbuild.gradleдля Gradle). -
Обновите зависимость до одной из патченных версий:
- Для 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.
Временное решение
Если немедленное обновление невозможно, примените следующие меры:
-
Настройте 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'"
- Добавьте правило для блокировки запросов, содержащих в параметрах (особенно в
-
Ограничьте доступ к приложению:
- Настройте сетевые ACL или файрвол, чтобы разрешить доступ к веб-приложению только из доверенных сетей (например, корпоративной VPN).
-
Измените ключ шифрования (временная мера): В
web.xmlвашего приложения можно задать собственный сильный ключ, что усложнит атаку, но не устранит уязвимость полностью.xml <context-param> <param-name>primefaces.SECRET</param-name> <param-value>ВАШ_СЛОЖНЫЙ_КЛЮЧ_МИНИМУМ_32_СИМВОЛА</param-value> </context-param>Перезапустите приложение после изменения.