ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ 0-day ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Spring Framework, примСняСмом Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Java-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…

Π’ ΠΌΠΎΠ΄ΡƒΠ»Π΅ 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-прилоТСния ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Ρ‹ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ Π΅Ρ‰Ρ‘ Π½Π΅ ясно. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² Ρ‡Ρ‘Ρ€Π½Ρ‹ΠΉ список ΠΏΠΎΠ»Π΅ΠΉ «class», «module» ΠΈ «classLoader» ΠΈΠ»ΠΈ использованиС явного Π±Π΅Π»ΠΎΠ³ΠΎ списка Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ. Эксплуатация уязвимости Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ использовании Java/JDK 9 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΠΎΠΉ вСрсии. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²Ρ‹Π·Π²Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±Ρ…ΠΎΠ΄Π° Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ уязвимости CVE-2010-1622, исправлСнной Π² Spring Framework Π΅Ρ‰Ρ‘ Π² 2010 Π³ΠΎΠ΄Ρƒ ΠΈ связанной с Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° classLoader ΠΏΡ€ΠΈ Ρ€Π°Π·Π±ΠΎΡ€Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² запроса.

Π Π°Π±ΠΎΡ‚Π° эксплоита сводится ΠΊ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ запроса с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ «class.module.classLoader.resources.context.parent.pipeline.first.*», ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ созданию 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 ΠΈ устранСна Π² выпусках 3.1.7 ΠΈ 3.2.3. Вторая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° присутствуСт Π² Spring Expression ΠΈ исправлСна Π²ΠΎ 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