Në modulin Spring Core, i ofruar si pjesë e Spring Framework, është zbuluar një vulnerabilitet kritik 0-day, që lejon një sulmues të paautentikuar të ekzekutojë kodin e tij në server. Ende nuk është e qartë sa katastrofike mund të jenë pasojat e problemit të zbuluar dhe nëse sulmet do të jenë po aq masive sa ato që ndodhën me vulnerabilitetin në Log4j 2. Vulnerabilitetit i është caktuar emri kodor Spring4Shell, por identifikuesi CVE ende nuk është emëruar. Në Spring Framework, problemi mbetet i pazgjidhur dhe tashmë disa prototipa funksionalë eksploitësh janë në dispozicion në internet (1, 2, 3, 4). Përkeqësohet nga fakti se shumë aplikacione Java për korporata, të bazuara në Spring Framework, ekzekutohen me të drejtat root dhe vulnerabiliteti lejon që sistemi të kompromentohet plotësisht.
Sipas disa vlerësimeve, moduli Spring Core përdoret në 74% të aplikacioneve Java. Rreziku i vulnerabilitetit zvogëlohet nga fakti se vetëm aplikacionet që përdorin annotimin «@RequestMapping» gjatë lidhjes së trajtuesve të kërkesave dhe lidhjen e parametrave të formave web në formatin «name=value» (POJO, Plain Old Java Object), në vend të përdorimit të JSON/XML, janë të ekspozuara ndaj sulmeve.
Cilat aplikacione dhe framework-e të tjera Java janë të prekuara nga problemi nuk është ende e qartë. Vulnerabiliteti bllokon shtimin në listën e zezë të fushave «class», «module» dhe «classLoader» ose përdorimin e një liste të bardhë të fushave të lejuara. Shfrytëzimi i vulnerabilitetit është i mundur vetëm kur përdoret Java/JDK 9 ose një version më të ri. Problemi shkaktohet nga mundësia për të anashkaluar mbrojtjen ndaj vulnerabilitetit CVE-2010-1622, e cila ishte korrigjuar në Spring Framework në vitin 2010 dhe lidhet me ekzekutimin e trajtuesit classLoader gjatë analizës së parametrave të kërkesës.
Funksioni i shfrytëzimit përfshin dërgimin e një kërkese me parametrat «class.module.classLoader.resources.context.parent.pipeline.first.*», përpunimi i të cilëve çon në krijimin e një skedari jsp në ambientin kryesor Apache Tomcat dhe në regjistrimin e kodit të përcaktuar nga sulmuesi në këtë skedar. Skedari i krijuar bëhet i disponueshëm për kërkesa të drejtpërdrejta dhe mund të përdoret si një web shell. Për të sulmuar një aplikim të cenueshëm në ambientin Apache Tomcat, mjafton të dërgoni një kërkesë me parametra të caktuar duke përdorur utilitarin curl. curl -v -d «class.module.classLoader.resources.context.parent.pipeline .first.pattern=kod_ për_të_inportuar_në_skedarin &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
Problemi i diskutuar në Spring Core nuk duhet ngatërruar me vulnerabilitetet e identifikuara së fundmi, CVE-2022-22963 dhe CVE-2022-22950. Problemi i parë preku paketën Spring Cloud dhe u zgjidh në lëshimet 3.1.7 dhe 3.2.3. Problemi i dytë ështëpresent në Spring Expression dhe është rregulluar në Spring Framework 5.3.17. Këto janë vulnerabilitete thelbësisht të ndryshme. Për vulnerabilitetin e ri, zhvilluesit e Spring Framework ende nuk kanë bërë ndonjë deklaratë dhe nuk kanë publikuar një rregullim.
Si një masë e përkohshme për mbrojtjen, rekomandohet përdorimi në kod të një liste të zezë të parametrave të papranueshëm të kërkesës: 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); } }
Burimi: opennet.ru
