Как стать автором
Обновить

Комментарии 11

Почему это называется уязвимостью в Spring Framework или Core? WebappClassLoaderBase — насколько я помню, это вообще часть томката, то есть связана строго с вебом. Core != не веб. У меня есть Spring Core, у меня есть Spring Jdbc, но у меня и близко нет никакого томката. Более того, у меня кое-где даже IOC нет. И Jetty судя по всему это не касается тоже.

По вашей ссылке, кстати, гораздо более четко сформулировано, что это касается именно томката, 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/

Понятненько, почитаем, спасибо. Пока на log4shell не очень тянет, на первый взгляд.
Еще раз спасибо, это очень хороший источник как раз.

Потому, что уязвимость в 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.

>The vulnerability impacts Spring MVC and Spring WebFlux
Ну Томкат ладно, это специфический эксплойт на нем основан, но тут же ясно написано — Spring MVC and Spring WebFlux. Это широко распространенные вещи, но это сильно меньше, чем все множество спринг-приложений.

Ну то есть, как-то пока непонятно, в каком месте есть дырка, через которую уязвим кто-то ниже веба. Только SpEL таким слегка выглядит, но уязвимость в SpEL недаром описана как среднего уровня — потому что внедрить просто так SpEL в произвольное приложение не выйдет, для этого нужно нечто большее, дополнительные какие-то условия. У меня вот и spring-expression.jar в приложении вообще нет.

Глобально в Java имеется один небезопасный слой -- это reflection, который позволяет динамически инстанциировать и обращаться к объектам произвольных классов. Все интерпретируемые субъязыки наподобие SpEL, EL или Log4j2 EL, а также большинство data-binding фреймворков, использующих сериализацию, в той или иной форме используют reflection, а поэтому потенциально уязвимы. Основные причины две:

  • Семантическое core субъязыка позволяет выполнять "injections" через параметры.

  • Язык имеет полный неконтролируемый доступ ко всей платформе через reflection.

Пардон, но возможности reflection просто так снаружи обычно недоступны. Через языки выражений разного рода — да, конечно, они именно для этого в значительной степени и существуют. Но — их реализация, насколько я помню, в отдельном jar, и если его нет — то ее нет тоже (и нет уязвимости). Разве не так?

Опять же — по ссылке написано кое-что про сериализацию и binding, но это все описано применительно к webmvc — но не к Core. По поводу Core я лично еще в сомнении. Не вижу пока явного указания на что-то в Spring Core, что было бы уязвимо всегда, пусть и потенциально.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.