Комментарии 11
Актуальная информация из Spring Blog:
https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement
По вашей ссылке, кстати, гораздо более четко сформулировано, что это касается именно томката, war, webmvc и webflux. И где тут Core?
Во-первых, на момент начальной публикации подробностей было намного меньше. Я бы даже сказал, почти не было.
Во-вторых, сама концептуальная проблема находится в Spring Core. А вот конкретный практически осуществимый вариант её использования для RCE — требует деплой через WAR на Tomcat.
Ну это понятно. А концептуальная проблема в чем? Я вижу одну в SpEL — это наверное не веб, да. А еще? Ну или даже так — если у меня нет веба, нет томката — то нет и никакой проблемы вообще, потому что никакое выражение на SpEL никто снаружи засунуть в код не сможет?
если у меня нет веба, нет томката — то нет и никакой проблемы вообще, потому что никакое выражение на SpEL никто снаружи засунуть в код не сможет?
Если вы совсем-совсем никаких данных никаким образом "снаружи" не получаете, то ваше приложение, действительно, не уязвимо к этой атаке (и к 99% любых атак в принципе).
На практике вы так или иначе получаете в приложение данные внешних источников. Если в процесс парсинга данных и биндинга их на POJO/DTO будет вовлечён Spring - вы всё ещё можете быть под угрозой. Сказать наверняка - трудно, так как подробностей всё ещё опубликовано мало.
Вот тут есть некоторая информация помимо той, что опубликована в Spring Blog:
https://www.lunasec.io/docs/blog/spring-rce-vulnerabilities/
Потому, что уязвимость в Spring Framework, но для эксплуатации требуется, чтобы приложение работало на Tomcat. При этом они не исключают, что можно выполнить эксплуатацию и без запуска под Tomcat:
The vulnerability impacts Spring MVC and Spring WebFlux applications running on JDK 9+. The specific exploit requires the application to run on Tomcat as a WAR deployment. If the application is deployed as a Spring Boot executable jar, i.e. the default, it is not vulnerable to the exploit. However, the nature of the vulnerability is more general, and there may be other ways to exploit it.
Ну Томкат ладно, это специфический эксплойт на нем основан, но тут же ясно написано — Spring MVC and Spring WebFlux. Это широко распространенные вещи, но это сильно меньше, чем все множество спринг-приложений.
Ну то есть, как-то пока непонятно, в каком месте есть дырка, через которую уязвим кто-то ниже веба. Только SpEL таким слегка выглядит, но уязвимость в SpEL недаром описана как среднего уровня — потому что внедрить просто так SpEL в произвольное приложение не выйдет, для этого нужно нечто большее, дополнительные какие-то условия. У меня вот и spring-expression.jar в приложении вообще нет.
Глобально в Java имеется один небезопасный слой -- это reflection, который позволяет динамически инстанциировать и обращаться к объектам произвольных классов. Все интерпретируемые субъязыки наподобие SpEL, EL или Log4j2 EL, а также большинство data-binding фреймворков, использующих сериализацию, в той или иной форме используют reflection, а поэтому потенциально уязвимы. Основные причины две:
Семантическое core субъязыка позволяет выполнять "injections" через параметры.
Язык имеет полный неконтролируемый доступ ко всей платформе через reflection.
Опять же — по ссылке написано кое-что про сериализацию и binding, но это все описано применительно к webmvc — но не к Core. По поводу Core я лично еще в сомнении. Не вижу пока явного указания на что-то в Spring Core, что было бы уязвимо всегда, пусть и потенциально.
Spring4Shell RCE — критическая уязвимость в Java Spring Framework