
Strumento di sfruttamento della vulnerabilità di deserializzazione Java con generatori di payload per molteplici marshaller (Jackson, XStream, SnakeYAML) e indirezione del riferimento JNDI per l'esecuzione remota di codice.
Se sei arrivato qui per Log4Shell/CVE-2021-44228, potresti voler leggere i vettori di sfruttamento e le versioni del runtime Java interessate: https://mbechler.github.io/2021/12/10/PSA_Log4Shell_JNDI_Injection/
Sono passati più di due anni da quando Chris Frohoff e Garbriel Lawrence hanno presentato la loro ricerca sulle vulnerabilità di deserializzazione degli oggetti Java, che alla fine ha portato a quella che può essere giustamente descritta come la più grande ondata di bug di esecuzione remota di codice nella storia di Java.
La ricerca su questo argomento ha indicato che queste vulnerabilità non sono esclusive di meccanismi espressivi come la serializzazione Java o XStream, ma alcune potrebbero essere applicate anche ad altri meccanismi.
Questo paper presenta un'analisi, inclusi i dettagli di sfruttamento, di varie librerie di marshalling open-source Java che consentono(no) l'unmarshalling di tipi arbitrari forniti dall'attaccante e mostra che, indipendentemente da come viene eseguito questo processo e da quali vincoli impliciti sono in atto, è soggetto a tecniche di sfruttamento simili.
Il paper completo è disponibile all'indirizzo marshalsec.pdf
Tutte le informazioni e il codice sono forniti esclusivamente a scopo educativo e/o per testare i propri sistemi per queste vulnerabilità.
Richiede Java 8. Compila con Maven mvn clean package -DskipTests. Esegui come
java -cp target/marshalsec-[VERSION]-SNAPSHOT-all.jar marshalsec.<Marshaller> [-a] [-v] [-t] [<gadget_type> [<arguments...>]]
dove
Sono inclusi i generatori di payload per i seguenti marshaller:
Nessun prerequisito.
Prerequisiti:
Il servizio da caricare è attualmente hardcoded su javax.script.ScriptEngineFactory.
Prerequisiti:
Prerequisiti:
java -cp target/marshalsec-[VERSION]-SNAPSHOT-all.jar marshalsec.jndi.(LDAP|RMI)RefServer <codebase>#<class> [<port>]
Ci sono alcune proprietà di sistema che controllano gli argomenti durante l'esecuzione dei test (tramite Maven o usando -a)
I test vengono eseguiti con un SecurityManager installato che controlla l'esecuzione di comandi di sistema e il codice eseguito da codebase remoti. Affinché ciò funzioni, la classe caricata in uso deve attivare qualche controllo del security manager.
| Marshaller | Impatto del Gadget |
|---|
| BlazeDSAMF(0|3|X) | escalation solo JDK verso la serializzazione Java RCE di varie librerie di terze parti |
| Hessian|Burlap | varie RCE di terze parti |
| Castor | RCE di librerie dipendenti |
| Jackson | possibile RCE solo JDK, varie RCE di terze parti |
| Java | ancora un'altra RCE di terze parti |
| JsonIO | RCE solo JDK |
| JYAML | RCE solo JDK |
| Kryo | RCE di terze parti |
| KryoAltStrategy | RCE solo JDK |
| Red5AMF(0|3) | RCE solo JDK |
| SnakeYAML | RCE solo JDK |
| XStream | RCE solo JDK |
| YAMLBeans | RCE di terze parti |