F5 به‌تازگی وصله‌های امنیتی مهمی برای رفع یک نقص بحرانی در وب‌سرور محبوب nginx منتشر کرده است. این آسیب‌پذیری که با شناسه CVE-2026-42533 شناخته می‌شود، به یک مهاجم از راه دور و احراز هویت‌نشده اجازه می‌دهد تا با ارسال درخواست‌های HTTP طراحی‌شده، یک سرریز بافر هیپ (heap buffer overflow) را در فرآیند worker ایجاد کند. این مشکل در تاریخ ۱۵ ژوئیه در نسخه‌های nginx 1.30.4 (پایدار) و 1.31.3 (اصلی) و همچنین در NGINX Plus 37.0.3.1 رفع شده است. تمام کاربرانی که از نسخه‌های قدیمی‌تر استفاده می‌کنند، باید در اسرع وقت به‌روزرسانی کنند.

ماهیت و شدت آسیب‌پذیری

با بهره‌برداری از این نقص، مهاجم می‌تواند فرآیند worker را از کار بیندازد یا مجبور به راه‌اندازی مجدد کند که نتیجه آن محرومیت از سرویس (DoS) خواهد بود. اما نکته نگران‌کننده‌تر این است که به گفته F5، در صورتی که مکانیزم ASLR غیرفعال باشد یا قابل دور زدن باشد، این آسیب‌پذیری می‌تواند به اجرای کد از راه دور (Remote Code Execution) نیز منجر شود. شدت این آسیب‌پذیری در سیستم امتیازدهی CVSS v4 برابر ۹.۲ (بحرانی) و در نسخه قدیمی‌تر v3.1 برابر ۸.۱ ارزیابی شده است. با وجود پیچیدگی بالای حمله، امتیاز بالا نشان‌دهنده خطر جدی آن است.

ریشه فنی مشکل: موتور اسکریپت nginx

سرریز بافر در موتور اسکریپت (script engine) nginx رخ می‌دهد؛ بخشی از کد که وظیفه ساخت رشته‌ها از دستورالعمل‌ها را در زمان پردازش درخواست بر عهده دارد. این مشکل تنها در یک پیکربندی خاص قابل بهره‌برداری است: ترکیبی از یک map مبتنی بر regex که متغیر خروجی آن در یک عبارت رشته‌ای پس از یک عمل capture (گرفتن یا استخراج بخشی از متن) از یک تطابق regex قبلی ارجاع داده شده است.

در این الگو، فرآیند ارزیابی دو مرحله‌ای موتور با مشکل مواجه می‌شود. مرحله اول اندازه بایت‌های مورد نیاز برای نتیجه را اندازه‌گیری می‌کند و یک بافر متناسب با آن تخصیص می‌دهد. مرحله دوم، بایت‌ها را درون این بافر می‌نویسد. هر دو مرحله، وضعیت capture مشترکی را می‌خوانند. مشکل از جایی شروع می‌شود که ارزیابی regex درون دستور map، که بین این دو مرحله انجام می‌شود، محتوای آن shared state را بازنویسی می‌کند. در نتیجه، مرحله اندازه‌گیری (مرحله اول) بافر را بر اساس capture اصلی (مثلاً ارجاع $1 از تطابق مکان) محاسبه می‌کند، اما مرحله نوشتن (مرحله دوم) آن را با یک capture متفاوت که توسط مهاجم کنترل می‌شود و اندازه بزرگ‌تری دارد، پر می‌کند. این ناهماهنگی باعث سرریز شدن بافر می‌شود که هم طول و هم محتوای آن مستقیماً از درخواست مهاجم گرفته می‌شود.

دامنه گسترده تأثیر

تمام نسخه‌های nginx از ۰.۹.۶ تا ۱.۳۱.۲ که به سال ۲۰۱۱ بازمی‌گردد و مصادف با زمان افزودن پشتیبانی از regex به دستور map است، آسیب‌پذیر هستند. این نقص علاوه بر سرور اصلی nginx و NGINX Plus، محصولاتی مانند NGINX Ingress Controller، Gateway Fabric، App Protect WAF و Instance Manager را نیز تحت تأثیر قرار می‌دهد. با این حال، تا زمان انتشار این گزارش، F5 نسخه‌های وصله شده را برای آن چهار محصول منتشر نکرده بود. تمامی کاربران این محصولات باید منتظر وصله‌های جداگانه باشند.

ادعایی فراتر از گزارش رسمی: قابلیت اجرای کد روی سیستم‌های پیش‌فرض

