Критическая 0-day уязвимость в Spring Framework, применяемом во многих Java-проектах
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
В модуле Spring Core, поставляемом в составе фреймворка Spring Framework, выявлена критическая 0-day уязвимость, позволяющая неаутентифицированному удалённому атакующему выполнить свой код на сервере. Пока не ясно насколько катастрофичны могут быть последствия выявленной проблемы и будут атаки столь же массовыми, как в случае с уязвимостью в Log4j 2. Уязвимости присвоено кодовое имя Spring4Shell, но CVE-идентификатор пока не назначен. В Spring Framework проблема остаётся неисправленной и в сети уже доступно несколько рабочих прототипов эксплоитов (1, 2, 3, 4). Проблему усугубляет то, что многие корпоративные Java-приложения на базе Spring Framework выполняются с правами root и уязвимость позволяет полностью скомпрометировать систему.
По некоторым оценкам модуль Spring Core используется в 74% Java-приложений. Опасность уязвимости снижает то, что атаке подвержены только приложения, использующие при подключении обработчиков запросов аннотацию "@RequestMapping" и применяющие привязку параметров web-форм в формате "name=value" (POJO, Plain Old Java Object), вместо JSON/XML. Какие именно Java-приложения и фреймворки подвержены проблеме ещё не ясно.
Эксплуатация уязвимости возможна только при использовании Java/JDK 9 или более новой версии. Уязвимость блокирует добавление в чёрный список полей "class", "module" и "classLoader" или использование явного белого списка разрешённых полей. Проблема вызвана возможностью обхода защиты от уязвимости CVE-2010-1622, исправленной в Spring Framework ещё в 2010 году и связанной с выполнением обработчика classLoader при разборе параметров запроса.
Работа эксплоита сводится к отправке запроса с параметрами "class.module.classLoader.resources.context.parent.pipeline.first.*", обработка которых при использовании "WebappClassLoaderBase" приводит к обращению к классу AccessLogValve. Указанный класс позволяет настроить логгер для создания произвольного jsp-файла в корневом окружении Apache Tomcat и записи в этот файл указанного атакующим кода.
Созданный файл становится доступным для прямых запросов и может использоваться в качестве web shell. Для атаки на уязвимое приложение в окружении Apache Tomcat достаточно отправить запрос с определёнными параметрами при помощи утилиты curl.
curl -v -d "class.module.classLoader.resources.context.parent.pipeline
.first.pattern=код_для_вставки_в_файл
&class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp
&class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT
&class.module.classLoader.resources.context.parent.pipeline.first.prefix=tomcatwar
&class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat="
http://localhost:8080/springmvc5-helloworld-exmaple-0.0.1-SNAPSHOT/rapid7
Рассматриваемую проблему в 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 ещё не сделали никаких заявлений и не опубликовали исправление.
В качестве временной меры для защиты рекомендуется использовать в коде чёрный список недопустимых параметров запроса:
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.InitBinder;
@ControllerAdvice
@Order(10000)
public class BinderControllerAdvice {
@InitBinder
public void setAllowedFields(WebDataBinder dataBinder) {
String[] denylist = new String[]{"class.", "Class.", ".class.", ".Class."};
dataBinder.setDisallowedFields(denylist);
}
}
===========
Источник:
OpenNet.RU
===========
Похожие новости
- Главная ссылка к новости (https://www.lunasec.io/docs/bl...)
- OpenNews: Критическая уязвимость в Apache Log4j 2, затрагивающая многие Java-проекты
- OpenNews: 17 проектов Apache оказались затронуты уязвимостью в Log4j 2
- OpenNews: Обновление Log4j 2.17.1 с устранением ещё одной уязвимости
- OpenNews: Новый вариант атаки на Log4j 2, позволяющий обойти добавленную защиту
- OpenNews: Третья уязвимость в Log4j 2. Проблемы в Log4j затрагивают 8% Maven-пакетов
Похожие новости:
- Выпуск Java SE 18
- В язык JavaScript предложено добавить синтаксис с информацией о типах
- В Polkit добавлена поддержка JavaScript-движка Duktape
- Обновление Java SE, MySQL, VirtualBox и других продуктов Oracle с устранением уязвимостей
- Обновление Log4j 2.17.1 с устранением ещё одной уязвимости
- Новый вариант атаки на Log4j 2, позволяющий обойти добавленную защиту
- 17 проектов Apache оказались затронуты уязвимостью в Log4j 2
- Доступен Emscripten 3.0, компилятор из C/C++ в WebAssembly
- Web-фреймворк Pusa, переносящий логику JavaScript-фронтэнда на сторону сервера
- Применение невидимых unicode-символов для скрытия действий в JavaScript-коде
Теги для поиска: #_java, #_spring
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 04:51
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
В модуле Spring Core, поставляемом в составе фреймворка Spring Framework, выявлена критическая 0-day уязвимость, позволяющая неаутентифицированному удалённому атакующему выполнить свой код на сервере. Пока не ясно насколько катастрофичны могут быть последствия выявленной проблемы и будут атаки столь же массовыми, как в случае с уязвимостью в Log4j 2. Уязвимости присвоено кодовое имя Spring4Shell, но CVE-идентификатор пока не назначен. В Spring Framework проблема остаётся неисправленной и в сети уже доступно несколько рабочих прототипов эксплоитов (1, 2, 3, 4). Проблему усугубляет то, что многие корпоративные Java-приложения на базе Spring Framework выполняются с правами root и уязвимость позволяет полностью скомпрометировать систему. По некоторым оценкам модуль Spring Core используется в 74% Java-приложений. Опасность уязвимости снижает то, что атаке подвержены только приложения, использующие при подключении обработчиков запросов аннотацию "@RequestMapping" и применяющие привязку параметров web-форм в формате "name=value" (POJO, Plain Old Java Object), вместо JSON/XML. Какие именно Java-приложения и фреймворки подвержены проблеме ещё не ясно. Эксплуатация уязвимости возможна только при использовании Java/JDK 9 или более новой версии. Уязвимость блокирует добавление в чёрный список полей "class", "module" и "classLoader" или использование явного белого списка разрешённых полей. Проблема вызвана возможностью обхода защиты от уязвимости CVE-2010-1622, исправленной в Spring Framework ещё в 2010 году и связанной с выполнением обработчика classLoader при разборе параметров запроса. Работа эксплоита сводится к отправке запроса с параметрами "class.module.classLoader.resources.context.parent.pipeline.first.*", обработка которых при использовании "WebappClassLoaderBase" приводит к обращению к классу AccessLogValve. Указанный класс позволяет настроить логгер для создания произвольного jsp-файла в корневом окружении Apache Tomcat и записи в этот файл указанного атакующим кода. Созданный файл становится доступным для прямых запросов и может использоваться в качестве web shell. Для атаки на уязвимое приложение в окружении Apache Tomcat достаточно отправить запрос с определёнными параметрами при помощи утилиты curl. curl -v -d "class.module.classLoader.resources.context.parent.pipeline
.first.pattern=код_для_вставки_в_файл &class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp &class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT &class.module.classLoader.resources.context.parent.pipeline.first.prefix=tomcatwar &class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=" http://localhost:8080/springmvc5-helloworld-exmaple-0.0.1-SNAPSHOT/rapid7 В качестве временной меры для защиты рекомендуется использовать в коде чёрный список недопустимых параметров запроса: import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.InitBinder; @ControllerAdvice @Order(10000) public class BinderControllerAdvice { @InitBinder public void setAllowedFields(WebDataBinder dataBinder) { String[] denylist = new String[]{"class.", "Class.", ".class.", ".Class."}; dataBinder.setDisallowedFields(denylist); } } =========== Источник: OpenNet.RU =========== Похожие новости
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 04:51
Часовой пояс: UTC + 5