CVE-2017-9791

Apache Struts 1

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

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

2022-02-10

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

The Struts 1 plugin in Apache Struts might allow remote code execution via a malicious field value passed in a raw message to the ActionMessage.

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

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

Уязвимость (CVE-2017-9791) в плагине Struts 1 позволяет злоумышленнику выполнить произвольный код на сервере. Для этого атакующий отправляет специально сформированное HTTP-сообщение, содержащее вредоносное значение в поле ActionMessage. При обработке этого сообщения фреймворк некорректно интерпретирует переданные данные, что приводит к выполнению кода.

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

Основное решение — обновить Apache Struts до исправленной версии или применить патч.

  1. Обновление Apache Struts 1:

    • Перейдите на версию Struts 1.3.10 или выше.
    • Скачайте последнюю версию с официального сайта: https://struts.apache.org/download.cgi#struts1
    • Замените файлы библиотек (JAR) в вашем проекте и пересоберите приложение.
  2. Если используется система управления пакетами (например, в дистрибутиве Linux): ```bash # Пример для систем, где Struts поставляется в виде пакета (имя пакета может отличаться) # Сначала проверьте доступные версии: apt-cache policy libstruts1.2-java

    Обновите пакет, если доступна исправленная версия:

    sudo apt update sudo apt install --only-upgrade libstruts1.2-java ```

  3. Применение патча вручную:

    • Патч доступен в репозитории Apache. Вам необходимо изменить исходный код класса, отвечающего за обработку ActionMessage, и перекомпилировать библиотеку. Подробности и файлы для патча ищите в официальном бюллетене Apache по данной CVE.

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

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

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

    • Добавьте правило для блокировки запросов, содержащих в теле или параметрах подозрительные конструкции, характерные для эксплуатации этой уязвимости (например, строки с ActionMessage и вложенными выражениями OGNL).
    • Пример правила для ModSecurity (концептуально): SecRule REQUEST_BODY|REQUEST_URI|ARGS "@rx (?i)ActionMessage.*\\.\\s*\\(" \ "id:1001,phase:2,deny,status:403,msg:'Possible CVE-2017-9791 Exploit Attempt'"
  2. Контроль доступа:

    • Ограничьте доступ к уязвимому приложению на сетевом уровне (с помощью брандмауэра) только для доверенных IP-адресов или сегментов сети.
  3. Мониторинг:

    • Включите детальное логирование всех HTTP-запросов к приложению и настройте алерты на попытки передачи нестандартных данных в полях, связанных с ActionMessage.
    • Регулярно проверяйте логи на наличие аномалий.

Важно: Временные решения лишь снижают риск и не заменяют установку официального патча.