CVE-2017-9805
Apache Struts
2021-11-03
Apache Struts REST Plugin uses an XStreamHandler with an instance of XStream for deserialization without any type filtering, which can lead to remote code execution when deserializing XML payloads.
Технический анализ и план устранения
Суть уязвимости
Уязвимость в плагине REST фреймворка Apache Struts (CVE-2017-9805). При обработке XML-запросов плагин использует библиотеку XStream для десериализации данных без проверки типов. Злоумышленник может отправить специально сформированный XML-пакет (Payload), который при десериализации выполнит произвольный код на сервере. Это приводит к полному удаленному выполнению кода (RCE) с правами пользователя, под которым работает веб-приложение.
Как исправить
Основное решение — обновить Apache Struts до безопасной версии, в которой реализована строгая проверка типов при десериализации.
- Определите текущую версию Struts. Проверьте файлы
struts-core-x.x.x.jarилиpom.xmlв вашем приложении. - Обновите фреймворк. Требуемые минимальные версии:
- Struts 2.3.x -> Обновитесь до 2.3.34 или выше.
- Struts 2.5.x -> Обновитесь до 2.5.13 или выше.
- Способ обновления (пример для Linux с Maven):
- Обновите версию в файле
pom.xmlвашего проекта:xml <!-- Для ветки 2.5 --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.5.13</version> </dependency> - Пересоберите и переразверните приложение:
bash mvn clean package - Если Struts установлен из системных репозиториев (например, для тестовых сред), используйте менеджер пакетов: ```bash
Пример для систем, где Struts есть в репозиториях (редко)
sudo apt update && sudo apt install libstruts2-java
Но чаще всего обновление происходит через зависимости проекта (Maven/Gradle).
```
- Обновите версию в файле
Временное решение
Если немедленное обновление невозможно, примените следующие меры:
- Отключите обработку XML в плагине REST. В конфигурации приложения (
struts.xml) удалите или закомментируйте обработчикrest. Найдите константуstruts.action.extensionи уберитеxmlиз списка разрешенных расширений.xml <!-- Пример изменения в struts.xml --> <constant name="struts.action.extension" value="action,,json" /> - Настройте правила WAF (Web Application Firewall). Создайте правило для блокировки запросов, содержащих опасные паттерны десериализации XStream (например, блокировка по содержимому типа
java.lang.ProcessBuilderилиjavax.imageio.ImageIOв теле XML-запроса). - Ограничьте доступ. Настройте сетевые ACL (Access Control Lists) или правила межсетевого экрана, чтобы разрешить доступ к веб-приложению только с доверенных IP-адресов (например, из внутренней сети или балансировщика нагрузки).