Kritická 0-day zranitelnost ve Spring Frameworku, používaném v mnoha Java projektech.

V modulu Spring Core, dodávaném jako součást rámce Spring Framework, byla odhalena kritická 0-day zranitelnost, která umožňuje neautentizovanému vzdálenému útočníkovi spustit vlastní kód na serveru. Zatím není jasné, jak katastrofální následky může mít odhalený problém a zda budou útoky stejně masivní jako v případě zranitelnosti v Log4j 2. Zranitelnosti bylo přiděleno kódové jméno Spring4Shell, ale CVE identifikátor dosud nebyl přidělen. V Spring Framework zůstává problém neopravený a na internetu jsou již k dispozici některé funkční prototypy exploitů (1, 2, 3, 4). Problém zhoršuje fakt, že mnohé podnikové Java aplikace běžící na základě Spring Framework mají práva root a zranitelnost umožňuje plně kompromitovat systém.

Podle některých odhadů je modul Spring Core používán ve 74% Java aplikací. Nebezpečí zranitelnosti snižuje to, že útoku jsou vystaveny pouze aplikace, které používají anotaci „@RequestMapping“ při připojování zpracovatelů požadavků a vazbu parametrů webových formulářů ve formátu „name=value“ (POJO, Plain Old Java Object), místo použití JSON/XML.

Jaké konkrétní Java aplikace a rámce jsou vystaveny problému, zatím není jasné. Zranitelnost blokuje přidání do černé listiny polí „class“, „module“ a „classLoader“ nebo použití explicitního bílého seznamu povolených polí. Využití zranitelnosti je možné pouze při použití Java/JDK 9 nebo novější verze. Problém je způsoben možností obcházení ochrany před zranitelností CVE-2010-1622, která byla opravena v Spring Framework již v roce 2010 a je spojena s vykonáváním zpracovatele classLoader při analýze parametrů požadavku.

Funkce exploitů spočívá v odeslání požadavku s parametry „class.module.classLoader.resources.context.parent.pipeline.first.*“, jejichž zpracování vede k vytvoření jsp souboru v kořenovém prostředí Apache Tomcat a zápisu do tohoto souboru kódu zadaného útočníkem. Vytvořený soubor se stává dostupným pro přímé požadavky a může být použit jako webový shell. Pro útok na zranitelnou aplikaci v prostředí Apache Tomcat stačí odeslat požadavek s určitými parametry pomocí nástroje curl. curl -v -d „class.module.classLoader.resources.context.parent.pipeline.first.pattern=kód_k_vložení_do_souboru&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

Problém, který zvažujeme ve Spring Core, nelze zaměňovat s nedávno zjištěnými zranitelnostmi CVE-2022-22963 a CVE-2022-22950. První problém se dotýká balíčku Spring Cloud a byl vyřešen v verzích 3.1.7 a 3.2.3. Druhá zranitelnost existuje v Spring Expression a byla opravena ve Spring Framework 5.3.17. Tyto zranitelnosti jsou principiálně odlišné. K výše uvedené zranitelnosti dosud vývojáři Spring Framework neučinili žádné prohlášení a nezveřejnili opravu.

Jako dočasné opatření pro ochranu se doporučuje použít v kódu černou listinu nepřijatelných parametrů požadavku: 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

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster