متغير واحد خاطئ في سطر واحد في مكتبة XQUIC وQUIC وHTTP/3 الخاصة بـ Alibaba، يسمح لأي عميل بعيد بتعطيل الخادم من خلال موجة قصيرة من حركة المرور القانونية تمامًا. لا يوجد التصحيح.

كشف الباحث في FoxIO سيباستيان فيري عن الخلل في 8 يوليو وأطلق عليه اسم XRING. يقول إنه لا يحتاج إلى تسجيل دخول ولا إلى حزم مشوهة: حوالي 260 بايت من حركة مرور QPACK العادية تؤدي إلى تعطيل عملية الخادم.

XQUIC مفتوح المصدر، وبالتالي فإن الخطر لا يقتصر على Alibaba وحدها: حيث يتم كشف أي خادم يقوم بتضمينه وتقديم HTTP/3 بإعدادات QPACK الافتراضية. يتضمن ذلك Tengine، خادم الويب المستند إلى Nginx التابع لشركة Alibaba، والذي تقول FoxIO إنه يواجه السحابة الخاصة بالشركة وشبكة CDN على المواقع بما في ذلك Taobao وAlipay.

يتأثر كل إصدار حتى الإصدار 1.9.4، الأحدث. لا يوجد إصدار ثابت ولا CVE اعتبارًا من 10 يوليو. وحتى يتم حل المشكلة، يمكن للمشغلين تعيين SETTINGS_QPACK_MAX_TABLE_CAPACITY على 0، مما يؤدي إلى إيقاف تشغيل الجدول الديناميكي لـ QPACK، أو إسقاط دعم HTTP/3 بالكامل.

يكمن الخطأ في كيفية ضغط HTTP/3 للرؤوس. لتجنب إرسال نفس الرأس (على سبيل المثال، وكيل المستخدم) مرارًا وتكرارًا، يستخدم HTTP/3 QPACK. فهو يحتفظ بجدول مشترك يوجه العميل الخادم لبناءه وتغيير حجمه من خلال قناة تحكم مخصصة، وهي تدفق برنامج التشفير.

يقوم XQUIC بتخزين بايتات هذا الجدول في المخزن المؤقت الحلقي، وهو كتلة ثابتة من الذاكرة حيث تلتف البيانات من النهاية إلى البداية بمجرد تعبئتها.

عندما يطلب العميل توسيع الجدول، يقوم XQUIC بتخصيص مخزن مؤقت أكبر ونسخ البيانات القديمة عبره. تحتوي هذه النسخة على أربع حالات، اعتمادًا على ما إذا كانت البيانات تلتف في المخزن المؤقت القديم، أو في المخزن المؤقت الجديد، أو في كليهما، أو لا في أي منهما. في إحداها، يقوم الكود بتغيير حجم البيانات المتبقية مقابل سعة المخزن المؤقت الجديد الأكبر حجمًا بدلاً من القديم. إنه يبالغ بشكل سيء.

قم بتوسيع جدول بحجم 64 بايت مع وضع مؤشر الكتابة بالقرب من النهاية، وتغيير حجمه إلى 65، وتقرر XQUIC أن هناك 70 بايت خلفي للتحرك عندما يكون هناك 6 بايت بالفعل.

يتدفق هذا الرقم الخاطئ إلى نسخة الذاكرة. يأتي طول النسخة من طرح العدد الزائد من قيمة أصغر. نظرًا لأن هذا الطول عبارة عن size_t غير موقع، فإنه يتدفق ويلتف إلى عدد قريب من الحد الأقصى، ويتم تشغيل النسخة من نهاية الذاكرة.

في إصدار FoxIO المبني على Ubuntu 26.04، اكتشف _FORTIFY_SOURCE=2 الخاص بـ glibc الطول السيئ وأوقف العملية. وبدون هذا الفحص، ستكتب النسخة خارج الحدود، من المخزن المؤقت القديم بعد نهاية المخزن المؤقت الجديد. أظهر فيري حدوث انهيار لكنه لم يختبر ما إذا كان من الممكن استغلال هذا الفساد بشكل أكبر.

لا تخالف أي من القيم الموجودة في الهجوم قواعد QPACK. تعلن XQUIC عن حد جدول ديناميكي يبلغ 16 كيلو بايت بشكل افتراضي؛ تطلب الحمولة 64 بايت، ثم 65 بايت. يجب على العميل فقط دفع الجدول إلى التخطيط المغلف الدقيق الذي يصل إلى الفرع المعيب. تقول FoxIO إن الخطأ كان موجودًا في XQUIC منذ أول إصدار عام لها في يناير 2022، وتم الإعلان عن إثبات المفهوم.

XRING هو الأحدث في سلسلة من الأعطال عن بعد في مجموعات HTTP/2 وHTTP/3. قبل ثلاثة أسابيع، أبلغت THN عن استخدام بعد الاستخدام مجانًا في وحدة HTTP/3 الخاصة بـ NGINX (CVE-2026-42530) والتي يمكن للعميل البعيد غير المصادق عليه الوصول إليها من خلال نفس تيار تشفير QPACK الذي يسيء استخدام XRING، وهي فئة أخطاء مختلفة على نفس سطح الهجوم.

في يونيو، تسببت قنبلة HTTP/2 الخاصة بـ Calif في رفض الخدمة عن بُعد ضد Nginx وApache وIIS وEnvoy من خلال إساءة استخدام HPACK وضغط رأس HTTP/2 والإصدار السابق لـ QPACK.

في فبراير، قام HAProxy بتصحيح اثنين من أعطال QUIC، أحدهما تدفق عدد صحيح أثناء التحقق من صحة الرمز المميز، وهو نفس النوع من الأخطاء الموجودة خلف XRING، على الرغم من أنه يحتاج إلى حزمة مشوهة حيث لا يحتاج XRING إلى أي حزمة. هذا الاختلاف هو بيت القصيد: إدخال قانوني، وقسيمة حسابية واحدة، وخادم ميت.

أظهر FoxIO حدوث عطل، وليس تنفيذ تعليمات برمجية، ولم يبلغ عن أي استغلال في البرية. وتقول إنها أرسلت بريدًا إلكترونيًا إلى علي بابا في 7 أبريل من خلال السياسة الأمنية للمشروع، والتي وعدت بالرد في غضون ثلاثة أيام عمل، ثم تابعت أربع مرات أخرى حتى 9 مايو دون إجابة قبل نشرها للعامة.

سألت Hacker News شركة Alibaba عما إذا كان هناك إصلاح ومكافحة التطرف العنيف قادمان، وما إذا كانت محاولات الكشف الخمس التي قامت بها FoxIO قد وصلت إلى فريقها الأمني. لقد سألت FoxIO عما إذا كان قد تم استغلال الخلل في البرية وما إذا كان من الممكن دفع الكتابة الكومة الأساسية بعد التعطل. سيتم تحديث القصة مع أي رد.

شاركها.
اترك تعليقاً