دراسة حالة: تجاوز 159 قاعدة في جدار حماية التطبيقات بسمة XML واحدة
- Home
- المدونة
أنا جو. هذه مادة بحثية لا مهمة لعميل: تجاوزان اكتشفتهما في مجموعة قواعد OWASP الأساسية، وأبلغت بهما المشرفين، ونُشرا تحت المعرّفين CVE-2026-62971 وCVE-2026-33691. وكلاهما مُصلَح. وأكتبهما لأن المنهج الذي أوصل إليهما — أن تسأل عمّا لا يحلله المحرك أبدًا — ينتقل إلى أي تقنية ترشيح تملكها، لا إلى هذه وحدها.
-
جدار حماية التطبيقات مرشّح، لا سياج
تقريبًا كل مؤسسة أختبرها تشغّل جدار حماية لتطبيقات الويب، وتقريبًا كل واحدة تصفه بالطريقة نفسها: «نحن مغطّون». يفحص الجدار الأجزاء التي يعرف كيف يحللها من الطلب ويطابقها بأنماط. وكل ما لا يحلله غير مرئي له بالتعريف. فالسؤال المثير ليس أبدًا «أي القواعد مفعّلة» — بل «أي أجزاء من طلبي لا ينظر إليها المحرك قط؟». وهذا السؤال هو ما أنتج كلتا الثغرتين في هذه المادة.
-
النقطة العمياء: قيم سمات XML
مجموعة قواعد OWASP الأساسية هي الأوسع انتشارًا في العالم؛ فإن كنت تشغّل ModSecurity أو Coraza أو جدار حماية مُدارًا، فثمة احتمال كبير أنها تعمل تحته. وحين كانت تعالج أجسام XML، كانت تفحص نص العناصر لا قيم السمات. فالحمولة الموضوعة في سمة — رابط javascript: مثلًا — كانت تمرّ مباشرة، بينما تُحجب الحمولة نفسها في نص العنصر. كانت القواعد تعمل تمامًا كما كُتبت؛ لكنها ببساطة لم تُعرض عليها البيانات قط.
-
قياس الأمر كما ينبغي قبل الإبلاغ
التجاوز مجرد هامش حتى تستطيع تحديد مدى ما يغطيه. بنيت منصة اختبار تطلق مجموعة الحمولات نفسها على الموضعين — نص العنصر وقيمة السمة — عبر كل مستويات التشدد، ثم قارنت أي القواعد أُطلقت. وكان الجواب نحو 159 قاعدة عبر تسع عائلات قواعد، في كل مستويات التشدد، بما فيها عائلتا الحقن والبرمجة عبر المواقع اللتان يعتمد عليهما الناس أكثر من غيرهما. وذلك الرقم هو ما حوّل البلاغ من «حالة هامشية» إلى الثغرة CVE-2026-62971 بدرجة CVSS تبلغ 7.2.
-
أما الثانية فكانت مسافة واحدة
أنتجت العقلية نفسها نتيجة ثانية في قواعد رفع الملفات. فمجموعة القواعد تحجب الامتدادات الخطيرة بمطابقة نهاية اسم الملف، لكنها لم تكن توحّد المسافات قبل ذلك الفحص. فاسم ملف مكتوب هكذا «shell. php» — بمسافة بين النقطة والامتداد — كان يفشل في مطابقة النمط ويمرّ بسلاسة، بينما تقتطع أنظمة لاحقة كثيرة تلك المسافة بسرور فيعود اسمًا قابلًا للتنفيذ. حرف واحد، سُجّل تحت المعرّف CVE-2026-33691، وأُصلح في الإصدارين 3.3.9 و4.25.0.
-
الإصلاح في المنبع بدل الإصلاح محليًا
كان بوسعي كتابة قاعدة مخصصة لعميل واحد والمضي في طريقي. لكن الإبلاغ في المنبع لمشرفي مجموعة القواعد عنى أن كل نشر لمجموعة القواعد حصل على الإصلاح، لا المؤسسة التي وظّفتني وحدها. كان المشرفون سريعين ومحترفين، ونزلت الرقع في إصدارات موسومة، وصدرت الإرشادات بنطاقات إصدارات متأثرة واضحة. هكذا ينبغي أن يبدو العمل الأمني في المصادر المفتوحة، ولهذا أواصل إعادة نتائجي إلى المجتمع بدل اكتنازها.
-
ماذا يعني هذا لجدار حماية التطبيقات لديك
ثلاث خلاصات عملية. أولًا، ثبّت إصدار مجموعة قواعدك وتابعه كما تتابع اعتماديات تطبيقك — فجدار متأخر بعامين يشغّل قواعد لها تجاوزات معروفة. ثانيًا، اختبر الجدار كما يفعل المهاجم: الحمولة نفسها، بترميزات كثيرة ومواضع كثيرة، وسجّل أيها يُطلق فعلًا. ثالثًا، لا تدع الجدار يكون الضابط الوحيد أبدًا. فكلا هذين التجاوزين غير مؤذٍ أمام تطبيق يتحقق من مدخلاته بنفسه؛ وكلاهما كارثي أمام تطبيق أسند المهمة إلى غيره.
التعليقات (5)
-
waf_admin_priya قبل يومين ردكنا متأخرين بأربعة إصدارات فرعية في مجموعة القواعد ولم تكن لدينا عملية لتحديثها. هذه التدوينة بدأت ذلك النقاش داخليًا.
-
تلك أشيع نتيجة على الإطلاق. تُثبَّت مجموعات القواعد مرة واحدة ثم تُعامل كبنية تحتية لا كاعتمادية.
-
-
فكرة منصة الاختبار بـ«الحمولة نفسها في مواضع كثيرة» لا تُقدَّر حق قدرها. معظم الناس يغيّرون الترميز وينسون الموضع تمامًا.
-
الإبلاغ في المنبع بدل كتابة قاعدة محلية يستحق تقديرًا أكبر مما يناله. شكرًا لأنك فعلتها بهذه الطريقة.
-
أتفق. حصلنا على الإصلاح مجانًا لأن شخصًا آخر أدى العمل كما ينبغي.
-