یکی از محققانی که این آسیب‌پذیری را گزارش کرده است، Stan Shaw (مشهور به cyberstan)، تحلیل عمیق‌تری از این نقص منتشر کرده است. استدلال او این است که خود این نقص مکانیسم دور زدن ASLR را فراهم می‌کند. به گفته او، در شرایطی که capture جدید کوچک‌تر از capture اصلی باشد، بافر بزرگ‌تر با داده‌های هیپ اولیه‌سازی نشده (uninitialized heap data) پر می‌شود. در یک بیلد پیش‌فرض از اوبونتو ۲۴.۰۴، یک درخواست GET ساده و بدون احراز هویت می‌تواند آدرس‌های حافظه مورد نیاز برای یک payload (باریکه کد مخرب) را استخراج کند. Shaw به صراحت می‌گوید: «یک خواننده گزارش F5 ممکن است به این نتیجه برسد که این نقص تنها در سیستم‌های پیش‌فرض باعث DoS می‌شود، اما اینطور نیست.» این ادعا قوی‌تر از آن چیزی است که F5 در گزارش رسمی خود ذکر کرده است و Shaw می‌گوید در آزمایشاتش امتیاز خطر ۱۰ از ۱۰ را کسب کرده است. او فعلاً جزئیات بهره‌برداری و اثبات مفهوم خود را منتشر نکرده است تا امکان بررسی مستقل وجود نداشته باشد. این موضوع شکاف بین اعلام رسمی فروشنده و کشف جامعه امنیتی را برجسته می‌کند.

راه‌حل‌ها و راهکارهای موقت

راه‌حل نهایی و کامل، ارتقا به نسخه‌های وصله‌شده nginx 1.30.4، 1.31.3 یا NGINX Plus 37.0.3.1 است. اما برای کسانی که نمی‌توانند فوراً به‌روزرسانی کنند، F5 یک راهکار کاهش موقت ارائه کرده است: تغییر mapهای regex آسیب‌دیده به captureهای نام‌گذاری شده (Named Captures). Shaw تأیید می‌کند که این کار مسیر اصلی حمله را مسدود کرده و بیشتر پیکربندی‌ها را ایمن می‌کند. با این حال، او هشدار می‌دهد که این راهکار یک مسیر باریک دیگر را باقی می‌گذارد. اگر یک دستور map همان گروه نام‌گذاری‌شده را به‌عنوان regex مکان (location regex) تعریف کند، حمله می‌تواند از مسیر دوم به سرریز دست یابد. Shaw این مسیر را با ابزار AddressSanitizer تأیید کرده است و گزارش F5 نیز به آن اشاره‌ای نکرده است. او تأکید می‌کند: «تنها راه‌حل کامل، ارتقا به نسخه‌های جدید است.»

چگونه وجود این آسیب‌پذیری را در پیکربندی خود بررسی کنیم؟

الگوی قابل بهره‌برداری بسیار خاص است: یک دستور map مبتنی بر regex که متغیر آن در یک عبارت رشته‌ای در کنار یک capture شماره‌گذاری شده (مثل $1 یا $2) از یک regex قبلی ظاهر می‌شود، به شرطی که capture قبل از متغیر map نوشته شده باشد. Shaw یک اسکنر خودکار منتشر کرده است که می‌تواند این الگو را در سراسر فایل‌های پیکربندی جستجو کرده و تنها ترتیب‌های قابل بهره‌برداری را پرچم‌گذاری کند.

جمع‌بندی و اقدامات لازم

آسیب‌پذیری CVE-2026-42533 یکی از جدی‌ترین نقص‌های امنیتی در تاریخ nginx محسوب می‌شود. با وجود اینکه بهره‌برداری از آن به یک پیکربندی خاص نیاز دارد، اما تحقیقات اخیر نشان می‌دهد که خطر آن بسیار بیشتر از برآورد اولیه است و می‌تواند در سیستم‌های پیش‌فرض نیز به اجرای کد از راه دور منجر شود. به تمام مدیران سیستم‌ها و توسعه‌دهندگانی که از nginx استفاده می‌کنند، اکیداً توصیه می‌شود در اسرع وقت نسبت به ارتقا به آخرین نسخه موجود (1.30.4 یا 1.31.3) اقدام کنند. به‌روزرسانی‌های NGINX Plus و سایر محصولات وابسته نیز باید به دقت پیگیری شود. برای اطلاعات بیشتر و دریافت آخرین وصله‌ها، به وب‌سایت رسمی nginx و پورتال پشتیبانی F5 مراجعه کنید.

نمایش فرآیند سرریز بافر در nginx

تصویر شماتیک از نحوه سرریز شدن بافر و عدم تطابق بین مراحل مختلف ارزیابی موتور اسکریپت

لوگوی nginx و نماد امنیت

وب‌سرور nginx در جدیدترین نسخه‌های خود این آسیب‌پذیری بحرانی را رفع کرده است.