خانه » CVE-2026-42945

CVE-2026-42945

NGINX - Heap-based Buffer Overflow in ngx_http_rewrite_module

توسط Vulnerbyte Alerts
5 بازدید

چکیده

یک آسیب‌پذیری سرریز بافر مبتنی بر Heap در ماژول ngx_http_rewrite_module وب‌سرور NGINX به مهاجم احراز هویت‌نشده اجازه می‌دهد با ارسال درخواست‌های HTTP دستکاری‌شده، پردازه‌های Worker را کرش کند. این ضعف امنیتی در برخی پیکربندی‌های خاص Rewrite قابل اکسپلویت است و می‌تواند به حملات انکار سرویس (DoS) منجر شود. همچنین در شرایطی که مکانیزم‌های امنیتی غیرفعال باشند یا دور زده شوند، احتمال دستیابی به اجرای کد از راه دور (RCE) نیز وجود دارد.

توضیحات

آسیب‌پذیری CVE-2026-42945 در ماژول ngx_http_rewrite_module وب‌سرور NGINX، به دلیل مدیریت نادرست حافظه در فرآیند پردازش قوانین بازنویسی (Rewrite Rules) ایجاد می‌شود و مطابق با CWE-122 در دسته‌ی سرریز بافر مبتنی بر  Heap (Heap-based Buffer Overflow) قرار می‌گیرد. ماژول ngx_http_rewrite_module مسئول پردازش Rewrite Directiveها، تغییر مسیر URIها و ارزیابی شروط مرتبط با درخواست‌های HTTP در NGINX است و به‌صورت پیش‌فرض در اغلب بیلدهای استاندارد NGINX Open Source و NGINX Plus وجود دارد. این آسیب‌پذیری از سال 2008 در کد منبع NGINX وجود داشته و برای مدت طولانی بدون شناسایی باقی مانده است.

ریشه‌ی اصلی این ضعف در نحوه‌ی پردازش Capture Groupهای بدون نام در عبارات منظم سازگار با Perl یا PCRE (Perl-Compatible Regular Expressions) قرار دارد. در پیکربندی‌های آسیب‌پذیر، زمانی که یک دستور rewrite شامل Captureهایی مانند ‎$1‎ یا ‎$2‎ بوده و رشته‌ی جایگزین دارای علامت سؤال «؟» باشد و پس از آن نیز یک دستور rewrite، if یا set دیگر در همان محدوده تعریف شود، موتور اسکریپت داخلی NGINX در محاسبه‌ی طول واقعی داده دچار ناسازگاری منطقی می‌شود. در این وضعیت، اندازه‌ی بافر Heap بر اساس طول خام داده‌ها محاسبه می‌شود، اما هنگام کپی‌کردن داده‌ها، برخی کاراکترهای خاص مجدداً کدگذاری می‌شوند و طول واقعی داده افزایش پیدا می‌کند. در نتیجه، داده‌ای بزرگ‌تر از ظرفیت حافظه‌ی تخصیص‌یافته در Heap نوشته شده و سرریز حافظه رخ می‌دهد.

طبق تحلیل فنی منتشرشده توسط پژوهشگران، این ضعف در فایل src/http/ngx_http_script.c ایجاد می‌شود. زمانی که رشته‌ی Rewrite شامل «؟» باشد، متغیر داخلی is_args در موتور اصلی پردازش فعال می‌شود، اما در مرحله‌ی محاسبه‌ی طول داده‌ها، یک زیرموتور (Sub-engine) جدید بدون این وضعیت استفاده می‌شود. در نتیجه، تابع ngx_http_script_copy_capture_len_code طول Captureها را بدون درنظر گرفتن کدگذاری کاراکترها محاسبه می‌کند، اما هنگام کپی‌کردن داده‌ها، تابع ngx_http_script_copy_capture_code با استفاده از ngx_escape_uri و حالت NGX_ESCAPE_ARGS برخی کاراکترها مانند «+»، «%» و «&» را مجدداً کدگذاری می‌کند؛ فرآیندی که می‌تواند اندازه‌ی واقعی داده را تا سه برابر افزایش دهد. این اختلاف میان مرحله‌ی محاسبه و مرحله‌ی کپی، باعث نوشتن داده فراتر از محدوده‌ی Heap Allocation و در نهایت Heap Corruption (خرابی ساختار حافظه Heap) می‌شود.

