
CVE-2026-56096 के लिए प्रूफ ऑफ कॉन्सेप्ट और तकनीकी राइट-अप, जो TYPO3 EXT:solr में एक ब्लाइंड Solr क्वेरी इंजेक्शन है जो अनऑथेंटिकेटेड फील्ड एन्यूमरेशन और डेटा एक्सट्रैक्शन को सक्षम बनाता है।
आधिकारिक TYPO3 Apache Solr एक्सटेंशन (EXT:solr / apache-solr-for-typo3/solr) में एक आर्किटेक्चरल सुरक्षा भेद्यता की खोज की गई थी। यह समस्या अनधिकृत रिमोट हमलावरों को सर्च पैरामीटर tx_solr[q] के माध्यम से मनमाना Solr/Lucene क्वेरी सिंटैक्स इंजेक्ट करने की अनुमति देती है, जिससे सर्च इंडेक्स से अनधिकृत ब्लाइंड फ़ील्ड एन्यूमरेशन और पूर्ण मेटाडेटा एक्सट्रैक्शन संभव हो जाता है।
EXT:solr (सर्च पैरामीटर: tx_solr[q])CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:NEXT:solr एक्सटेंशन tx_solr[q] पैरामीटर के माध्यम से उपयोगकर्ता-प्रदत्त सर्च शब्द स्वीकार करता है और उन्हें Apache Solr इंजन तक अग्रेषित करता है। डिज़ाइन के अनुसार, एक्सटेंशन विशिष्ट क्वेरी ऑपरेटरों—जैसे वाइल्डकार्ड (*), एकल-वर्ण वाइल्डकार्ड (?), फ़ील्ड सेलेक्टर (:) और रेंज क्वेरी ([a TO z])—को अनुमति देता है ताकि फेसेटेड फ़िल्टरिंग जैसी वैध कार्यक्षमता समर्थित हो सके।
चूँकि ये वर्ण किसी प्रवर्तनीय व्हाइटलिस्ट या क्वेरी एब्स्ट्रैक्शन लेयर के बिना सीधे बैकएंड क्वेरी निर्माण में पास किए जाते थे, एक हमलावर इच्छित सर्च सीमाओं से बाहर निकलने के लिए फ़ील्ड-विशिष्ट सिंटैक्स प्रदान कर सकता है। यह अनधिकृत उपयोगकर्ताओं को सीधे आंतरिक Solr फ़ील्ड्स को क्वेरी करने और बूलियन-आधारित ब्लाइंड तकनीकों का उपयोग करके इंडेक्स डेटा निकालने की अनुमति देता है।
field:* के माध्यम से फ़ील्ड एन्यूमरेशनकिसी मनमाने या अनुमानित फ़ील्ड नाम में वाइल्डकार्ड जोड़कर, एक हमलावर यह सत्यापित कर सकता है कि फ़ील्ड स्कीमा में मौजूद है या नहीं:
GET /search?tx_solr[q]=siteHash:* HTTP/1.1
Host: target.example.com
यदि फ़ील्ड मौजूद है, तो Solr सभी मेल खाते रिकॉर्ड्स में क्वेरी को प्रोसेस करता है (अक्सर अलग-अलग रिस्पॉन्स कोड या वॉल्यूम-संबंधित व्यवहारों को ट्रिगर करता है), जिससे स्वचालित वर्डलिस्ट-आधारित फ़ील्ड एन्यूमरेशन संभव हो जाता है।
हमलावर बूलियन इन्फ़रेंस का उपयोग करके संवेदनशील फ़ील्ड मानों को अक्षर-दर-अक्षर निकाल सकते हैं:
GET /search?tx_solr[q]=siteHash:a* HTTP/1.1 --> Returns search hits (Value begins with 'a')
GET /search?tx_solr[q]=siteHash:b* HTTP/1.1 --> "Nothing found" (Value does not begin with 'b')
? ऑपरेटर के माध्यम से लंबाई का पता लगानाएकल-वर्ण वाइल्डकार्ड ऑपरेटर (?) वर्ण पुनरावृत्ति शुरू करने से पहले संग्रहीत स्ट्रिंग की सटीक लंबाई निर्धारित कर सकता है:
GET /search?tx_solr[q]=siteHash:????????????* HTTP/1.1 (Checks for 12+ characters)
GET /search?tx_solr[q]=siteHash:?????????????* HTTP/1.1 (Checks for 13+ characters)
[a TO z])रेंज क्वेरीज़ प्रारंभिक अक्षर पर बाइनरी-सर्च निष्कर्षण की अनुमति देती हैं, जिससे प्रति अक्षर स्थिति में आवश्यक अनुरोधों की संख्या 26 से घटकर ~5 रह जाती है:
GET /search?tx_solr[q]=siteHash:[a TO m] HTTP/1.1 --> Determines if character falls within 'a'-'m'
GET /search?tx_solr[q]=siteHash:[n TO z] HTTP/1.1 --> Determines if character falls within 'n'-'z'
लंबाई पहचान, रेंज क्वेरीज़ और प्रीफ़िक्स वाइल्डकार्ड्स को मिलाकर न्यूनतम अनुरोध फ़ुटप्रिंट के साथ पूर्ण फ़ील्ड निष्कर्षण संभव होता है।
ऊपर उल्लिखित तकनीकों का उपयोग करके ब्लाइंड निष्कर्षण प्रदर्शित करने के लिए एक स्वचालित सत्यापन स्क्रिप्ट (poc.py) प्रदान की गई है।
python3 poc.py -u "https://target.example.com/?L=0&id=1" -f "someField"
-u, --url: TYPO3 सर्च एंडपॉइंट की ओर इंगित लक्ष्य URL।
-f, --field: प्रगणना/निष्कर्षण के लिए स्कीमा फ़ील्ड नाम (जैसे, appKey, siteHash)।
-c, --cookies: (वैकल्पिक) सत्र कुकीज़ यदि प्रमाणीकरण/WAF बायपास सत्यापन आवश्यक हो।
-o, --output: खोजे गए प्रीफ़िक्स संग्रहीत करने के लिए आउटपुट फ़ाइल (डिफ़ॉल्ट: validated_fields.txt)।
EXT:solr सर्च एंडपॉइंट का उपयोग करने वाले सभी डिफ़ॉल्ट इंस्टॉलेशन प्रभावित थे।वैश्विक कैरेक्टर एस्केपिंग अपर्याप्त है क्योंकि * और : जैसे ऑपरेटर इच्छित सर्च सुविधाओं के रूप में कार्य करते हैं। उपचार के लिए एक एप्लिकेशन-लेयर व्हाइटलिस्ट और पार्सिंग मॉडल आवश्यक है:
[email protected]) को औपचारिक भेद्यता रिपोर्ट प्रस्तुत की गई।