ثغرة التلاعب في HAProxy's headers

News
اكتشاف ثغرة في HAProxy في الرابع عشر من الشهر الجاري لسنة 2023
Omnia
Feb. 16, 2023, 4 p.m.
omnia
ثغرة التلاعب في HAProxy's headers

و قبل البدء في التعرف على تفاصيل الثغره لنتعرف أولا ما هو ال HAProxy(High Availability Proxy) ؟

هو proxy مفتوح المصدر وserver software لموازنة التحميل. يوفر availability عالية في طبقه ال Network (TCP) , وطبقه ال Application(HTTP/S)، مما يحسن السرعة والأداء من خلال توزيع عبء العمل عبر العديد من الServers.

ثغرة HAProxy's headers 

تم العثور على ثغره اثناء ال processing لعناوين ال HAProxy الذي يتسبب في إسقاط HAProxy لمكون من مكونات العناوين المهمة مثل Connection و Content-Length و Transfer-Encoding و Host بعد معالجتها جزئيًا. يمكن استخدام طلب HTTP مصنوع بشكل ضار في smuggling attack طلب HTTP لتجاوز الfiltering والكشف بواسطة HAProxy.و تؤثر المشكلة على جميع الإصدارات بدرجات مختلفة

- تتأثر الإصدارات المدركة لـ HTX (2.0 في التهيئة الافتراضية وجميع الإصدارات أعلاه) في HTTP/1. HTTP/2 HTTP/3 يعانون أيضًا من الخطأ ولكن لا يحدث أي تحليل أو معالجة في العناويين المتساقطة بحيث يظل HAProxy متزامنًا بشكل صحيح مع الخادم (أي لا يوجد طلب smuggling attack هناك)

- الإصدارات غير HTX (1.9 وقبل، أو 2.0 في الوضع القديم) لن تسقط theader، ولكنها مع ذلك ستمرر الطلب الخاطئ كما هو إلى الserver. هذا يعني أنه في حين أن مثل هذه الإصدارات لن يتم إساءة استخدامها لمهاجمة server، إذا تم وضعها على الedge  فهي ليست كافية لحماية حالة HAProxy الداخلية أيضًا.

  • نظام التشغيل (OS): تعمل على نظام تشغيل Red Hat
  • الرقم التعريفي (CVE) للثغرة:  CVE-2023-25725
  • درجه خطورتها:  معتدل Moderate 
  • مدى شدة الثغرة بالنسبة لنظاط CVSSv3 تكون 7.5 
     

 

كيفية تجنب هذه الثغرة:

تم إصلاح المشكلة في جميع الإصدارات وجميع الأوضاع، وتم تحديث جميع الإصدارات فليس عليك إلا  اتباع التحديثات المصدرة المناسبة لإصدارك

بالنسبة لأولئك الذين لا يستطيعون التحديث لبعض الأسباب في الوقت الحالي، يمكننا تصميم حل بديل تم اختباره في جميع الإصدارات أعلاه وفي كلا الوضعين. يتمثل في إضافة قاعدة في كل exposed frontend، ويفضل أن يكون ذلك قبل بيانات "http- request 'الأخرى، والتي تكتشف الحالة الداخلية التي تنتج عن محاولة استغلال الخطأ:

http-request deny if { fc_http_major 1 } !{ req.body_size 0 } !{ req.hdr(content-length) -m found } !{ req.hdr(transfer-encoding) -m found } !{ method CONNECT }

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

وبهذا نكون تمكنا من التعرف على خبر وجود ثغره في HAProxy التي يمكنها التلاعب في عناوين ال HTTP  وإلى اللقاء في خبر جديد.

References:

Headers HTTP HAProxy CVE CVSS