اکسپلویت این آسیب‌پذیری از راه دور و بدون نیاز به احراز هویت یا تعامل کاربر امکان‌پذیر است و مهاجم تنها با ارسال درخواست‌های HTTP دستکاری‌شده می‌تواند پردازه‌های Worker مربوط به NGINX را دچار کرش کند. از آنجا که داده‌های سرریز‌شده مستقیماً از URI کنترل‌شده توسط مهاجم منشأ می‌گیرند، مهاجم تا حد زیادی کنترل داده‌های نوشته‌شده در حافظه را در اختیار دارد و همین موضوع امکان انجام حملات پیچیده‌تر را فراهم می‌کند. با وجود اینکه بردار CVSS v3.1 این آسیب‌پذیری دارای پیچیدگی حمله بالا (High Attack Complexity) است، اما اکسپلویت آن به‌صورت کامل قابل خودکارسازی بوده و مهاجم می‌تواند با استفاده از اسکریپت‌ها یا ابزارهای اختصاصی، درخواست‌های مخربی طراحی کند که به‌صورت مداوم باعث خرابی حافظه و کرش پردازه‌های Worker شوند.

کد اثبات مفهومی (PoC) این آسیب‌پذیری به‌صورت عمومی منتشر شده است و نحوه‌ی ارسال درخواست‌های HTTP دستکاری‌شده، انجام Heap Spraying و ایجاد Heap Overflow در پردازه‌های Worker وب‌سرور NGINX را نشان می‌دهد. این PoC در نهایت امکان کرش پردازه‌های Worker و در شرایط خاص، اجرای کد از راه دور روی سرور را فراهم می‌کند.

پیامد اصلی این آسیب‌پذیری در سناریوهای عمومی، ایجاد انکار سرویس (Denial of Service یا DoS) از طریق کرش و Restart مکرر پردازه‌های Worker است. با این حال، در سیستم‌هایی که مکانیزم تصادفی‌سازی فضای آدرس حافظه یا ASLR (Address Space Layout Randomization) غیرفعال باشد یا مهاجم بتواند آن را دور بزند، این ضعف می‌تواند منجر به اجرای کد از راه دور در زمینه‌ی پردازه‌ی Worker شود. این آسیب‌پذیری تاثیر قابل توجهی بر محرمانگی (Confidentiality)، یکپارچگی (Integrity) و دسترس‌پذیری (Availability) دارد و مهاجم می‌تواند باعث اختلال گسترده در سرویس‌های مبتنی بر NGINX یا در شرایط مناسب، کنترل کامل پردازه‌ی Worker شود. این ضعف تنها Data Plane مربوط به پردازش درخواست‌های HTTP را تحت تأثیر قرار می‌دهد و مستقیماً Control Plane محصولات F5 را درگیر نمی‌کند.

این آسیب‌پذیری در نسخه‌های 1.30.1 و 1.31.0 از NGINX Open Source و همچنین نسخه‌های R32 P6 و R36 P4 از NGINX Plus به‌طور رسمی پچ شده است.

CVSS

Score Severity Version Vector String
8.1 HIGH 3.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
9.2 CRITICAL 4.0 CVSS:4.0/AV:N/AC:H/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
CVE-2026-42945

شکل 1: تفسیر جدول CVSS

لیست محصولات آسیب پذیر

Versions Product
affected from R36 before R36 P4

affected from R32 before R32 P6

NGINX Plus
affected from 0.6.27 before 1.30.1 NGINX Open Source

لیست محصولات بروز شده

Versions Branch Product
R36 P4

R32 P6

Rx NGINX Plus
37.0.0 37.x NGINX Plus
1.31.0
1.30.1
1.x NGINX Open Source

استفاده محصول در ایران

در این جدول، تعداد صفحات ایندکس‌شده در گوگل با دامنه .ir که NGINX Plus و NGINX Open Source را ذکر کرده اند، ثبت شده است. این داده صرفاً برای برآورد تقریبی حضور محصولات در وب ایران استفاده شده و نمایانگر میزان نصب دقیق و استفاده واقعی نیست.

Approx. Usage in .ir Domain via Google (Total Pages) Search Query (Dork) Product
22,700 site:.ir “NGINX” NGINX
164 site:.ir “NGINX Plus” NGINX Plus
31 site:.ir “NGINX Open Source” NGINX Open Source

نتیجه گیری

این آسیب‌پذیری با شدت بالا در ماژول ngx_http_rewrite_module وب‌سرور NGINX می‌تواند باعث کرش پردازه‌های Worker، بروز انکار سرویس و در شرایط خاص، اجرای کد از راه دور (RCE) شود. با توجه به انتشار عمومی جزئیات فنی و PoC، اجرای اقدامات امنیتی و نصب پچ‌های رسمی برای جلوگیری از سوءاستفاده ضروری است.

راهکارهای پیشنهادی برای کاهش ریسک:

  • به‌روزرسانی فوری: تمامی سامانه‌های مبتنی بر NGINX Open Source را به نسخه‌های 30.1 یا 1.31.0 و NGINX Plus را به نسخه‌های R32 P6 یا R36 P4 به‌روزرسانی کنید. این اقدام مؤثرترین راهکار برای رفع کامل آسیب‌پذیری است و باید اولویت اول قرار گیرد.
  • اصلاح Rewrite Ruleها: در دستورالعمل‌های rewrite به‌جای Captureهای بدون نام (مانند $1 یا $2) از Captureهای دارای نام (Named Captures) استفاده کنید. این اقدام مستقیماً مسیر فعال‌سازی آسیب‌پذیری را مسدود می‌کند.
  • بازبینی پیکربندی: تمامی Directiveهای rewrite، if و set را در فایل‌های پیکربندی NGINX مانند conf بررسی کرده و الگوهای آسیب‌پذیر دارای علامت سؤال «؟» و Captureهای بدون نام را اصلاح یا حذف کنید.
  • محدودسازی دسترسی HTTP: دسترسی مستقیم اینترنتی به سرویس‌های حساس را محدود کرده و از فایروال اپلیکیشن وب (WAF) مانند ModSecurity یا NGINX App Protect برای شناسایی و مسدودسازی درخواست‌های HTTP غیرعادی و URIهای مشکوک استفاده کنید.
  • تقویت دفاع در لایه سیستم‌عامل: قابلیت‌های امنیتی مانند ASLR، No-eXecute یا NX، Stack Canary و RELRO را در سیستم‌عامل و محیط اجرایی فعال نگه دارید تا احتمال موفقیت اکسپلویت کاهش یابد.
  • مانیتورینگ و تحلیل لاگ‌ها: درخواست‌های HTTP دارای URIهای طولانی، کاراکترهای کدگذاری‌شده غیرعادی و الگوهای مشکوک Rewrite را از طریق سامانه‌های مدیریت رویداد و اطلاعات امنیتی (SIEM) و ابزارهای مانیتورینگ بررسی کنید.
  • ایزوله‌سازی سرویس‌ها: سرویس‌های NGINX را در محیط‌های ایزوله مانند Docker یا Kubernetes اجرا کنید تا در صورت وقوع اجرای کد از راه دور، دامنه‌ی تأثیر حمله محدود شود.
  • کاهش سطح دسترسی پردازه‌ها: پردازه‌های Worker مربوط به NGINX را با حداقل سطح دسترسی اجرا کرده و از اجرای سرویس با سطح دسترسی Root خودداری کنید تا اثرات احتمالی اجرای کد از راه دور کاهش یابد.

