Исследование уязвимости десериализации Apache Dubbo
Этот репозиторий содержит исследовательские материалы, код доказательства концепции и инструменты эксплуатации, связанные с уязвимостями десериализации Apache Dubbo, в первую очередь с CVE-2020-1948.
Структура репозитория
Директории
- Hessian-Deserialize-RCE-master: Исследование и методы эксплуатации уязвимостей десериализации Hessian в Dubbo
- JNDI-Injection-Exploit-master: Фреймворк эксплуатации JNDI-инъекций для атак на сервисы Dubbo
- dubbo-dubbo-2.7.5: Исходный код Apache Dubbo 2.7.5 для анализа уязвимости
- dubbo-exp-master: Расширенный фреймворк эксплуатации для уязвимостей Dubbo
- dubbo-samples-master: Примеры приложений Dubbo для тестирования и демонстрации
- marshalsec-master: Инструменты для тестирования уязвимостей маршалинга/демаршалинга
Файлы
- dubboExp.py: Скрипт эксплуатации на Python для CVE-2020-1948
- dubboPoc.py: Скрипт доказательства концепции для проверки существования уязвимости
- payload.ser: Сериализованная полезная нагрузка Java для эксплуатации
- ysoserial.jar: Инструмент для генерации полезной нагрузки десериализации Java
Обзор уязвимости
Версии Apache Dubbo до 2.7.8, 2.6.9 и 2.5.10 уязвимы к атаке удаленного выполнения кода (CVE-2020-1948) из-за небезопасной десериализации. Уязвимость затрагивает компонент Dubbo Provider, который использует нативную сериализацию Java без надлежащей проверки.
Технические детали
Эта уязвимость может быть использована через несколько векторов:
- Hessian Deserialization: Эксплуатация реализации протокола сериализации Hessian
- JNDI Injection: Использование методов JNDI-инъекций для достижения удаленного выполнения кода
- Java Serialization: Использование традиционных атак десериализации Java с цепочками гаджетов
Использование
Настройка уязвимой среды
# Clone and build a vulnerable Dubbo version
cd dubbo-dubbo-2.7.5
mvn clean package
Проверка уязвимости
# Run the proof of concept
python dubboPoc.py -t <target_ip> -p <target_port>
Эксплуатация
# Run the exploit
python dubboExp.py -t <target_ip> -p <target_port> -c "command_to_execute"
Генерация пользовательской полезной нагрузки
Вы можете использовать ysoserial.jar для генерации пользовательских полезных нагрузок:
java -jar ysoserial.jar CommonsCollections1 "command_to_execute" > payload.ser
Меры защиты
Для защиты от этих уязвимостей:
- Обновитесь до Apache Dubbo 2.7.8+, 2.6.9+ или 2.5.10+
- Избегайте использования нативной сериализации Java
- Внедрите надлежащую проверку входных данных и фильтрацию десериализации
- Рассмотрите возможность использования альтернативных протоколов сериализации с надлежащими средствами безопасности
Ссылки
Отказ от ответственности
Этот репозиторий предназначен только для исследовательских и образовательных целей в области безопасности. Предоставленный код и инструменты следует использовать только против систем, на тестирование которых у вас есть разрешение. Любое неправильное использование этой информации не является ответственностью владельца репозитория.