در این پست میخوایم HTTP Requests Smuggling رو بررسی کنیم، سناریویی که وقتی Proxy و backend با هم اختلاف دارن پیش میاد.
بر خلاف xss یا sql injection که معمولا در خود نرم افزار اتفاق میوفتن، در requests smuggling مشکل از اختلاف در نحوه parse کردن درخواست بین reverse proxy و backend به وجود میاد.
اگر frontend و backend روی پایان درخواست هم نظر نباشن، مهاجم میتونه داخل یک connection دو درخواست رو ارسال کنه، که یکی از اونها قاچاقی رد شده.
این یعنی :
• بایپس کردن Web Application Firewall یا WAF
• سناریو cache poisoning
• سناریو session hijacking
• حتی سناریو account takeover
چرا همچین اتفاقی میوفته ؟ فرض کنید معماری شما به این شکل باشه :
1. Client
2. Nginx
3. HAProxy
4. Apache
5. Application
هر کدوم این مراحل parser اختصاصی خودشونو دارن، اگر یکیشون تفسیر متفاوتی از header ها داشته باشه smuggling شکل میگیره.
حالت اول CL.TE
در این حالت frontend فقط مقدار Content-Length رو معتبر میدونه، اما backend بر اساس Transfer-Encoding: chunked درخواست و پراسس میکنه.
مثلا :
POST / HTTP/1.1
Host: target.com
Content-Length: 6
Transfer-Encoding: chunked
0
GET /admin HTTP/1.1
Host: target.com
در اینجا frontend فکر میکنه درخواست بعد از ۶ بایت تموم شده ولی backend بعد دیدن chunked درخواست دوم رو هم پردازش میکنه.
حالت دوم TE.CL
دقیقا برعکس حالت قبل، frontend از Transfer-Encoding استفاده میکنه و backend هم از Content-Length.
حالت سوم TE.TE
یعنی هر دو سمت از Transfer-Encoding استفاده میکنن، ولی یکی header رو قبول میکنه و اون یکی نه.
یا یکی فقط chunked رو معتبر میدونه ولی اون یکی مقادیر غیراستاندارد رو هم قبول داره.
مثلا :
Transfer-Encoding : chunked
Transfer-Encoding: chunked, gzip
Transfer-Encoding: xchunked
Transfer-Encoding: chunked;
سناریو Smuggling در HTTP/2
خیلیا تصور میکنن HTTP/2 این مشکلو حل کرده، ولی در اکثر زیر ساخت ها reverse proxy درخواست HTTP/2 رو به HTTP/1 تبدیل میکنه که در همین مرحله ممکنه اون اختلاف نظر تو parsing پیش بیاد.
نمونه آسیب پذیری ها :
• H2.CL
• H2.TE
• HTTP/2 Desync
برای تست این آسیب پذیری هم میتونید از این پروژه استفاده کنید :
https://github.com/defparam/smuggler
از راه های مقابله با این سناریو هم میشه به این موارد اشاره کرد :
• حذف درخواست هایی که همزمان دارای CL و TE هستن ( استاندارد رایج )
• بروزرسانی reverse proxy ها
• غیرفعال کردن connection reuse در مسیر های حساس
• انجام تست دوره ای با ابزار های smuggler مثل ابزاری که بهش اشاره شد
و ...
@Ahura_Rahmani | #Ahur4 #PenetrationTesting #CyberSecurity #Smuggling
1.3K ·