Një dobësi kritike zero-day është zbuluar në modulin Spring Core, i cili është pjesë e Spring Framework. Kjo dobësi lejon një sulmues të paautorizuar në distancë të ekzekutojë kod në server. Nuk është e qartë se sa katastrofik do të jetë ndikimi i këtij problemi, ose nëse sulmet do të jenë aq të përhapura sa ato të vërejtura me dobësinë Log4j 2. Dobësia është koduar me emrin Spring4Shell, por një identifikues CVE nuk është caktuar ende. Problemi mbetet i paarnuar në Spring Framework, dhe disa prototipe shfrytëzimi funksionale janë tashmë të disponueshme në internet (1, 2, 3, 4). Problemi përkeqësohet nga fakti se shumë aplikacione Java të ndërmarrjeve të bazuara në Spring Framework funksionojnë me privilegje root, duke lejuar që dobësia të kompromentojë plotësisht sistemin.
Sipas disa vlerësimeve, moduli Spring Core përdoret në 74% të aplikacioneve Java. Ashpërsia e kësaj dobësie zbutet nga fakti se ajo prek vetëm aplikacionet që përdorin shënimin "@RequestMapping" kur bashkëngjitin trajtues kërkesash dhe lidhin parametrat e formularëve të uebit në formatin "name=value" (POJO, Plain Old Java Object), në vend që të përdorin JSON/XML.
Nuk është ende e qartë se cilat aplikacione dhe korniza Java preken nga ky problem. Dobësia parandalon vendosjen në listën e zezë të fushave "klasa", "module" dhe "classLoader", ose përdorimin e një liste të bardhë të qartë të fushave të lejuara. Shfrytëzimi është i mundur vetëm me Java/JDK 9 ose më të ri. Problemi shkaktohet nga një anashkalim i mundshëm i CVE-2010-1622, një dobësi e rregulluar në Spring Framework në vitin 2010 që përfshin ekzekutimin e trajtuesit të classLoader gjatë analizimit të parametrave të kërkesës.
Shfrytëzimi funksionon duke dërguar një kërkesë me parametrat "class.module.classLoader.resources.context.parent.pipeline.first.*". Përpunimi i këtyre parametrave krijon një skedar JSP në mjedisin rrënjë të Apache Tomcat dhe shkruan kodin e specifikuar të sulmuesit në këtë skedar. Skedari i krijuar bëhet i arritshëm për kërkesa të drejtpërdrejta dhe mund të përdoret si një shell web. Për të sulmuar një aplikacion të cenueshëm në një mjedis Apache Tomcat, thjesht dërgoni një kërkesë me parametra specifikë duke përdorur programin curl. curl -v -d "class.module.classLoader.resources.context.parent.pipeline .first.pattern=code_to_insert_into_file &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
Ky problem në Spring Core nuk duhet të ngatërrohet me dobësitë e zbuluara së fundmi CVE-2022-22963 dhe CVE-2022-22950. Problemi i parë ndikon në paketën Spring Cloud dhe u rregullua në versionet 3.1.7 dhe 3.2.3. Problemi i dytë ndikon në Spring Expression dhe u rregullua në Spring Framework 5.3.17. Këto janë dobësi thelbësisht të ndryshme. Zhvilluesit e Spring Framework nuk kanë bërë ende ndonjë deklaratë në lidhje me këtë dobësi të re ose nuk kanë publikuar një zgjidhje.
Si masë e përkohshme sigurie, rekomandohet të përdoret një listë e zezë me parametra të pavlefshëm kërkese në kod: 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
