Kritická 0-day zraniteľnosť v Spring Framework, používanom v mnohých Java projektoch

V module Spring Core, ktorý je súčasťou frameworku Spring Framework, bola identifikovaná kritická 0-day zraniteľnosť, ktorá umožňuje neautentifikovanému vzdialenému útočníkovi vykonať svoj kód na serveri. Zatiaľ nie je jasné, aké katastrofálne môžu byť následky tejto zisteného problému a či budú útoky tak isto masívne ako v prípade zraniteľnosti v Log4j 2. Zraniteľnosti bolo pridelené kódové meno Spring4Shell, ale CVE identifikátor zatiaľ nebol priradený. Problém v Spring Framework zostáva neopravovaný a na internete je už k dispozícii niekoľko funkčných prototypov exploitov (1, 2, 3, 4). Problém je zosilnený tým, že mnohé firemné Java aplikácie založené na Spring Framework bežia s právami root a zraniteľnosť umožňuje úplne skompromitovať systém.

Podľa niektorých odhadov je modul Spring Core používaný v 74% Java aplikácií. Hrozbu zraniteľnosti zmierňuje to, že sú ohrozené iba aplikácie, ktoré používajú anotáciu „@RequestMapping“ pri pripojení spracovateľov požiadaviek a viazaní parametrov webových formulárov vo formáte „name=value“ (POJO, Plain Old Java Object), namiesto použitia JSON/XML.

Ktoré konkrétne Java aplikácie a frameworky sú postihnuté problémom, zatiaľ nie je jasné. Zraniteľnosť blokuje pridanie polí „class“, „module“ a „classLoader“ do čiernej listiny alebo použitie explicitného bieleho zoznamu povolených polí. Využitie zraniteľnosti je možné len pri používaní Java/JDK 9 alebo novšej verzie. Problém je spôsobený možnosťou obídenia ochrany pred zraniteľnosťou CVE-2010-1622, ktorá bola opravená v Spring Framework ešte v roku 2010 a súvisí s vykonávaním spracovateľa classLoader pri analýze parametrov požiadavky.

Funkcia exploit-u spočíva v odoslaní požiadavky s parametrami „class.module.classLoader.resources.context.parent.pipeline.first.*“, ktorých spracovanie vedie k vytvoreniu jsp súboru v koreňovom prostredí Apache Tomcat a zápisu napadnutého kódu do tohto súboru. Vytvorený súbor sa stáva prístupným pre priame požiadavky a môže byť použitý ako webový shell. Na útok na zraniteľnú aplikáciu v prostredí Apache Tomcat stačí poslať požiadavku s určitými parametrami pomocou nástroja curl. curl -v -d „class.module.classLoader.resources.context.parent.pipeline.first.pattern=kód_na_vloženie_do_súboru&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

Riešenú problematiku v Spring Core netreba zamieňať s nedávno zistenými zraniteľnosťami CVE-2022-22963 a CVE-2022-22950. Prvá zraniteľnosť sa týka balíka Spring Cloud a bola odstránená vo vydaniach 3.1.7 a 3.2.3. Druhá zraniteľnosť je prítomná v Spring Expression a bola opravená vo Spring Framework 5.3.17. Ide o zásadne odlišné zraniteľnosti. Vývojári Spring Framework zatiaľ neurobili žiadne vyhlásenia o novej zraniteľnosti a nezverejnili opravy.

Ako dočasné opatrenie na ochranu sa odporúča v kóde použiť zoznam zakázaných parametrov požiadavky: 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); } }

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster