Vulnerabilità critica 0-day in Spring Framework, utilizzato in molti progetti Java

Nel modulo Spring Core, incluso nel framework Spring Framework, è stata identificata una vulnerabilità critica zero-day che consente a un attaccante remoto non autenticato di eseguire codice sul server. Non è ancora chiaro quanto gravi possano essere le conseguenze della vulnerabilità identificata e se gli attacchi saranno altrettanto massicci come nel caso della vulnerabilità in Log4j 2. La vulnerabilità è stata soprannominata Spring4Shell, ma non è stata ancora assegnata un'identificazione CVE. Nel Spring Framework il problema rimane irrisolto e già circolano diversi prototipi funzionanti di exploit (1, 2, 3, 4). A rendere la situazione più grave è il fatto che molte applicazioni Java aziendali basate su Spring Framework vengono eseguite con privilegi di root e la vulnerabilità consente di compromettere completamente il sistema.

Secondo alcune stime, il modulo Spring Core è utilizzato nel 74% delle applicazioni Java. Il pericolo della vulnerabilità è attenuato dal fatto che sono a rischio solo le applicazioni che utilizzano l'annotazione «@RequestMapping» durante il collegamento dei gestori delle richieste e il binding dei parametri delle web form nel formato «name=value» (POJO, Plain Old Java Object), invece di utilizzare JSON/XML.

Non è ancora chiaro quali specifiche applicazioni e framework Java siano colpiti dal problema. La vulnerabilità impedisce l'aggiunta alla lista nera dei campi «class», «module» e «classLoader» o l'uso di una lista bianca esplicita dei campi consentiti. Lo sfruttamento della vulnerabilità è possibile solo utilizzando Java/JDK 9 o una versione più recente. Il problema è causato dalla possibilità di aggirare le protezioni contro la vulnerabilità CVE-2010-1622, corretta nel Spring Framework nel 2010 e relativa all'esecuzione del gestore classLoader durante l'analisi dei parametri di richiesta.

Il funzionamento dell'exploit è ridotto all'invio di una richiesta con i parametri «class.module.classLoader.resources.context.parent.pipeline.first.*», il cui trattamento porta alla creazione di un file jsp nell'ambiente radice di Apache Tomcat e alla registrazione in questo file del codice fornito dall'attaccante. Il file creato diventa accessibile per richieste dirette e può essere utilizzato come web shell. Per attaccare un'applicazione vulnerabile nell'ambiente Apache Tomcat, è sufficiente inviare una richiesta con determinati parametri utilizzando lo strumento curl. curl -v -d «class.module.classLoader.resources.context.parent.pipeline.first.pattern=codice_da_inserire_nel_file &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

Il problema considerato nel Spring Core non deve essere confuso con le vulnerabilità recentemente scoperte CVE-2022-22963 e CVE-2022-22950. Il primo problema riguarda il pacchetto Spring Cloud ed è stato corretto nelle versioni 3.1.7 e 3.2.3. Il secondo problema è presente in Spring Expression ed è stato risolto in Spring Framework 5.3.17. Si tratta di vulnerabilità fondamentalmente diverse. Gli sviluppatori di Spring Framework non hanno ancora rilasciato alcuna dichiarazione sulla nuova vulnerabilità e non hanno pubblicato alcuna correzione.

Come misura temporanea di protezione, si consiglia di utilizzare nel codice una lista nera di parametri di richiesta non consentiti: 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); } }

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster