Π ΠΌΠΎΠ΄ΡΠ»Π΅ 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