Kriitiline 0-day haavatavus Spring Frameworkis, mida kasutatakse paljusid Java projekte

Spring Frameworki Spring Core moodulis leiti kriitiline 0-pĂ€ev haavatavus, mis vĂ”imaldab autentimata kaugrĂŒnnaku kaudu rĂŒndajal kĂ€ivitada oma koodi serveris. Praegu ei ole selge, kui katastroofilised vĂ”ivad olla tuvastatud probleemi tagajĂ€rjed ning kas rĂŒnnakud vĂ”ivad olla sama massilised kui Log4j 2 haavatavuse puhul. Haavatusele on antud koodnimi Spring4Shell, kuid CVE-ID pole veel mÀÀratud. Spring Frameworkis jÀÀb probleem lahendamata ja internetis on juba saadaval mitu töötavat prototĂŒĂŒpi eksploididest (1, 2, 3, 4). Probleemi sĂŒvendab see, et paljud ettevĂ”tte Java rakendused, mis pĂ”hinevad Spring Frameworkil, töötavad root Ă”igustes ja haavatavus vĂ”imaldab sĂŒsteemi tĂ€ielikku kompromiteerimist.

MĂ”ned hinnangud nĂ€itavad, et Spring Core moodulit kasutatakse 74% Java rakendustest. Haavatavuse oht vĂ€heneb, kuna rĂŒnnakule on vastuvĂ”tlikud ainult rakendused, mis kasutavad pĂ€ringute kĂ€sitlejate ĂŒhendamisel ja veebivormide parameetrite sidumisel annotatsiooni "@RequestMapping" ning vormaatimist "name=value" (POJO, Plain Old Java Object), mitte JSON/XML-i kasutamise kaudu.

Pole veel selge, millised Java rakendused ja raamistikud on probleemile vastuvÔtlikud. Haavatavus blokeerib vÀljajÀtmise lisamise musta nimekirja vÀljadele "class", "module" ja "classLoader" vÔi lubatud vÀljade selge valge nimekirja kasutamise. Haavatavuse Àrakasutamine on vÔimalik ainult Java/JDK 9 vÔi uuema versiooni kasutamisel. Probleem tuleneb vÔimalusest mööda minna CVE-2010-1622 haavatavuse kaitset, mis parandati Spring Frameworkis juba 2010. aastal ja mis on seotud classLoaderi kÀsitleja kÀitamisega pÀringu parameetrite töötlemisel.

Eksploiidi töö seisneb pĂ€ringu saatmises parameetritega «class.module.classLoader.resources.context.parent.pipeline.first.*», mille töötlemine viib Apache Tomcat'i juurkeskkonda jsp-faili loomisele ja rĂŒndaja mÀÀratud koodi salvestamisele sellesse faili. Loodud fail on otseste pĂ€ringute jaoks saadaval ja seda vĂ”ib kasutada web shellina. RĂŒndamiseks haavatavale rakendusele Apache Tomcat'i keskkonnas piisab pĂ€ringu saatmisest kindlate parameetritega kasutades utiliiti curl. curl -v -d «class.module.classLoader.resources.context.parent.pipeline.first.pattern=kodeeritud_kood_faili_sisemiseks&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

KĂ€sitletavat probleemi Spring Core'is ei tohiks segi ajada hiljuti avastatud haavatavustega CVE-2022-22963 ja CVE-2022-22950. Esimene probleem puudutab Spring Cloud paketti ja on kĂ”rvaldatud vĂ€ljaannetes 3.1.7 ja 3.2.3. Teine probleem on olemas Spring Expression'is ja on parandatud Spring Framework'is 5.3.17. Need on pĂ”himĂ”tteliselt erinevad haavatavused. Uue haavatavuse kohta pole Spring Framework'i arendajatel veel ĂŒhtegi avaldust tehtud ega parandust vĂ€lja antud.

Ajutise meetmena kaitseks soovitatakse kasutada koodis keeldude nimekirja lubamatute pÀringupÀringute parameetrite jaoks: 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); } }

Allikas: opennet.ru

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster