Недавно стало известно, что обнаружена критическая уязвимость типа нулевого дня в модуле Spring Core поставляется как часть Spring Framework, что позволяет удаленному злоумышленнику, не прошедшему проверку подлинности, выполнить свой код на сервере.
По некоторым оценкам, модуль Spring Core используется в 74% приложений Java. Опасность уязвимости снижается тем, что только приложения, используйте аннотацию "@RequestMapping", чтобыПодключая обработчики запросов и используя привязку параметров веб-формы в формате «имя=значение» (POJO, Plain Old Java Object), а не JSON/XML, они становятся уязвимыми для атак. Пока неясно, какие Java-приложения и фреймворки затронуты этой проблемой.
Эта уязвимость, названная «Spring4Shell», использует внедрение классов, что приводит к полной RCE, и является очень серьезной. Название «Spring4Shell» было выбрано потому, что Spring Core — это вездесущая библиотека, похожая на log4j, породившую печально известную уязвимость Log4Shell.
Мы считаем, что пользователи, использующие JDK версии 9 и выше, уязвимы для RCE-атаки. Затронуты все версии Spring Core.
Существуют стратегии для смягчения атаки, и мы считаем, что не все серверы Spring обязательно уязвимы, в зависимости от других факторов, обсуждаемых ниже. Тем не менее, в настоящее время мы рекомендуем всем пользователям применять меры по снижению риска или выполнять обновление, если они используют Spring Core.
Эксплуатация уязвимости возможна только при использовании Java/JDK 9. или более новая версия. Уязвимость блокирует занесение в черный список полей «класс», «модуль» и «classLoader» или использование явного белого списка разрешенных полей.
Проблема за счет возможности обойти защиту от уязвимости CVE-2010-1622, Исправлено в Spring Framework 2010 и связано с выполнением обработчика classLoader при разборе параметров запроса.
Работа эксплойта сводится к отправке запроса cс параметрами "class.module.classLoader.resources.context.parent.pipeline.first.*", обработка которых при использовании "WebappClassLoaderBase" приводит к вызову класса AccessLogValve.
Указанный класс позволяет настроить логгер для создания произвольного файла jsp в корневом окружении Apache Tomcat и записи в этот файл кода, указанного злоумышленником. Созданный файл доступен для прямых запросов и может использоваться как веб-шелл. Для атаки на уязвимое приложение в среде Apache Tomcat достаточно отправить запрос с определенными параметрами с помощью утилиты curl.
Рассматриваемая проблема в Spring Core не путать с недавно выявленными уязвимостями CVE-2022-22963 и CVE-2022-22950. Первая проблема затрагивает пакет Spring Cloud, а также позволяет выполнять удаленное выполнение кода (эксплойт). CVE-2022-22963 исправлена в выпусках Spring Cloud 3.1.7 и 3.2.3.
Вторая проблема CVE-2022-22950 присутствует в Spring Expression, может использоваться для запуска DoS-атак и исправлена в Spring Framework 5.3.17. Это принципиально разные уязвимости. Разработчики Spring Framework пока не сделали никаких заявлений о новой уязвимости и не выпустили исправление.
В качестве временной меры защиты рекомендуется использовать в коде черный список недопустимых параметров запроса.
По-прежнему не понятно насколько катастрофическими могут быть последствия выявленной проблемы и будут ли атаки такими же массовыми, как в случае с уязвимостью в Log4j 2. Уязвимость получила кодовое название Spring4Shell, CVE-2022-22965, выпущены обновления Spring Framework 5.3.18 и 5.2.20 для устранения уязвимости.
Патч теперь доступен с 31 марта 2022 г. в последних выпущенных версиях Spring 5.3.18 и 5.2.20. Мы рекомендуем всем пользователям обновиться. Для тех, кто не может выполнить обновление, возможны следующие меры:
Основываясь на сообщении Praetorian, подтверждающем наличие RCE в Spring Core, в настоящее время рекомендуемый подход заключается в исправлении DataBinder путем добавления в черный список уязвимых шаблонов полей, необходимых для эксплуатации.
Наконец да вы заинтересованы в возможности узнать об этом больше о заметке, вы можете проверить детали По следующей ссылке.