- شناسه CVE-2026-42945 :CVE
- CWE-122 :CWE
- yes :Advisory
- منتشر شده: می 13, 2026
- به روز شده: می 21, 2026
- امتیاز: 8.1
- نوع حمله: Heap Buffer Overflow
- اثر گذاری: Remote code execution(RCE)
- حوزه: وبسرورها
- برند: F5
- محصول: NGINX Plus, NGINX Open Source
- وضعیتPublished :CVE
- Yes :POC
- وضعیت آسیب پذیری: patch نشده
چکیده
یک آسیبپذیری سرریز بافر مبتنی بر 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 |

شکل 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) و خسارت به اعتبار خود مواجه خواهد شد.
منابع
- https://www.cve.org/CVERecord?id=CVE-2026-42945
- https://www.cvedetails.com/cve/CVE-2026-42945/
- https://my.f5.com/manage/s/article/K000161019
- https://vulmon.com/vulnerabilitydetails?qid=CVE-2026-42945
- https://vuldb.com/vuln/363570
- https://depthfirst.com/nginx-rift
- https://github.com/DepthFirstDisclosures/Nginx-Rift
- https://github.com/F2u0a0d3/CVE-2026-42945-nginx-rift-poc
- https://nvd.nist.gov/vuln/detail/CVE-2026-42945
- https://cwe.mitre.org/data/definitions/122.html
گزارش اثبات آسیبپذیری CVE-2026-42945
اطلاعات آسیبپذیری
عنوان: سرریز بافرheap در ماژول ngx_http_rewrite_module NGINX منجر به اجرای کد از راه دور
شناسه: CVE-2026-42945
وضعیت مشاوره: Advisory / Patch Available / Active Exploitation in Wild
امتیاز: CVSS: 9.2 (Critical)
محصول: NGINX Open Source و NGINX Plus (F5)
محصول / نسخههای آسیبپذیر
در نسخههای زیر:
- NGINX Open Source نسخههای 0.6.27 تا 1.30.0
- NGINX Plus نسخههای R32 تا R36
- NGINX Instance Manager نسخههای 2.16.0 تا 2.21.1
- F5 WAF for NGINX نسخههای 5.9.0 تا 5.12.1
- NGINX App Protect WAF نسخههای 4.9.0 تا 4.16.0 و 5.1.0 تا 5.8.0
- NGINX Gateway Fabric نسخههای 1.3.0 تا 1.6.2 و 2.0.0 تا 2.5.1
- NGINX Ingress Controllerنسخههای 3.5.0 تا 3.7.2, 4.0.0 تا 4.0.1, 5.0.0 تا 5.4.1
محیطهای درگیر
- کلیه سازمانهایی که از NGINX به عنوان وبسرور، پراکسی معکوس، API Gateway یا Ingress Controller استفاده میکنند
- سرورهای میزبانشده روی پورتهای 80 و 443 (پورتهای پیشفرض HTTP/HTTPS) که در معرض اینترنت قرار دارند
- محیطهای ابری، کانتینرهای Kubernetes با NGINX Ingress
- سرورهای مجازی که NGINX روی آنها اجرا میشود
کامپوننتهای آسیبپذیر
- ماژول ngx_http_rewrite_module، مسئول پردازش دستورات rewrite، if و set
- تابع ngx_http_script_start_args_code، تنظیم پرچم سراسری is_args در ساختار ngx_http_request_t
- تابع ngx_http_script_complex_value_code، ایجاد زیرموتور جدید با مقدار is_args = 0
- توابع ngx_http_script_copy_capture_len_code و ngx_http_script_copy_capture_code، اعمال ناهماهنگ escaping بین دو مرحله محاسبه طول و کپی داده
ریشه مشکل (Root Cause Analysis)
ریشه اصلی این آسیبپذیری به یک عدم تطابق حالت (State Mismatch) در موتور اسکریپت ngx_http_rewrite_module ماژول NGINX بازمیگردد.
موتور اسکریپت NGINX برای پردازش دستورات rewrite و set از یک پردازش دو مرحلهای استفاده میکند:
مرحله اول محاسبه طول بافر مورد نیاز، و مرحله دوم کپی کردن دادهها در بافر تخصیصیافته روی heap
نقص اول به نحوه مدیریت یک پرچم سراسری به نام is_args در ساختار ngx_http_request_t برمیگردد.
وقتی یک دستور rewrite با رشته جایگزین حاوی کاراکتر “?” مثلاً:
rewrite ^/api/(.*)$ /internal?migrated=true;
پردازش میشود، تابع ngx_http_script_start_args_code این پرچم را روی 1 تنظیم میکند تا نشان دهد که query string در حال پردازش است. اما این پرچم هرگز به حالت اولیه بازنشانی نمیشود.
نقص دوم در نحوه کپی نشدن مقدار is_args به زیرموتورهای جدید هنگام پردازش دستورات بعدی مثل
set $original_endpoint $1;
است. در مرحله محاسبه طول برای دستور set، یک زیرموتور جدید با ngx_memzero مقداردهی اولیه میشود و در نتیجه is_args آن 0 است. اما در مرحله کپی دادهها، از موتور اصلی استفاده میشود که is_args آن همچنان 1 است. در نتیجه در مرحله محاسبه طول، منطق escaping (تبدیل کاراکترهایی مثل “+” به “%2B”) اجرا نمیشود و طول خام (raw) داده محاسبه میگردد اما در مرحله کپی، منطق escaping اجرا میشود و هر کاراکتر “+” به 3 بایت “%2B” تبدیل میشود. در نتیجه به اندازه (3 – 1) ضرب در “تعداد کاراکترهای قابل escaping بایت” بیشتر از ظرفیت بافر روی heap نوشته شده و Heap-based Buffer Overflow رخ میدهد.
به طور کلی موتور NGINX فکر میکند بافری به اندازه x نیاز دارد، اما در عمل x + y بایت در آن مینویسد. این y مازاد میتواند ساختارهای مجاور heap (مانند ngx_pool_t شامل pointer به تابع cleanup) را بازنویسی کند و در نهایت به اجرای کد (RCE) منجر شود.
بخش آسیبپذیر
رفتار ناامن سیستم:
پردازش دو مرحلهای ناهماهنگ در موتور ngx_http_rewrite_module، که در آن مرحله محاسبه طول از یک زیرموتور با is_args = 0 و مرحله کپی از موتور اصلی با is_args = 1 استفاده میکند. این رفتار ناامن باعث میشود هر مهاجمی با دسترسی شبکه (بدون نیاز به احراز هویت)، با ارسال یک درخواست ساده حاوی کاراکترهای قابل escape (مثل +، & و %)، بافر heap را سرریز کرده و در صورت فراهم بودن شرایط، کد خود را روی سرور اجرا کند.
نحوه سوءاستفاده مهاجم:
- مهاجم یک اسکن ساده روی پورتهای 80 و 443 یا شناسایی زیردامنههای مرتبط انجام میدهد
- مهاجم یک درخواست GET به مسیری که پیکربندی آسیبپذیر آن را پوشش میدهد، همراه با تعداد زیادی کاراکتر + ارسال میکند (مثل /api/+++++++++++)
- سرور NGINX در مرحله اول طول خام URI را محاسبه کرده و بافری به آن اندازه روی heap تخصیص میدهد
- در مرحله بعدی، هر کاراکتر “+” به “%2B” تبدیل شده و سرریز بافر رخ می دهد
- در حالت ساده، پردازه (process) غیرفعال شده (Denial of Service) و پردازه مادر, آن را دوباره اجرا میکند
- در سیستمهایی که ASLR غیرفعال است، مهاجم با کنترل دقیق heap و تزریق یک payload در بدنه درخواستهای POST، میتواند pointer تابع cleanup در ساختار ngx_pool_t را بازنویسی کرده و هنگام بسته شدن اتصال (فراخوانی ngx_destroy_pool)، کد خود را با دسترسی process اجرا کند
- مهاجم میتواند از این دسترسی برای نصب backdoor یا حرکت جانبی در شبکه داخلی استفاده کند
نقش این آسیبپذیری در زنجیره حمله
این آسیبپذیری یک نقطه ورود اولیه (Initial Access) بسیار قدرتمند و در صورت فراهم بودن شرایط (ASLR غیرفعال) یک ابزار اجرای کد از راه دور (Remote Code Execution) کامل در زنجیره حمله محسوب میشود. با توجه به نمره CVSS 9.2 (بحرانی)، ماهیت شبکهای، عدم نیاز به احراز هویت، و حدود ۱۸ سال حضور در کد NGINX (از 2008 تا 2026)، مهاجم میتواند از راه دور و بدون نیاز به هرگونه تعامل با کاربر، کنترل کامل NGINX را در دست گیرد. NGINX به عنوان قلب تپنده بسیاری از زیرساختهای وب مدرن، دسترسی مستقیم به ترافیک HTTP، نشستهای کاربران، و در بسیاری از پیادهسازیها به API های داخلی و میکروسرویسها دارد. موفقیت در بهرهبرداری از این آسیبپذیری در حالت RCE عملاً به معنای نقض کامل محرمانگی (Confidentiality) و یکپارچگی (Integrity) کل سرویس وب و تمام برنامههای تحت وب پشت آن است.
پیشنیازهای بهرهبرداری (Prerequisites)
- دسترسی شبکه مهاجم به پورتهای 80 یا 443 سرویس NGINX روی سرور هدف
- استفاده از نسخه آسیبپذیر NGINX
- عدم اعمال پچ امنیتی
- وجود یک پیکربندی خاص مانند:
location ~ ^/api/(.*) $ {
rewrite ^/api/(.*)$ /internal?migrated=true;
set $original_endpoint $1;
}
- نبود محدودیت دسترسی مبتنی بر IP (بدون IP whitelist)
- قرار داشتن رابط آسیبپذیر در معرض اینترنت یا شبکه داخلی قابل دسترس برای مهاجم
- غیرفعال بودن ASLR در سطح سیستمعامل برای اجرای کد از راه دور (RCE)
رفتار مورد انتظار در حالت امن (Expected Secure Behavior)
- موتور اسکریپت NGINX باید در هر دو مرحله محاسبه طول و کپی داده از یک مقدار ثابت is_args استفاده کند
- پرچم is_args باید پس از پردازش هر دستور rewrite (نه به صورت سراسری) بازنشانی شود
- تابع ngx_http_script_complex_value_code باید مقدار is_args را از موتور اصلی به زیرموتور جدید کپی کند، نه اینکه آن را به 0 مقداردهی اولیه کند
- استفاده از capture های بدون نام ($1, $2) در دستورات set باید ممنوع شود، یا حداقل با همان منطق escaping در هر دو مرحله پردازش گردند
- مستندات امنیتی NGINX باید به وضوح نسبت به خطرات ترکیب ? در rewrite و capture های بدون نام هشدار دهند
- ASLR باید به طور پیشفرض در تمام سیستمهای لینوکسی فعال باشد
راهکارها و کاهش ریسک (Mitigation / Patch Guidance)
اقدامات فوری برای کاهش ریسک:
- بهروزرسانی فوری NGINX به نسخههای تصحیحشده
- فعالسازی اجباری ASLR در سطح سیستمعامل
- پایش مداوم لاگهای دسترسی NGINX برای شناسایی درخواستهای حاوی +، & و % در مسیرهای منطبق با الگوی آسیبپذیر
اقدامات کوتاهمدت / میانمدت برای کاهش ریسک:
- انجام اسکن کامل پیکربندی NGINX در تمام سرورها با استفاده از ابزار اسکنر اختصاصی (مثل scan-nginx-rift.sh)
- پیادهسازی قوانین تشخیص نفوذ (WAF / IDS) برای شناسایی الگوهای حمله
- کاهش سطح حمله با حذف یا اصلاح پیکربندیهای آسیبپذیر حتی پس از پچ
- فعالسازی و تقویت لاگبرداری تفصیلی از رفتارهای NGINX و ارسال لاگها به سیستم SIEM
- اطمینان از اجرای فرآیندهای NGINX با کمترین دسترسی ممکن (غیر از root) و استفاده از SELinux یا AppArmor
اقدامات بلندمدت برای کاهش ریسک:
- استقرار راهکارهای خودکار بهروزرسانی امنیتی (Patch Management) برای اعمال سریع وصلههای NGINX
- پیادهسازی فرآیندهای منظم بازبینی پیکربندی NGINX (Configuration Audit) به عنوان بخشی از CI/CD
- استفاده از ابزارهای تحلیل پیکربندی ایستا در چرخه توسعه زیرساخت (IaC) برای شناسایی الگوهای آسیبپذیر قبل از استقرار
- اجرای دورهای تست نفوذ (Penetration Testing) با تمرکز بر وبسرورها و API Gateway ها
- تدوین و اجرای سیاستهای هاردنینگ NGINX بر اساس راهنمای CIS Benchmarks
تشخیص و مانیتورینگ (Detection & Monitoring)
نشانههای تلاش برای سوءاستفاده:
- وجود درخواستهای GET به مسیرهایی با تعداد غیرعادی کاراکتر
- الگوهای URI حاوی %2B در لاگهای دسترسی
- افزایش ناگهانی خطاهای 502 Bad Gateway یا 504 Gateway Timeout
- مشاهده درخواستهای متعدد و پشت سر هم به یک مسیر خاص از یک منبع واحد در بازه زمانی کوتاه
- گزارشهای مانیتورینگ حاکی از بازآفرینی مکرر فرآیندها (افزایش ناگهانی تعداد restartها)
- وجود درخواستهای POST با بدنه غیرعادی حاوی الگوهای تکراری (تلاش برای heap spraying)
منابع پیشنهادی برای مانیتورینگ و پایش:
- لاگهای دسترسی NGINX – /var/log/nginx/access.log برای تحلیل الگوهای URI غیرعادی
- لاگهای خطای NGINX – /var/log/nginx/error.log برای جستجوی خطاهای مرتبط با فرآیند (مثلworker process … exited on signal)
- سیستمهای SIEM (مانند Splunk، ELK، QRadar) برای جمعآوری و تحلیل مرکزی لاگها
- راهکارهای WAF با قوانین اختصاصی برای شناسایی الگوی درخواست حاوی کاراکتر “+” و مسیر آسیبپذیر
- نظارت بر تعداد restart های فرآیند nginx: worker process
- ابزارهای اسکن آسیبپذیری
واکنش به حادثه (Incident Response)
- ایزولهسازی فوری سرور NGINX آسیبدیده از شبکه (قطع ترافیک ورودی یا تغییر مسیر به سرور پشتیبان) جهت جلوگیری از ادامه نفوذ و حرکت جانبی
- جمعآوری و حفظ لاگهای دسترسی و خطای NGINX، لاگهای سیستمی (syslog)، و در صورت امکان memory dump از فرآیند worker
- شناسایی الگوهای rewrite/set آسیبپذیر و مستندسازی آنها
- جستجو در لاگها برای یافتن درخواستهای حاوی “+”، “%2B” و یا الگوهای تکراری
- رمزهای عبور، توکنهای API، کلیدهای SSH و هرگونه اعتبار دیگری که ممکن است از طریق سرور در معرض خطر قرار گرفته باشد
- اعمال پچ امنیتی (ارتقا به نسخه 1.30.1/1.31.0 یا نسخه پچشده Plus) و اصلاح پیکربندیهای آسیبپذیر
- اسکن کامل شبکه برای شناسایی سایر سیستمهایی که ممکن است مهاجم با استفاده از این سرور به آنها دسترسی یافته باشد
- مستندسازی کامل حادثه (زمان وقوع، نشانهها، اقدامات انجامشده، درسآموختهها) و گزارش به مدیریت ارشد و تیم واکنش سریع (CSIRT)
جریان حمله (Attack Flow)
در نمودار زیر (شکل ۱)، جریان کلی بهرهبرداری از این آسیبپذیری برای اجرای کد از راه دور نشان داده شده است. در این سناریو، مهاجم با ارسال یک درخواست GET ساده حاوی “+” به یک Endpoint آسیبپذیر و سپس یک درخواست POST حاوی payload، باعث سرریز heap شده و کنترل worker process NGINX را به دست میگیرد.

