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 до защищенной версии.
- Определите текущую версию Struts. Проверьте файлы
struts-core-x.x.x.jarилиpom.xmlв вашем приложении. -
Обновите фреймворк. Выберите версию в зависимости от вашей ветки:
- 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>После изменения пересоберите и переразверните приложение. -
Перезапустите ваш веб-сервер (Tomcat, JBoss и т.д.) и все сервисы, использующие обновленное приложение.
Временное решение
Если немедленное обновление невозможно, примените следующие меры:
-
Настройте 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'"
- Добавьте правила для блокировки запросов, содержащих в параметрах ключевые слова OGNL, такие как
-
Используйте фильтр на уровне приложения: Если у вас есть доступ к исходному коду, реализуйте или активируйте строгий фильтр (например,
ParametersInterceptorс ограниченным набором разрешенных символов) для входящих параметров перед их обработкой Struts. -
Ограничьте доступ: Настройте сетевые ACL (Access Control Lists) или правила межсетевого экрана, чтобы разрешить доступ к веб-приложению только с доверенных IP-адресов (например, из внутренней сети).
Важно: Эти меры носят временный характер и могут быть обойдены. Полное устранение уязвимости возможно только путем обновления Struts.