A Spring Core modulban, amely a Spring Framework keretrendszer részeként érkezik, kritikus 0-napos sebezhetőséget fedeztek fel, amely lehetővé teszi, hogy az azonosítatlan távoli támadó kódot futtasson a szerveren. Még nem világos, hogy a felfedezett probléma következményei mennyire súlyosak, és hogy a támadások olyan tömegesen fognak-e terjedni, mint a Log4j 2 sebezhetősége esetében. A sebezhetőség kódneve Spring4Shell, de a CVE-azonosító még nem lett hozzárendelve. A Spring Framework-ben a probléma továbbra is megoldatlan, és az interneten már elérhető néhány működő exploit prototípus (1, 2, 3, 4). A helyzetet súlyosbítja, hogy sok vállalati Java-alkalmazás, amely a Spring Framework-on alapul, root jogosultságokkal fut, így a sebezhetőség révén teljesen kompromittálható a rendszer.
Egyes becslések szerint a Spring Core modult a Java-alkalmazások 74%-ában használják. A sebezhetőség veszélyét csökkenti, hogy csak azok az alkalmazások vannak kitéve a támadásnak, amelyek a kéréskezelők csatlakozásakor a "@RequestMapping" annotációt használják és a webform paramétereit "name=value" formátumban kötik (POJO, Plain Old Java Object), ahelyett, hogy JSON/XML-t alkalmaznának.
Még nem világos, hogy pontosan mely Java-alkalmazások és keretrendszerek érintettek a problémában. A sebezhetőség blokkolja a "class", "module" és "classLoader" mezők feketelistásításának lehetőségét, vagy a megengedett mezők kifejezett fehérlistásítását. A sebezhetőség kihasználása csak Java/JDK 9 vagy újabb verziók használatával lehetséges. A probléma oka a CVE-2010-1622 sebezhetőség védelmének megkerülésének lehetősége, amelyet a Spring Framework-ben még 2010-ben javítottak, és amely a kérésparaméterek feldolgozása során a classLoader kezelő futtatásához kapcsolódik.
A kihasználás működése abban áll, hogy egy kérdést küldünk a «class.module.classLoader.resources.context.parent.pipeline.first.*» paraméterekkel, amelynek feldolgozása egy jsp-fájl létrehozásához vezet az Apache Tomcat gyökér környezetében, és a megadott kód beírásához az általa támadónak. Az elkészült fájl közvetlen kérésekhez válik elérhetővé, és web shell-ként használható. A sebezhető alkalmazás támadásához az Apache Tomcat környezetében elegendő egy kérdés küldése meghatározott paraméterekkel a curl segédeszközzel. curl -v -d «class.module.classLoader.resources.context.parent.pipeline.first.pattern=bekötni_való_kód &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
A vizsgált problémát a Spring Core-ban nem szabad összetéveszteni a napokban felfedezett CVE-2022-22963 és CVE-2022-22950 sebezhetőségekkel. Az első probléma a Spring Cloud csomagot érinti, és a 3.1.7 és 3.2.3 verziókban megszüntették. A második probléma a Spring Expression-ben található, és a Spring Framework 5.3.17 verzióban javították. Ezek alapvetően más sebezhetőségek. Az új sebezhetőségről a Spring Framework fejlesztői még nem tettek nyilatkozatot, és javítást sem tettek közzé.
Ideiglenes intézkedésként a kód védelme érdekében ajánlott a kérés bénájának illegitim paramétereinek fekete listáját használni: 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); } }
Forrás: opennet.ru
