هجوم ReDoS عبر ترويسة Cache-Control في Symfony وLaravel

أثبت الباحث Martino Spagnuolo كيف يمكن استغلال تعبير نمطي في symfony/http-foundation لاستنزاف موارد تطبيقات PHP المبنية على Symfony وLaravel وDrupal ومنصات أخرى. يمكن استغلال الثغرة CVE-2026-108082 دون مصادقة: يحتاج المهاجم فقط إلى إرسال طلب HTTP عادي بترويسة مصممة خصيصًا. يمكن لطلب واحد أن يُشغل نواة CPU لعدة ثوانٍ، بينما يمكن لطلبات متزامنة متعددة أن تجعل التطبيق غير متاح.
يكمن السبب الجذري في HeaderUtils::split()، التي تحلل قيم ترويسات HTTP. يسمح جزء التعبير النمطي [^",=]+ بوجود مسافات داخل الرمز، بينما يمنع lookbehind السلبي (?<!\s) انتهاء المطابقة بحرف مسافة بيضاء. سلسلة تتكون من a متبوعة بـ 17 مسافة و,x تجبر محرك التعبير النمطي على استكشاف نحو 2^17 طريقة لتقسيم المسافات قبل رفض المطابقة. في اختبار واقعي، استغرق طلب واحد 12.7 ثانية للمعالجة.
يمكن إثارة الثغرة عبر ترويسة Cache-Control، التي يحللها Symfony تلقائيًا عند إنشاء كائن الطلب، قبل التوجيه والمصادقة. يشمل ذلك الطلبات التي تتلقى في النهاية استجابات 404 أو 401. يحلل Laravel الترويسات ثلاث مرات أثناء تهيئة الطلب، مما يزيد من عبء المعالجة. خلف nginx، يمكن دمج عدة ترويسات Cache-Control في قيمة واحدة دون إعادة التحقق من الطول المجمع. في اختبار معملي باستخدام Laravel خلف nginx، أدت أربع ترويسات بحجم يقارب 8 كيلوبايت لكل منها إلى زمن معالجة طلب يقارب تسع ثوانٍ. تسبب اختبار يضم 100 طلب بمستوى تزامن ثمانية في زيادة أزمنة الاستجابة والمهلات وأخطاء 504.
تؤثر الثغرة في symfony/http-foundation من الإصدار 4.1 حتى إصلاحات الأمان في أكتوبر 2026. الإصدارات المصححة الموصى بها هي 6.4.48 و7.4.21 و8.1.9، حسب الفرع المدعوم. عالجت الإصلاحات الأولية — 5.4.54 و6.4.46 و7.4.19 و8.1.7 — مشكلة ReDoS لكنها أدخلت تراجعات في وظائف أخرى. لم يعد الفرع 5.4 مدعومًا، ولا يحدد الاستشاري إصدارًا مصححًا لاحقًا لذلك الفرع.
كإجراء تخفيف مؤقت، يمكن للمسؤولين رفض الطلبات ذات ترويسات Cache-Control الطويلة بشكل غير معتاد، على سبيل المثال باستخدام قاعدة WAF تحد من طولها إلى 50–100 بايت، كما اقترح الباحث.
الثغرات
الباحثون
المورّدون
المنتجات