CVE-2013-2251

Apache Struts

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

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

2022-03-25

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

Apache Struts allows remote attackers to execute arbitrary Object-Graph Navigation Language (OGNL) expressions.

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

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

Уязвимость (CVE-2013-2251) в Apache Struts 2.0.0 - 2.3.15 позволяет удаленному злоумышленнику выполнить произвольный код на сервере. Атакующий может отправить специально сформированный HTTP-запрос с вредоносным выражением OGNL (Object-Graph Navigation Language) в параметрах. Фреймворк некорректно обрабатывает эти данные, что приводит к выполнению кода с привилегиями пользователя, под которым работает веб-приложение.

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

Основное решение — обновление Apache Struts до защищенной версии.

  1. Определите текущую версию Struts. Проверьте файлы struts-core-x.x.x.jar или pom.xml в вашем приложении.
  2. Обновите фреймворк. Выберите версию в зависимости от вашей ветки:

    • Struts 2.3.x: Обновитесь до версии 2.3.15.3 или выше.
    • Struts 2.5.x: Убедитесь, что используется версия 2.5.22 или выше (эта ветка вышла позже уязвимости, но важно использовать последние стабильные сборки).

    Для Maven-проектов обновите зависимость в pom.xml: xml <!-- Для ветки 2.3 --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.37</version> <!-- Минимум 2.3.15.3 --> </dependency> После изменения пересоберите и переразверните приложение.

  3. Перезапустите ваш веб-сервер (Tomcat, JBoss и т.д.) и все сервисы, использующие обновленное приложение.

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

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

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

    • Добавьте правила для блокировки запросов, содержащих в параметрах ключевые слова OGNL, такие как #_memberAccess, #context, #parameters, #request, #session, #application.
    • Пример сигнатуры для ModSecurity: SecRule ARGS_NAMES "@rx (^|\W)(#_memberAccess|#context\[|#parameters\[|#request\[|#session\[|#application\[)" "id:10001,phase:2,deny,status:403,msg:'Potential Struts OGNL Injection'"
  2. Используйте фильтр на уровне приложения: Если у вас есть доступ к исходному коду, реализуйте или активируйте строгий фильтр (например, ParametersInterceptor с ограниченным набором разрешенных символов) для входящих параметров перед их обработкой Struts.

  3. Ограничьте доступ: Настройте сетевые ACL (Access Control Lists) или правила межсетевого экрана, чтобы разрешить доступ к веб-приложению только с доверенных IP-адресов (например, из внутренней сети).

Важно: Эти меры носят временный характер и могут быть обойдены. Полное устранение уязвимости возможно только путем обновления Struts.