شکل 1: جریان اجرای آسیب پذیری
اثبات مفهوم (PoC) — کاملاً غیرمخرب
آزمایشگاه تخصصی Vulnerbyte، این آسیبپذیری را در محیط ایزوله و کنترلشده با استفاده از نسخه آسیبپذیر بررسی و اجرا کرده است
-
- این آزمایشگاه شامل Docke نسخه آسیبپذیر NGINX (کامیت 98fc3bb78) است راه اندازی شده است و سرویس روی پورت 19321 اجرا شده است
- با استفاده از اسکریپت discover-addresses-complete.sh آدرس های heap و libc در حافظه کشف می شود
- اجرای کامل اکسپلویت و اجرای فرمان نوشتن متن “VULNERABLE” در فایل /tmp/hacked.txt
- این اثبات مفهوم صرفاً توصیفی و آموزشی بوده و شامل تغییرات مخرب نمیشود

شکل 2: اجرای POC
رفع مسئولیت
این گزارش صرفاً با هدف آموزش، تحلیل فنی و ارتقای امنیت سازمانی تهیه شده است. هرگونه استفاده مخرب یا خارج از چارچوبهای قانونی از محتوای آن ممنوع است.
منابع
https://www.cve.org/CVERecord?id=CVE-2026-42945
https://nvd.nist.gov/vuln/detail/CVE-2026-42945
https://cwe.mitre.org/data/definitions/122.html
https://cwe.mitre.org/data/definitions/182.html
https://github.com/F2u0a0d3/CVE-2026-42945-nginx-rift-poc
NGINX (ngx_http_rewrite_module)
CVE-2026-42945 – Heap-Based Buffer Overflow Leading to Remote Code Execution
Affects
- NGINX Open Source & NGINX Plus
- Versions:
- NGINX Open Source: 0.6.27 to 1.30.0 (including all versions in this range, introduced ~18 years ago)
- NGINX Plus: R32 to R36
- Components:
ngx_http_rewrite_module
- Files:
ngx_http_script.c
- Functions:
ngx_http_script_start_args_code()ngx_http_script_copy_capture_len_code()ngx_http_script_copy_capture_code()
Description
CVE-2026-42945 is a critical heap-based buffer overflow vulnerability in NGINX’s rewrite module, dubbed “NGINX Rift” .
The vulnerability exists in NGINX’s script engine, which processes rewrite and set directives in two phases: length calculation (to allocate memory) and data copy (to write the result) . The issue arises from inconsistent engine state between these two phases .
The issue occurs when three specific conditions are met :
- A
rewritedirective contains a question mark (?) in its replacement string, which sets a persistent flag (is_args = 1) - A subsequent
set(orrewrite/if) directive references an unnamed PCRE capture group (e.g.,$1,$2) - The request URI contains escapable characters (such as
+,&,%)
Why this happens:
- During length calculation, the engine uses a zeroed sub-engine where the
is_argsflag is0 - During the actual copy phase, the engine uses the main engine where
is_argsremains1 - Because of this discrepancy, the system under-allocates memory for the buffer (calculating space for unescaped data) but writes more data than allocated (writing escaped data, where each escapable character expands from 1 byte to 3 bytes like
+becoming%20) - This results in a predictable heap buffer overflow where the overflow size equals
2 × Nbytes, withNbeing the number of escapable characters .
Attack Vector
Primary Attack Vector:
Remote / Unauthenticated (HTTP/HTTPS Exposure)
Attack Scenario:
- An attacker identifies an NGINX server with a vulnerable rewrite configuration pattern .
- The attacker crafts a single HTTP GET request containing a URI with numerous escapable characters (e.g.,
+,&,%) that matches the vulnerable location block . - NGINX’s rewrite module processes the request:
- The length calculation phase underestimates the required buffer size
- The copy phase writes escaped data (expanded 3x) into the undersized buffer
- The overflow corrupts adjacent heap memory
- The NGINX worker process crashes (Denial of Service) or, if ASLR is disabled, the attacker achieves remote code execution with the worker’s privileges .
Example of vulnerable configuration :
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true;
set $original_endpoint $1;
}
Example exploit request :
GET /api/+++++++++++++++++++++++++++++++++++ HTTP/1.1
Host: target.com
Key Characteristics :
- No authentication required
- No user interaction required
- Single HTTP request sufficient for DoS
- Attack complexity: High (requires specific configuration pattern and ASLR bypass/disabled for RCE)
- Public PoC available
Conditions Increasing Risk:
- ASLR disabled on the host system
- Public exposure of the vulnerable endpoint
- Presence of vulnerable rewrite rules in configuration
Impact
Successful exploitation allows:
- Denial of Service (DoS) : Immediate crash of NGINX worker process (highly reliable, low complexity)
- Remote Code Execution (RCE) : With ASLR disabled or bypassed, attackers can execute arbitrary code with the worker’s privileges
- Potential privilege escalation to the parent process or other services (depending on environment)
- Web server compromise and data breach
This vulnerability represents a severe risk for organizations using affected NGINX versions with vulnerable configuration patterns.
Observed Exploitation & Threat Activity
- Public PoC released : Multiple proof-of-concept exploits available on GitHub as of May 13, 2026
- Active scanning expected : WAF vendors (e.g., Cloudflare) have released emergency rules to detect exploitation attempts
- No confirmed in-the-wild exploitation at disclosure date, but high risk of imminent exploitation
Severity & Metrics
- CVSS v4.0: Critical (9.2)
- CVSS v3.1: High (8.1)
- Attack Vector: Network
- Attack Complexity: High (for RCE) / Low (for DoS)
- Privileges Required: None
- User Interaction: None
Relevant CWE :
- CWE-122 – Heap-based Buffer Overflow (primary)
- CWE-787 – Out-of-bounds Write
- CWE-119 – Improper Restriction of Operations within Memory Bounds
Patch & Vendor Status
- Patch Available: NGINX 1.30.1, 1.31.0 (Open Source), NGINX Plus R36 P4, R35 P2, R32 P6
- Release Date: May 13, 2026
- Immediate action required
Mitigation & Remediation
Immediate Actions
- Upgrade NGINX immediately to version 1.30.1, 1.31.0 (Open Source) or R36 P4/R35 P2/R32 P6 (NGINX Plus)
- If immediate upgrade is impossible, audit all rewrite rules and avoid the vulnerable pattern (question mark in replacement followed by a capture reference)
- Enable ASLR on all production systems (critical for preventing RCE)
Defensive Measures
- Review configuration for vulnerable patterns as described above
- Deploy WAF rules to detect exploitation attempts (escapable character sequences, heap spray patterns)
- Monitor NGINX error logs for unexpected worker process crashes or restarts
- Restrict network access to NGINX management interfaces
- Consider rate limiting on potentially vulnerable endpoints
Detection & Hunting
Indicators of Exploitation:
- Unexpected worker process crashes or restarts (visible in NGINX error logs)
- HTTP requests containing URIs with long sequences of escapable characters (e.g.,
++++++++++++,%%%%%%%%,&&&&&&) - Multiple concurrent requests following the same suspicious pattern
- Unusual child processes spawned from NGINX worker (for RCE cases)
Log Sources to Monitor:
- NGINX
access.log(request URIs with many escapable characters) - NGINX
error.log(worker process crashes:worker process XXX exited on signal 11) - System logs (
/var/log/syslog,journalctl-u nginx)
Potential SIEM Queries:
Look for requests where the URI contains % sequences or large numbers of + and & characters not typical in normal traffic.
Post-Incident Response
If exploitation is suspected:
- Isolate affected system from the network immediately.
- Preserve forensic evidence (core dumps, logs, network captures).
- Investigate the NGINX error.log to identify worker crashes and the triggering requests.
- Audit rewrite rules to confirm vulnerable configuration is present.
- Check for signs of persistence (cron jobs, SSH keys, unauthorized configuration changes).
- Rotate any credentials or keys that were accessible via the NGINX configuration.
- Apply the official patch to all NGINX instances.
- Assume full compromise if RCE is confirmed—rebuild affected systems from a trusted source.
References
- https://nvd.nist.gov/vuln/detail/CVE-2026-42945
- https://github.com/rheodev/CVE-2026-42945
- https://github.com/cipherspy/CVE-2026-42945-POC
- https://almalinux.org/blog/2026-05-13-nginx-rift-cve-2026-42945
- https://developers.cloudflare.com/changelog/post/2026-05-15-emergency-waf-release
- https://cwe.mitre.org/data/definitions/122.html
- https://www.tenable.com/cve/CVE-2026-42945
بررسی آماری آسیب پذیری CVE-2026-42945 در کشور ایران
محصول آسیب پذیر: وب سرور NGINX Open Source (نسخههای 0.6.27 تا 1.30.0) و NGINX Plus (نسخههای R32 تا R36)
میزان استفاده در ایران بر اساس سایت های آمار مرتبط با محصول
طبق دادههای W3Techs در می 2026، NGINX با سهم حدود 65% از وبسایتهایی که سهم وبسرور در آنها مشخص است، محبوبترین وبسرور در ایران محسوب میشود. این سهم بالا به این معناست که از هر سه وبسایت فعال در کشور، تقریباً دو سایت روی NGINX اجرا میشوند.
میزان استفاده در ایران بر اساس موتورهای جستجو (بر اساس ایندکس های گوگل در بخش tools)
تعداد در زمان نگارش گزارش
| موتور جستجو | Dork | تعداد |
| Shodan | nginx country:IR | 28,133 |
| Shodan | product:”nginx” country:”IR” | 26,422 |
| Shodan | country:IR http.component:”nginx” | 23,560 |
| Aguko | tech/nginx/ir | 100,700 |
| Censys | host.services.software.product = “nginx” and host.location.country=”Iran” | 3,312 |
وجود نمایندگی در ایران
NGINX به عنوان یک پروژه متنباز (open-source) توسط شرکت F5 Networks پشتیبانی میشود. این شرکت دفتر رسمی یا نمایندگی در ایران ندارد. کاربران ایرانی برای دریافت و پشتیبانی از NGINX عمدتاً به مخازن نرمافزاری و انجمنهای آنلاین تکیه دارند. اما هیچ گونه پشتیبانی رسمی از طرف شرکت سازنده در کشور وجود ندارد.
میزان استفاده بر اساس گزارشات تحقیقات بازار برای این محصول در ایران
اگرچه آمار رسمی و دقیقی از تعداد سیستمهای آسیبپذیر در ایران وجود ندارد، اما شواهد زیر نشاندهنده سطح قابل توجه ریسک است.
- استفاده از NGINX در ایران: طبق دادههای وبسایت ردیابی تکنولوژی W3Techs، NGINX با سهم 65% از وبسایتهایی که سهم وبسرور آنها قابل شناسایی است، محبوبترین وبسرور در ایران محسوب میشود. این سهم بالاتر از میانگین جهانی (حدود 34%) است و نشاندهنده استقبال ویژه کاربران ایرانی از NGINX میباشد.
- محبوبیت در بین کاربران فارسیزبان: وجود مقالات آموزشی متعدد، راهنماهای نصب و پیکربندی، و ویدیوهای آموزشی به زبان فارسی در وبسایتهای معتبر ایرانی و کانالهای یوتیوب فارسی، به وضوح نشاندهنده کاربرد گسترده این وبسرور در جامعه توسعهدهندگان و مدیران وبسایتهای ایرانی است.
- تخمین میزان استفاده: با توجه به آمار کلی وبسایتهای فعال ایران (بر اساس گزارشهای ثبت دامنه .ir) و سهم 65% NGINX، میتوان تخمین زد که دست کم دهها هزار وبسایت و سرور ایرانی از NGINX استفاده میکنند:
منابع
https://nvd.nist.gov/vuln/detail/CVE-2026-42945
https://w3techs.com/technologies/history_overview/web_server/