یک اشتباه وحشتناک در یک خط کد از کتابخانه XQUIC شرکت علی‌بابا، به هر مهاجم راه‌دوری این امکان را می‌دهد که سرورهای مبتنی بر پروتکل HTTP/3 را تنها با ارسال 260 بایت ترافیک کاملاً معتبر، به حالت قطع درآورد. تا امروز (10 ژوئیه) هیچ اصلاحیه یا کد CVEای برای این حفره منتشر نشده است. سباستین فری، محقق امنیت در شرکت FoxIO، این باگ را XRING نامیده و تأکید می‌کند که حمل به این حفره هیچ‌گاه نیازی به احراز هویت یا ساخت بسته‌های مخرب ندارد.

جزئیات فنی حمله و مکانیزم کرش

هسته اصلی مشکل در نحوه مدیریت حافظه توسط پشته QPACK مربوط به HTTP/3 نهفته است. این پروتکل برای کاهش حجم ترافیک، هدرها را در یک جدول پویای اشتراکی فشرده می‌کند. وقتی کلاینت درخواست افزایش ظرفیت این جدول را می‌دهد، XQUIC یک بلوک حافظه قدیمی را به یک بلوک جدید و بزرگ‌تر منتقل می‌کند. در این فرآیند، کد محاسبه‌گر به جای بررسی ظرفیت بافر قدیمی، اندازه داده‌های باقی‌مانده را با ظرفیت بافر جدید مقایسه می‌کند. این خطای منطقی باعث می‌شود تعداد بایت‌های مورد نیاز جهت کپی، به‌طور چشمگیری بزرگ‌تر از واقعیت برآورد شود.

وقتی این عدد بزرگ به‌عنوان طول عملیات کپی حافظه استفاده می‌شود، از آنجا که نوع داده size_t (بدون علامت) است، دچار زیرسرریز (Underflow) شده و به عددی نزدیک به حداکثر مقدار مجاز تبدیل می‌گردد. در نتیجه، عملیات کپی فراتر از مرزهای تعیین‌شده حافظه انجام می‌شود و فرآیند سرور با خطای جدی مواجه، از کار می‌افتد. در محیط‌های تستی FoxIO، مکانیزم حفاظتی _FORTIFY_SOURCE=2 در گنو سی‌لاین‌برایر (glibc) موفق شد این رفتار غیرمجاز را شناسایی و فرآیند را متوقف کند. بدون این لایه امنیتی، انتشار داده در حافظه قطعاً منجر به کرش یا آسیب‌پذیری‌های پیچیده‌تر خواهد شد.

دامنه خطر و سرویس‌های تحت تأثیر

از آنجا که XQUIC یک پروژه متن‌باز است، خطر محدود به سرورهای شخصی علی‌بابا نمی‌شود. هر سرویس‌دهنده‌ای که این کتابخانه را بومی‌سازی کرده و HTTP/3 را با تنظیمات پیش‌فرض QPACK ارائه دهد، در معرض این تهدید است. گزارش‌های FoxIO نشان می‌دهد که وب‌سرور Tengine علی‌بابا، که زیرساخت ابری و شبکه توزیع محتوا (CDN) این غول فناوری را تأمین می‌کند، از همین کتابخانه در پشت‌پرده سایت‌های پرترافیکی مانند Taobao و Alipay پشتیبانی می‌کند. تمامی نسخه‌های منتشرشده از XQUIC تا نسخه 1.9.4 (آخرین نسخه موجود) در معرض این باگ هستند.

راهکارهای موقت و مدیریت بحران

تا زمانی که تیم توسعه‌دهنده XQUIC یک وصله رسمی ارائه دهد، مدیران زیرساخت می‌توانند از دو راهکار عملی برای خنثی‌سازی حمله استفاده کنند:

  • تنظیم مقدار پارامتر SETTINGS_QPACK_MAX_TABLE_CAPACITY روی عدد 0. این کار جدول پویای QPACK را غیرفعال می‌کند و جریان ترافیک مورد نیاز برای حمله را قطع می‌سازد.
  • غیرفعال‌سازی کامل پروتکل HTTP/3 در سطح وب‌سرور و هدایت ترافیک به نسخه پایدارتر HTTP/2.

پیشنهاد می‌شود پیش از اعمال تغییرات، مستندات رسمی وب‌سرور مورد استفاده و پروانه‌های فشرده‌سازی هدر بررسی شوند تا از اختلال در عملکرد سرویس‌دهی جلوگیری گردد.

تاریخچه افشا و بستر امنیتی پروتکل‌های وب

تیم FoxIO تماس‌های امنیتی خود با علی‌بابا را از 7 آوریل آغاز کرد و چهار بار دیگر تا 9 مه پیگیری نمود، اما علیرغم وعده پاسخ در کمتر از 3 روز کاری، هیچ واکنشی دریافت نکردند. این سکوت منجر به افشای عمومی حفره شد. XRING تازه‌ترین حلقه از یک زنجیره طولانی از آسیب‌پذیری‌های بحرانی در پشته‌های HTTP/2 و HTTP/3 است. تنها سه هفته پیش، رسانه THN یک حفره Use-After-Free در ماژول HTTP/3 نرم‌افزار NGINX را منتشر کرد که دقیقاً از همان کانال QPACK برای نفوذ بهره می‌برد. در ماه‌های اخیر نیز حملات بمب‌گونه‌ای مانند HTTP/2 Bomb و خطاهای مشابه در HAProxy، آسیب‌پذیری‌های ذاتی فشرده‌سازی هدرها در مهندسی شبکه را به چالش کشیده‌اند.

چشم‌انداز امنیتی و گام‌های بعدی

تحقیقات FoxIO نشان می‌دهد که این حمله تاکنون صرفاً ماهیت محروم‌سازی از سرویس (DoS) دارد و گزارش مشخصی از بهره‌برداری فعال در طبیعت یا تبدیل آن به اجرای کد از راه دور (RCE) ثبت نشده است. با این حال، ماهیت خطای خروج از مرز حافظه (Out-of-Bounds Write) همواره پتانسیل بالقوه‌ای برای سوءاستفاده‌های پیچیده‌تر را به همراه دارد. با توجه به وابستگی گسترده زیرساخت‌های وب ایران و جهان به استانداردهای جدید پروتکل‌های وب، مدیران شبکه باید وضعیت به‌روزرسانی کتابخانه‌های خود را در اولویت قرار دهند. انتظار می‌رود با توجه به ترافیک بالای حمله در دنیای واقعی، تیم‌های پاسخ به حوادث امنیتی (SRC) علی‌بابا و توسعه‌دهندگان متن‌باز در اسرع وقت نسبت به ارائه کد CVE و وصله نهایی اقدام کنند.