اجرای این اقدامات، به‌ویژه نصب سریع پچ‌های امنیتی و اصلاح Rewrite Ruleهای آسیب‌پذیر، می‌تواند احتمال سوءاستفاده موفق از این آسیب‌پذیری را به‌طور چشمگیری کاهش داده و امنیت سرویس‌های مبتنی بر NGINX را به‌صورت قابل‌توجهی افزایش دهد.

امکان استفاده در تاکتیک‌های Mitre Attack (در زمان اجرای حمله)

Initial Access (TA0001)

مهاجم می‌تواند بدون نیاز به احراز هویت و تنها با ارسال یک درخواست HTTP ساده (که NGINX را وادار به پردازش یک URI مخرب می‌کند)، به سرور هدف دسترسی پیدا کند. این درخواست معمولاً به یک آدرس عمومی وب‌سرور ارسال می‌شود.

Execution (TA0002)

پس از ارسال درخواست، آسیب‌پذیری سرریز بافر فعال شده و مهاجم می‌تواند با خراب کردن ساختارهای حافظه، کد دلخواه خود را (مانند یک شل معکوس) از طریق فراخوانی تابع system()  اجرا کند. کد اثبات مفهوم (PoC) قابلیت اجرای هر دستوری و همچنین راه‌اندازی شل معکوس را دارد.

Privilege Escalation (TA0004)

(worker process) NGINX معمولاً با امتیازات محدود (مانند کاربر `www-data` یا `nobody`) اجرا می‌شود. با این حال، مهاجم می‌تواند از این دسترسی اولیه برای اجرای سایر اکسپلویت‌های افزایش دسترسی محلی (LPE) به منظور دستیابی به سطح دسترسی ریشه (root) استفاده کند.

Defense Evasion (TA0005)

درخواست HTTP مخرب می‌تواند به گونه‌ای طراحی شود که شبیه به ترافیک عادی وب (مانند درخواست به یک آدرس `/api/`) به نظر برسد و از شناسایی توسط سیستم‌های تشخیص نفوذ مبتنی بر امضا (Signature-based IDS) جلوگیری کند. همچنین اجرای کد از طریق سرریز بافر حافظه، هیچ فایلی روی دیسک ایجاد نمی‌کند.

Impact (TA0040)

بهره‌برداری موفق از این آسیب‌پذیری یک نقض کامل امنیت وب‌سرور و برنامه‌های میزبان آن است. مهاجم با دسترسی به اجرای کد بر روی سرور NGINX، قادر به نابودی محرمانگی، یکپارچگی و در دسترس بودن داده‌ها است. این دسترسی می‌تواند منجر به سرقت اطلاعات حساس (نظیر اطلاعات کارت اعتباری و اسرار تجاری)، تخریب یا باج‌گذاری داده‌ها (Ransomware)، تغییر در محتوای وب‌سایت (defacing)، نصب بک‌دور، هدایت ترافیک کاربران به سایت‌های مخرب و در نهایت از کار افتادن کامل سرویس وب شود. در چنین وضعیتی، اعتماد کاربران از بین رفته و سازمان با هزینه‌های سنگین ناشی از نقض داده‌ها، جریمه‌های قانونی (مانند GDPR) و خسارت به اعتبار خود مواجه خواهد شد.

منابع

  1. https://www.cve.org/CVERecord?id=CVE-2026-42945
  2. https://www.cvedetails.com/cve/CVE-2026-42945/
  3. https://my.f5.com/manage/s/article/K000161019
  4. https://vulmon.com/vulnerabilitydetails?qid=CVE-2026-42945
  5. https://vuldb.com/vuln/363570
  6. https://depthfirst.com/nginx-rift
  7. https://github.com/DepthFirstDisclosures/Nginx-Rift
  8. https://github.com/F2u0a0d3/CVE-2026-42945-nginx-rift-poc
  9. https://nvd.nist.gov/vuln/detail/CVE-2026-42945
  10. https://cwe.mitre.org/data/definitions/122.html

همچنین ممکن است دوست داشته باشید

پیام بگذارید