HTTP request smuggling — bu web-sayt bir yoki bir nechta foydalanuvchidan qabul qilingan HTTP so'rovlar ketma-ketligini qayta ishlash usuliga aralashish texnikasi. Request smuggling zaifliklari ko'pincha jiddiy — hujumchiga xavfsizlik nazoratini chetlab o'tishga, maxfiy ma'lumotga ruxsatsiz kirishga va boshqa foydalanuvchilarni bevosita buzishga imkon beradi.
Request smuggling asosan HTTP/1 so'rovlari bilan bog'liq. Lekin HTTP/2'ni qo'llab-quvvatlaydigan saytlar ham, back-end arxitekturasiga qarab, zaif bo'lishi mumkin.
Zamonaviy web-ilovalar foydalanuvchilar va yakuniy ilova mantig'i o'rtasida HTTP serverlar zanjirini ishlatadi. Foydalanuvchilar so'rovlarni front-end serverga (load balancer yoki reverse proxy) yuboradi, u esa so'rovlarni bir yoki bir nechta back-end serverga uzatadi.
Front-end so'rovlarni back-end'ga uzatganda, samaradorlik uchun bir nechta so'rovni bitta tarmoq ulanishi orqali yuboradi. So'rovlar ketma-ket yuboriladi va qabul qiluvchi server bir so'rov qayerda tugab, keyingisi qayerda boshlanishini aniqlashi kerak. Bu vaziyatda front-end va back-end so'rovlar chegaralari haqida kelishishi juda muhim.
Aks holda, hujumchi noaniq (ambiguous) so'rov yuborib, front-end va back-end uni turlicha talqin qilishiga erishishi mumkin. Hujumchi o'z so'rovining bir qismini back-end tomonidan keyingi so'rovning boshlanishi sifatida talqin qilinishiga sabab bo'ladi — bu request smuggling hujumi.
Ko'pchilik request smuggling zaifliklari HTTP/1 spetsifikatsiyasi so'rov qayerda tugashini ko'rsatishning ikki xil usulini bergani sababli yuzaga keladi: Content-Length va Transfer-Encoding header'lari. Content-Length xabar tanasi uzunligini baytlarda ko'rsatadi:
POST /search HTTP/1.1
Host: normal-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 11
q=smugglingTransfer-Encoding esa tananing chunked (bo'lakli) kodlashda ekanligini bildiradi — har bir bo'lak o'lchami (hex'da), so'ng bo'lak mazmuni. Xabar nol o'lchamli bo'lak bilan tugaydi:
POST /search HTTP/1.1
Host: normal-website.com
Transfer-Encoding: chunked
b
q=smuggling
0
Ikkala header ham bir so'rovda bo'lsa, spetsifikatsiya Content-Length'ni e'tiborsiz qoldirish kerak deydi. Bu bitta serverda yetarli, lekin ikki server zanjirlanganda muammo tug'diradi: ba'zi serverlar Transfer-Encoding'ni qo'llab-quvvatlamaydi, ba'zilarini esa header'ni biror tarzda obfuskatsiya qilib uni qayta ishlamaslikka majbur qilish mumkin.
Uchdan uchgacha (end-to-end) HTTP/2 ishlatadigan saytlar request smuggling'ga tabiiy immunitetga ega — HTTP/2 so'rov uzunligini aniqlashning yagona, mustahkam mexanizmini beradi. Lekin ko'p saytlar HTTP/2 front-end'ni faqat HTTP/1 back-end oldiga qo'yadi va so'rovlarni HTTP/1'ga tarjima qiladi (HTTP downgrading) — bu zaiflik keltirib chiqaradi.
Klassik hujumlar bir HTTP/1 so'roviga ham Content-Length, ham Transfer-Encoding header'ini joylab, front-end va back-end ularni turlicha qayta ishlashiga erishadi:
POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 13
Transfer-Encoding: chunked
0
SMUGGLEDFront-end Content-Length'ni ishlatib butun 13 baytni (SMUGGLED oxirigacha) uzatadi. Back-end Transfer-Encoding'ni ishlatib nol o'lchamli bo'lakni so'rov tugashi deb qabul qiladi va SMUGGLED ni keyingi so'rovning boshlanishi sifatida qoldiradi.
POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 3
Transfer-Encoding: chunked
8
SMUGGLED
0
Front-end Transfer-Encoding'ni ishlatib birinchi bo'lakni (8 bayt) qayta ishlaydi. Back-end esa Content-Length'ni (3 bayt) ishlatib, SMUGGLED dan boshlangan qismni keyingi so'rov sifatida qoldiradi.
Bu so'rovni Burp Repeater'da yuborish uchun Repeater menyusida "Update Content-Length" opsiyasini o'chirib qo'ying va oxirgi 0 dan keyin \r\n\r\n ketma-ketligini qo'shing.
Transfer-Encoding'ni obfuskatsiya qilishning cheksiz usullari bor. Faqat bitta server (front-end yoki back-end) qayta ishlaydigan, ikkinchisi e'tiborsiz qoldiradigan variantni topish kerak:
Transfer-Encoding: xchunked
Transfer-Encoding : chunked
Transfer-Encoding: chunked
X: X\nTransfer-Encoding: chunkedBatafsil: zaifliklarni topish, ekspluatatsiya qilish, ilg'or texnikalar va brauzerga asoslangan smuggling.