CVE-2020-17530
Apache Struts
2021-11-03
Forced Object-Graph Navigation Language (OGNL) evaluation in Apache Struts, when evaluated on raw user input in tag attributes, can lead to remote code execution.
Технический анализ и план устранения
Суть уязвимости
Уязвимость (CVE-2020-17530) в Apache Struts 2 позволяет злоумышленнику выполнить произвольный код на сервере. Это происходит из-за некорректной обработки пользовательского ввода в атрибутах некоторых тегов (например, id). Атакующий может передать специально сформированное выражение на языке OGNL, которое будет выполнено на сервере с привилегиями приложения, что приведет к полному компрометированию системы.
Как исправить
Необходимо обновить Apache Struts 2 до исправленной версии.
- Для Struts 2.5.0 — Struts 2.5.25: Обновитесь до версии Struts 2.5.26 или выше.
- Для Struts 2.0.0 — Struts 2.4.15: Обновитесь до версии Struts 2.3.37 или Struts 2.4.30 (рекомендуется перейти на ветку 2.5.x).
Пример для Linux (обновление через менеджер пакетов, если Struts установлен из репозитория):
# Для систем на основе Debian/Ubuntu (если пакет доступен)
sudo apt update
sudo apt install libstruts2-java
# Для систем на основе RHEL/CentOS (если пакет доступен)
sudo yum update struts
Важно: Чаще всего Struts поставляется как библиотека внутри веб-приложения (WAR-файл). В этом случае:
1. Скачайте исправленные JAR-файлы (например, struts2-core-2.5.26.jar) с официального сайта Apache.
2. Замените уязвимые библиотеки в директории WEB-INF/lib вашего приложения.
3. Перезапустите сервер приложений (Tomcat, JBoss и т.д.).
Временное решение
Если немедленное обновление невозможно, примите следующие меры:
-
Настройка WAF (Web Application Firewall):
- Добавьте правило для блокировки запросов, содержащих в параметрах или заголовках строки, характерные для OGNL-инъекций (например,
%{,#_memberAccess,#context,#parameters). - Пример правила для ModSecurity (CRS):
SecRule ARGS_NAMES|ARGS|REQUEST_HEADERS "@rx (?i)(\%\{|#context|#_memberAccess|#parameters)" \ "id:10001,phase:2,deny,status:403,msg:'Potential Struts OGNL Injection'"
- Добавьте правило для блокировки запросов, содержащих в параметрах или заголовках строки, характерные для OGNL-инъекций (например,
-
Ограничение доступа:
- Настройте сетевые ACL (брандмауэр) так, чтобы доступ к веб-приложению на основе Struts был только из доверенных сетей (например, внутренней корпоративной сети).
-
Валидация входных данных (на уровне приложения):
- Если у вас есть доступ к исходному коду, убедитесь, что все пользовательские данные, используемые в атрибутах тегов (например,
<s:textfield id="%{userInput}">), проходят строгую валидацию или экранирование. Однако этот метод ненадежен и должен рассматриваться только как крайняя временная мера в сочетании с другими.
- Если у вас есть доступ к исходному коду, убедитесь, что все пользовательские данные, используемые в атрибутах тегов (например,