В Java Spring Framework нашли критическую уязвимость — кто может пострадать
Не успел мир отойти от громкой уязвимости Apache Log4j2 (CVE-2021-44228), как в сети появились сообщения о новой, не менее опасной 0-day уязвимости. В Spring Framework для Java обнаружено сразу несколько уязвимостей «нулевого дня», которые позволяют удаленно выполнять произвольный код (RCE).
Почему это важно
29 марта 2022 года с китайского аккаунта в Twitter был опубликован набор твитов (ныне удаленных), в которых были показаны скриншоты нового POC-эксплойта 0-day в популярной Java-библиотеке Spring Core.
На момент написания этой новости, уязвимость находится в статусе wild, то есть не имеет номера CVE, связанного с этой уязвимостью, а пользователи в сети называют ее Spring4Shell или или как SpringShell.
Учитывая распространённость Spring Framework, специалисты справедливо опасаются грандиозного погрома в ближайшие недели-месяцы. Важно учитывать два момента:
- Рабочий эксплойт уже доступен в паблике, но по этическим соображениям мы не будем публиковать PoC.
- Ситуация драматически усложняется тем, что разработчики еще не выпустили патч. Можно посоветовать использовать Nemesida WAF, который заблокирует попытки эксплуатации этой и других уязвимостей, включая техники обхода.
Технические детали
Перечислим, что известно на этот момент:
- Клиенты, использующие JDK версии 9 и новее, уязвимы для атаки удаленного выполнения кода из-за обхода CVE-2010-1622.
- Уязвимости подвержены все версии Spring Core (исправление еще не выпущено).
- Уязвимость затрагивает функции, использующие
RequestMapping
и параметрыPOJO
(Plain Old Java Object).
С технической стороны идея эксплоита сводится к отправке запроса с параметрами class.module.classLoader.resources.context.parent.pipeline.first.*
, обработка которых при использовании WebappClassLoaderBase
приводит к обращению к классу AccessLogValve
.
В свою очередь этот класс позволяет настроить логгер для создания произвольного jsp-файла в корневом окружении Apache Tomcat и записи в этот файл кода, подготовленного атакующим. Далее, созданный файл становится доступным для прямых запросов извне.
Результатом такой эксплуатации будет созданный шелл-файл на jsp (shell.jsp
), при обращении к которому можно удаленно выполнять произвольные команды на сервере. Например, используя curl
, вызов можно оформить так:
# curl http://example.com/shell.jsp?cmd=whoami
Что можно сделать?
Согласно сообщению Praetorian, подтверждающему наличие RCE в Spring Core, рекомендуемый в настоящее время подход заключается в исправлении DataBinder
путем добавления черного списка уязвимых шаблонов полей, необходимых для эксплуатации. Если вы используете Spring Core, то на данный момент это единственное известное средство исправления данной атаки.
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: