مدت زمان مطالعه:
0

حمله HTTP/2 Bomb با شناسه CVE-2026-49975 یکی از نمونههای مهم حملات Denial of Service روی پیادهسازیهای HTTP/2 است. اهمیت این حمله در این است که الزاماً شبیه DDoS حجمی کلاسیک نیست؛ یعنی مهاجم برای ایجاد اختلال جدی، همیشه به Botnet بزرگ یا پهنای باند بسیار بالا نیاز ندارد.
در گزارشهای منتشرشده توسط Calif و Imperva، این حمله با ترکیب یک الگوی سوءاستفاده از HPACK Header Compression و یک نگهداشتن اتصال به سبک Slowloris توضیح داده شده است. نتیجه این ترکیب میتواند مصرف شدید Memory در وبسرور و از دسترس خارج شدن سرویس باشد.
این مقاله بر اساس FortiWeb 7.6 نوشته شده است و تمرکز آن روی این است که ادمین بداند FortiWeb در نقش WAF و Reverse Proxy چطور میتواند ریسک این نوع حمله را با HTTP Protocol Constraints، DoS Protection، کنترل HTTP/2 و تنظیم درست Server Policy کاهش دهد.
مروری بر این مقاله
HTTP/2 Bomb یک حمله Resource Exhaustion است که روی نحوه مدیریت Header Compression، Streamها و Flow Control در HTTP/2 فشار ایجاد میکند. برخلاف حملات حجمی، هدف اصلی این حمله الزاماً پر کردن پهنای باند نیست؛ هدف این است که سرور مجبور شود برای درخواستهای ظاهراً معتبر، Memory و ساختارهای داخلی زیادی اختصاص دهد و نتواند آنها را سریع آزاد کند.
در گزارش Calif، این حمله روی وبسرورهای معروفی مثل nginx، Apache httpd، Microsoft IIS، Envoy و Cloudflare Pingora بررسی شده است. در پایگاه NVD، CVE-2026-49975 برای Apache HTTP Server ثبت شده و ضعف آن به مصرف Memory از طریق درخواستهای مخرب HTTP نسبت داده شده است.
خطر اصلی HTTP/2 Bomb در نسبت نامتوازن هزینه مهاجم و هزینه سرور است. مهاجم میتواند با داده نسبتاً کم روی Wire، کاری کند که سرور Memory بسیار بیشتری برای نگهداری Header، Stream و ساختارهای داخلی اختصاص دهد. اگر این Memory آزاد نشود یا دیر آزاد شود، سرور بهجای پاسخدهی به کاربران واقعی، درگیر نگهداری اتصالهای مخرب میشود.
| ویژگی حمله | اثر عملیاتی |
|---|---|
| نیاز کمتر به پهنای باند نسبت به DDoS حجمی | ممکن است با یک Client یا تعداد کمی Client هم اثر جدی ایجاد شود. |
| استفاده از رفتارهای معتبر HTTP/2 | تشخیص آن فقط با نگاه کردن به Payload معمولی وب سختتر است. |
| درگیر کردن HPACK و Flow Control | مصرف Memory، افزایش Latency و اختلال در پاسخدهی سرویس. |
| اثر روی وبسرورهای معروف | ریسک برای سرویسهای عمومی که HTTP/2 را با تنظیمات پیشفرض فعال کردهاند. |
در HTTP/2، برای کاهش حجم Headerها از HPACK استفاده میشود. HPACK به دو سمت ارتباط اجازه میدهد از یک Dynamic Table برای فشردهسازی و ارجاع دوباره به Headerها استفاده کنند. در حالت عادی این قابلیت باعث بهبود Performance میشود؛ اما اگر محدودیتهای مناسب روی Header Table، تعداد Headerها، تعداد Streamها و اندازه Frameها اعمال نشود، همین قابلیت میتواند تبدیل به نقطه فشار شود.
بخش دوم حمله به Flow Control مربوط است. در HTTP/2، Client میتواند با Window Size کوچک یا صفر، ارسال Response از سمت سرور را محدود کند. اگر سرور در این وضعیت منابع را نگه دارد و اتصال هم باز بماند، Memory آزاد نمیشود و فشار روی Backend ادامه پیدا میکند.
در بهترین سناریو، FortiWeb باید در حالت Reverse Proxy جلوی Backend قرار بگیرد؛ یعنی Client به FortiWeb وصل شود و FortiWeb بعد از بررسی امنیتی، درخواست را به Server Pool ارسال کند. در این حالت FortiWeb میتواند قبل از رسیدن ترافیک به وبسرور، بخشی از رفتارهای ناسالم HTTP/2 را کنترل کند.
اگر FortiWeb فقط بهصورت محدود و بدون Web Protection Profile مناسب استفاده شود، ممکن است صرفاً نقش انتشار سرویس را داشته باشد و از همه قابلیتهای کنترلی آن استفاده نشود. برای سناریوی HTTP/2 Bomb، باید Server Policy به یک Web Protection Profile وصل باشد که در آن HTTP Protocol Constraints و DoS Protection بهدرستی تنظیم شدهاند.
راهکار FortiWeb برای این سناریو یک دکمه جادویی با نام HTTP/2 Bomb نیست؛ بلکه باید چند لایه کنترلی با هم فعال شوند. مهمترین بخش، کنترل رفتار HTTP/2 از طریق HTTP Protocol Constraints است. در کنار آن، DoS Protection، محدودسازی Rate، مانیتورینگ لاگ و Hardening سمت Backend هم لازم است.
| لایه دفاعی | قابلیت FortiWeb | اثر روی ریسک HTTP/2 Bomb |
|---|---|---|
| کنترل پروتکل | HTTP Protocol Constraints | محدود کردن Header Compression Table، Streamها، Frame Size و Header List Size. |
| کنترل حجم و نرخ درخواست | HTTP Access Limit / HTTP Flood / DoS Protection | کاهش فشار ناشی از درخواستهای زیاد یا اتصالهای مشکوک. |
| کنترل مسیر انتشار | Server Policy و Server Pool | قرار گرفتن FortiWeb قبل از Backend و جلوگیری از رسیدن رفتار مخرب به وبسرور. |
| کنترل نسخه پروتکل | Service و تنظیمات HTTP/HTTPS | غیرفعال کردن HTTP/2 در مسیرهایی که واقعاً به آن نیاز ندارند. |
| مانیتورینگ | Attack Log، Traffic Log، Event Log و FortiAnalyzer | تشخیص افزایش خطا، Deny، مصرف منابع یا رفتار غیرعادی Clientها. |
در FortiWeb 7.6، بخش HTTP/HTTPS Protocol Constraints برای محدود کردن رفتارهای غیرعادی در سطح پروتکل استفاده میشود. Fortinet برای HTTP/2 فیلدهایی مثل Header Compression Table Size، Number of Concurrent Streams، Initial Window Size، Frame Size، Header List Size، HTTP/2 Max Requests، HTTP/2 RST Stream و HTTP/2 RST Stream Frequency را مستند کرده است.
مسیر کلی در GUI:
بعد از ساخت یا ویرایش Constraint، باید آن را داخل Web Protection Profile متصل به Server Policy اعمال کنید:
| فیلد | کاربرد | پیشنهاد عملیاتی |
|---|---|---|
| Header Compression Table Size | کنترل اندازه Header Compression Table در HTTP/2 | برای سرویسهای عمومی، مقدار را بیدلیل بالا نبرید. ابتدا با مقدار محافظهکارانه تست کنید و در صورت نیاز افزایش دهید. |
| Number of Concurrent Streams | کنترل تعداد Streamهای همزمان در یک اتصال HTTP/2 | برای Portal، Login و APIهای حساس، عدد پایینتر از سرویسهای عمومی پرترافیک انتخاب شود. |
| Initial Window Size | کنترل Window اولیه برای Flow Control | افزایش بیدلیل این مقدار میتواند مصرف منابع را بالا ببرد. قبل از تغییر، رفتار نرمافزار بررسی شود. |
| Frame Size | کنترل حداکثر اندازه Payload در Frameهای HTTP/2 | در بیشتر سناریوها نیازی به افزایش مقدار پیشفرض نیست. |
| Header List Size | کنترل اندازه کلی Headerهای پذیرفتهشده | اگر برنامه Cookieهای بزرگ دارد، قبل از Deny مستقیم، چند روز در حالت Alert بررسی شود. |
| HTTP/2 Max Requests | کنترل تعداد درخواستها در یک Connection HTTP/2 | برای کاهش سوءاستفاده از اتصالهای طولانی، مقدار منطقی و متناسب با سرویس تنظیم شود. |
| HTTP/2 RST Stream / RST Stream Frequency | کنترل رفتار غیرعادی مربوط به Reset Stream | برای تشخیص رفتارهای خودکار و غیرعادی روی HTTP/2 مفید است. |
مقادیر زیر نسخه قطعی برای همه سازمانها نیستند؛ اما بهعنوان نقطه شروع برای سرویسهای عمومی میتوانند در تست اولیه بررسی شوند. اگر برنامه Header یا Cookie سنگین دارد، قبل از Deny باید رفتار واقعی کاربران بررسی شود.
| مورد | نقطه شروع پیشنهادی | توضیح |
|---|---|---|
| Header Compression Table Size | 4096 تا 8192 | برای کاهش سطح سوءاستفاده از HPACK، بیدلیل بالا تنظیم نشود. |
| Number of Concurrent Streams | 50 تا 100 | برای API و Login میتواند پایینتر باشد؛ برای سرویسهای پرترافیک باید تست شود. |
| Initial Window Size | Default یا پایینتر بر اساس تست | افزایش این مقدار معمولاً برای امنیت بهتر نیست و باید دلیل فنی داشته باشد. |
| Frame Size | Default | در حالت عادی افزایش داده نشود. |
| Header List Size | 16384 تا 65536 | به حجم Cookie و Header برنامه بستگی دارد. |
| HTTP/2 Max Requests | 500 تا 1000 | برای اتصالهای طولانی و پرتعداد، مقدار متناسب با سرویس تعیین شود. |
HTTP Protocol Constraints لایه اصلی کنترل رفتار HTTP/2 است، اما برای کاهش فشار کلی روی سرویس، DoS Protection هم باید بررسی شود. FortiWeb در بخش DoS Protection میتواند HTTP Flood، HTTP Access Limit، TCP Flood و سیاستهای مرتبط با Malicious IP را اعمال کند. این قابلیتها بهتنهایی جایگزین Patch و کنترل HTTP/2 نیستند، اما میتوانند شدت اثر حمله یا رفتارهای مشابه را کاهش دهند.
در این سناریو FortiWeb باید بهعنوان Reverse Proxy جلوی Backend قرار بگیرد. HTTP/2 روی سمت Client فقط در صورتی فعال باشد که واقعاً نیاز دارید. سمت Backend بهتر است Patch شود و اگر نیاز فنی وجود ندارد، ارتباط FortiWeb تا Backend روی HTTP/1.1 نگه داشته شود.
در APIها، کاهش بیش از حد Header List Size یا Concurrent Streams ممکن است باعث False Positive شود. در این حالت باید از Traffic Log و Attack Log برای پیدا کردن الگوی واقعی Headerها استفاده شود.
اگر برنامه شما با HTTP/1.1 بدون مشکل کار میکند و HTTP/2 مزیت عملیاتی مشخصی برای آن ندارد، سادهترین کاهش ریسک این است که HTTP/2 را در مسیر انتشار سرویس غیرفعال کنید. این کار مخصوصاً برای سرویسهای قدیمی، سامانههای داخلی و برنامههایی که Header پیچیده ندارند منطقی است.
| مورد | وضعیت مطلوب |
|---|---|
| شناسایی سرویسهای HTTP/2 | تمام Server Policyهایی که HTTP/2 روی آنها فعال است مشخص شده باشند. |
| Patch Backend | nginx، Apache، IIS، Envoy یا Reverse Proxy پشت FortiWeb به نسخه امنتر بهروزرسانی شده باشد. |
| HTTP Protocol Constraints | برای Server Policyهای حساس، Constraint مناسب HTTP/2 فعال و به Web Protection Profile متصل شده باشد. |
| Action | ابتدا Alert، سپس بعد از بررسی False Positive روی Alert & Deny تنظیم شود. |
| DoS Protection | HTTP Flood و HTTP Access Limit با Baseline واقعی سرویس تنظیم شده باشند. |
| Backend Protocol | اگر HTTP/2 سمت Backend نیاز نیست، ارتباط FortiWeb تا Backend با HTTP/1.1 بررسی شود. |
| مانیتورینگ Memory | مصرف Memory و وضعیت Processهای Backend و FortiWeb مانیتور شود. |
| لاگ و FortiAnalyzer | Attack Log، Traffic Log و Event Log به FortiAnalyzer ارسال و قابل جستجو باشند. |