
Инструмент для эксплуатации уязвимостей десериализации в Java с генераторами полезных нагрузок для нескольких маршаллеров (Jackson, XStream, SnakeYAML) и косвенными ссылками JNDI для удалённого выполнения кода.
Если вы попали сюда из-за Log4Shell/CVE-2021-44228, возможно, вам стоит прочитать о векторах эксплуатации и затронутых версиях Java runtime: https://mbechler.github.io/2021/12/10/PSA_Log4Shell_JNDI_Injection/
Прошло более двух лет с тех пор, как Крис Фрохофф и Габриэль Лоуренс представили свои исследования уязвимостей десериализации объектов Java, которые в итоге привели к тому, что можно смело назвать самой большой волной ошибок удалённого выполнения кода в истории Java.
Исследования в этой области показали, что эти уязвимости не ограничиваются такими выразительными механизмами, как Java-сериализация или XStream, но некоторые из них могут быть применимы и к другим механизмам.
Эта статья представляет анализ, включая детали эксплуатации, различных Java-библиотек маршалинга с открытым исходным кодом, которые позволяют (или позволяли) выполнять анмаршалинг произвольных типов, предоставленных атакующим, и показывает, что независимо от того, как выполняется этот процесс и какие неявные ограничения действуют, он подвержен похожим техникам эксплуатации.
Полная статья находится в marshalsec.pdf
Вся информация и код предоставлены исключительно в образовательных целях и/или для тестирования ваших собственных систем на наличие этих уязвимостей.
Требуется Java 8. Сборка через maven mvn clean package -DskipTests. Запуск:
java -cp target/marshalsec-[VERSION]-SNAPSHOT-all.jar marshalsec.<Marshaller> [-a] [-v] [-t] [<gadget_type> [<arguments...>]]
где
Генераторы payload'ов для следующих маршалеров включены:
Предусловий нет.
Предусловия:
Загружаемый сервис в настоящее время жёстко задан как javax.script.ScriptEngineFactory.
Предусловия:
Предусловия:
java -cp target/marshalsec-[VERSION]-SNAPSHOT-all.jar marshalsec.jndi.(LDAP|RMI)RefServer <codebase>#<class> [<port>]
Существует несколько системных свойств, управляющих аргументами при запуске тестов (через maven или при использовании -a)
Тесты выполняются с установленным SecurityManager, который проверяет выполнение системных команд, а также выполнение кода из удалённых codebase. Для этого загружаемый класс должен инициировать какую-либо проверку security manager.
| Marshaller | Gadget Impact |
|---|
| BlazeDSAMF(0|3|X) | JDK only escalation to Java serialization various third party libraries RCEs |
| Hessian|Burlap | various third party RCEs |
| Castor | dependency library RCE |
| Jackson | possible JDK only RCE, various third party RCEs |
| Java | yet another third party RCE |
| JsonIO | JDK only RCE |
| JYAML | JDK only RCE |
| Kryo | third party RCEs |
| KryoAltStrategy | JDK only RCE |
| Red5AMF(0|3) | JDK only RCE |
| SnakeYAML | JDK only RCEs |
| XStream | JDK only RCEs |
| YAMLBeans | third party RCE |