Kriitiline 0-päeva haavatavus Spring Frameworkis, mida kasutatakse paljudes Java projektides

Spring Frameworki komponent Spring Core'il on tuvastatud kriitiline 0-päeva haavatavus, mis võimaldab autentimata kaugrünnakutel käivitada oma koodi serveris. Praegu ei ole selge, kui katastroofilised võivad olla avastatud probleemi tagajärjed ja kas rünnakud võivad olla sama massilised kui Log4j 2 haavatavuse puhul. Haavatavusele on antud koodnimi Spring4Shell, kuid CVE-identifikaatorit ei ole veel määratud. Spring Frameworkis jääb probleem parandamata ja internetis on juba saadaval mitu töötavat eksploiti (1, 2, 3, 4). Probleemi teravdab asjaolu, et paljud ettevõtte Java-rakendused, mis tuginevad Spring Frameworkile, töötavad root-õigustega ning haavatavus võimaldab süsteemi täielikku kompromiteerimist.

Mõningate hinnangute kohaselt kasutatakse Spring Core'i moodulit 74% Java-rakendustest. Haavatavuse ohtu vähendab see, et rünnakud mõjutavad ainult rakendusi, mis kasutavad päringute töötlejate ühendamisel annotatsiooni „@RequestMapping” ja veebivormide parameetrite sidumist formati „name=value” (POJO, Plain Old Java Object), selle asemel et kasutada JSON/XML-i.

Millised Java-rakendused ja raamistikud täpselt selle probleemiga kokku puutuvad, pole veel selge. Haavatavus takistab 'class', 'module' ja 'classLoader' väljade musta nimekirja lisamist või lubatud valgete nimekirjade väljade selgelt määratlemist. Haavatavuse ärakasutamine on võimalik ainult Java/JDK 9 või uuema versiooni kasutamisel. Probleem tuleneb võimalusest mööda minna haavatavusest CVE-2010-1622, mis parandati Spring Frameworkis juba 2010. aastal ja millega on seotud classLoaderi töötleja käitamine päringuparametrite tõlgendamisel.

Ekspluata töö seisneb päringu saatmises parameetritega "class.module.classLoader.resources.context.parent.pipeline.first.*", mille töötlemine viib Apache Tomcat'i juurekeskkonnas jsp-faili loomisele ja ründaja poolt määratud koodi salvestamisele sellesse faili. Loodud fail muutub otsepöördumiseks kättesaadavaks ja võib toimida web shell'ina. Ründamiseks haavatavale rakendusele Apache Tomcat'i keskkonnas on piisav saata päring teatud parameetritega, kasutades utiliiti curl. curl -v -d "class.module.classLoader.resources.context.parent.pipeline.first.pattern=kood_faili_sisestamiseks &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'i arutatud probleemi ei tohi segamini ajada hiljuti tuvastatud haavatavustega CVE-2022-22963 ja CVE-2022-22950. Esimene probleem puudutab paketti Spring Cloud ning on kõrvaldatud versioonides 3.1.7 ja 3.2.3. Teine probleem leidub Spring Expression'is ja on parandatud Spring Framework'is 5.3.17. Need on põhimõtteliselt erinevad haavatavused. Spring Framework'i arendajad pole veel uudse haavatavuse kohta teateid andnud ega avaldanud parandust.

Ajutise meetmena soovitatakse koodis kasutada mittesobivate päringuparametrite musta nimekirja: 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 veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster