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 до безопасной версии, в которой реализована строгая проверка типов при десериализации.

  1. Определите текущую версию Struts. Проверьте файлы struts-core-x.x.x.jar или pom.xml в вашем приложении.
  2. Обновите фреймворк. Требуемые минимальные версии:
    • Struts 2.3.x -> Обновитесь до 2.3.34 или выше.
    • Struts 2.5.x -> Обновитесь до 2.5.13 или выше.
  3. Способ обновления (пример для 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).

    ```

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

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

  1. Отключите обработку XML в плагине REST. В конфигурации приложения (struts.xml) удалите или закомментируйте обработчик rest. Найдите константу struts.action.extension и уберите xml из списка разрешенных расширений. xml <!-- Пример изменения в struts.xml --> <constant name="struts.action.extension" value="action,,json" />
  2. Настройте правила WAF (Web Application Firewall). Создайте правило для блокировки запросов, содержащих опасные паттерны десериализации XStream (например, блокировка по содержимому типа java.lang.ProcessBuilder или javax.imageio.ImageIO в теле XML-запроса).
  3. Ограничьте доступ. Настройте сетевые ACL (Access Control Lists) или правила межсетевого экрана, чтобы разрешить доступ к веб-приложению только с доверенных IP-адресов (например, из внутренней сети или балансировщика нагрузки).