ما الذي يصلحه nginx 1.30.6 و1.31.7
صدر الإصداران في اليوم نفسه، 14 أكتوبر 2026، على صفحة أخبار nginx.org. وهما يصلحان خمس ثغرات في عملية worker: ثلاث حالات إفساد للذاكرة، وحقن بيانات في جسم طلبات HTTP/3، وتزوير جلسة TLS. ثم صدر إصدار mainline 1.31.8 في 21 أكتوبر 2026؛ لا يذكر إعلانه أي ثغرة، لكنه يلي 1.31.7 فيتضمن إصلاحاتها.
أما الخطورة فلها قراءتان، ويجب نقلهما كما نُشرتا. تصنّف صفحة النشرات الأمنية في nginx.org الثغرات الخمس بدرجة «medium». وتمنح سجلات CVE التي نشرتها F5، الجهة المطوّرة لـ nginx، ثلاثًا منها درجة CVSS 3.1 تبلغ 8.1. وهي توضّح السيناريو: تتعطل عملية worker ثم تُعاد، ويبقى تنفيذ الشيفرة ممكنًا إذا كان ASLR معطّلًا أو جرى تجاوزه. وكلها تتطلب إعدادات محددة لتكون قابلة للاستغلال. وهذا ما يجعل الجرد مجديًا: في أي مجموعة خوادم، جزء منها غير معنيّ أصلًا.
الثغرات الخمس وما يجعلك مكشوفًا
- CVE-2026-15176، alias وrewrite — فيض في الكومة داخل worker عندما يجمع
locationبينaliasوrewriteوتوجيهsetأوreturnيقرأ$request_filename، أو عندما يرد$request_filenameفيlog_format. النطاق المتأثر: من 0.1.29 إلى 1.31.6. - CVE-2026-93479، السلاسل ذات المتغيرات — فيض أثناء حساب جذر المستندات أو التسجيل، وغالبًا عبر
mapبتعبير نمطي تُقرأ التقاطاته$1و$2منrootأوlog_formatقبل متغيّر الخرج. النطاق المتأثر: من 1.30.0 إلى 1.30.5 ومن 1.31.2 إلى 1.31.6. - CVE-2026-95101، جسم طلب HTTP/3 — قد يُقرأ جزء من إطار مجهول على أنه جسم الطلب: تجاوز
client_max_body_sizeأو حقن في الطلب المُمرَّر، معproxy_request_buffering on، وهي القيمة الافتراضية. النطاق المتأثر: من 1.25.0 إلى 1.31.6. - CVE-2026-97629، تذاكر جلسات TLS — مع
ssl_session_cache shared:…ودونssl_session_ticket_key، يدوّر nginx مفاتيحه بنفسه؛ وكان أحدها يبقى دون تهيئة، ما يتيح تزوير جلسة، وبحسب F5 تجاوز التحقق من شهادة العميل. النطاق المتأثر: من 1.23.2 إلى 1.31.6. - CVE-2026-97205، SSI مع AIO — استخدام بعد التحرير (use-after-free) عندما يكون
aioمفعّلًا وتحتوي صفحة SSI على أوامرinclude virtual. النطاق المتأثر: من 0.8.11 إلى 1.31.6. - الخطورة المنشورة — «medium» للخمس على nginx.org. وبحسب سجلات CVE من F5، تبلغ درجة CVSS 3.1 8.1 لكل من CVE-2026-15176 وCVE-2026-93479 وCVE-2026-97205، و6.5 لـ CVE-2026-97629، و5.3 لـ CVE-2026-95101.
الإصدارات المتأثرة والإصدارات المصحَّحة
مرّر الجدول أفقيًا
| الثغرة أو الحزمة | الإصدارات المتأثرة | صُحّحت في |
|---|---|---|
| CVE-2026-15176 — alias وrewrite | من 0.1.29 إلى 1.31.6 | 1.30.6 و1.31.7 |
| CVE-2026-93479 — السلاسل ذات المتغيرات | من 1.30.0 إلى 1.30.5، ومن 1.31.2 إلى 1.31.6 | 1.30.6 و1.31.7 |
| CVE-2026-95101 — HTTP/3 | من 1.25.0 إلى 1.31.6 | 1.30.6 و1.31.7 |
| CVE-2026-97629 — تذاكر TLS | من 1.23.2 إلى 1.31.6 | 1.30.6 و1.31.7 |
| CVE-2026-97205 — SSI مع AIO | من 0.8.11 إلى 1.31.6 | 1.30.6 و1.31.7 |
| حزمة Debian 13 (trixie) | الحزم السابقة لـ `1.26.3-3+deb13u10` | `1.26.3-3+deb13u10` (DSA-6575-1) |
| حزمة Debian 12 (bookworm) | مصنّفة متأثرة حتى 22 أكتوبر 2026 | لم تُنشر بعد |
| حزم Ubuntu | «Needs evaluation» حتى 22 أكتوبر 2026 | لم تُنشر بعد |
حزمة التوزيعة أو Docker: رقم الإصدار لا يكفي
هذا هو الاعتراض الأكثر شيوعًا على مجموعة خوادم غير متجانسة: يعرض nginx -v الإصدار 1.26.3 أو 1.22.1، أي أقل بكثير من 1.30.6، ومع ذلك قد يكون الجهاز مصحَّحًا. فالتوزيعات تنقل الإصلاحات الأمنية إلى فرعها الخاص دون تغيير رقم الإصدار الأصلي، ولا يتغير إلا لاحق الحزمة. وقد فعلت Debian ذلك لـ trixie عبر النشرة DSA-6575-1 التي تغطي الثغرات الخمس. وفي المقابل، حتى 22 أكتوبر 2026، كان متتبّع الأمان في Debian لا يزال يصنّف bookworm متأثرًا، وكانت Ubuntu تعرض «Needs evaluation» لكل إصداراتها المتابَعة.
فالتحقق الموثوق الوحيد هو سجل تغييرات الحزمة المثبّتة: zgrep -l CVE-2026-15176 /usr/share/doc/nginx*/changelog.Debian.gz على Debian أو Ubuntu، وrpm -q --changelog nginx | grep CVE-2026-15176 على RHEL أو AlmaLinux أو Rocky. وجود سطر يعني أن الإصلاح نُقل؛ وعدم وجود أي شيء يعني أنه لم يُنقل بعد. أما في Docker فالوسم هو المعيار: الصور الرسمية nginx:1.30.6 وnginx:1.31.7 متاحة على Docker Hub، والصورة المثبّتة على وسم أقدم تبقى متأثرة ما لم تُستبدل.
جرد تعرّض خادم في عشر دقائق
تسجيل الإصدار والمصدر
يعطي
nginx -vإصدار الملف التنفيذي. ومصدر الحزمة هو ما يحدد طريقة التحديث:apt-cache policy nginxعلى Debian أو Ubuntu (مستودع nginx.org أو التوزيعة)rpm -qi nginx | grep -E 'Version|Release|Vendor'على RHEL ومشتقاتها
وإذا كان nginx يعمل داخل حاوية:docker ps | grep -i nginx.سرد الوحدات المُجمَّعة
nginx -V 2>&1 | tr ' ' '\n' | grep -E 'http_v3|ssi|threads|file-aio'
بدون--with-http_v3_moduleلا تعنيك CVE-2026-95101. أما وحدة SSI فتُجمَّع افتراضيًا، ولا يستبعدها إلا الخيار--without-http_ssi_module.تصدير الإعدادات الفعلية
sudo nginx -T > /root/nginx-conf.txt 2>&1
يختبرnginx -Tالإعدادات ويطبعها كاملة بما فيها الملفات المُضمَّنة. استعلم هذا الملف بدل تصفّح/etc/nginxيدويًا: يكفيincludeمنسيّ لتفويت توجيه.البحث عن alias و$request_filename (CVE-2026-15176)
grep -nE '^\s*(alias|rewrite)\s' /root/nginx-conf.txtgrep -n 'request_filename' /root/nginx-conf.txt
أنت مكشوف إذا جمعlocationواحد بينaliasوrewriteوsetأوreturnيقرأ$request_filename، أو إذا احتوىlog_formatعلى هذا المتغيّر.البحث عن map بتعابير نمطية (CVE-2026-93479)
grep -nA8 '^\s*map ' /root/nginx-conf.txt
حدّد المدخلات التي تبدأ بـ~، ثم ابحث عن$1و$2في توجيهاتrootوlog_format. لا تمسّ هذه الثغرة إلا الفرعين 1.30 و1.31: الخادم على 1.28 أو أقدم غير معنيّ.التحقق من HTTP/3 (CVE-2026-95101)
grep -nE 'listen\s.*quic|http3' /root/nginx-conf.txtgrep -n 'proxy_request_buffering' /root/nginx-conf.txt
HTTP/3 مفعّل أمامproxy_passدونproxy_request_buffering off: مكشوف.التحقق من تذاكر TLS (CVE-2026-97629)
grep -nE 'ssl_session_cache\s.*shared|ssl_session_ticket_key|ssl_session_tickets' /root/nginx-conf.txt
مكشوف إذا وُجدshared:دونssl_session_ticket_keyودونssl_session_tickets off. ويخص الأثر الذي تصفه F5 أساسًا المواقع التي توثّق عملاءها بالشهادات (ssl_verify_client).التحقق من SSI وAIO (CVE-2026-97205)
grep -nE '^\s*(ssi|aio)\s' /root/nginx-conf.txt
مكشوف إذا انطبقssi onوaio(بالقيمةonأوthreads) على الصفحات نفسها، وكانت تلك الصفحات تحتوي على أوامرinclude virtual.
بأيّ ترتيب تعالج مجموعة خوادم
بهذه الفحوص الثمانية، يقع كل خادم في واحدة من ثلاث خانات. الخانة الأولى: يوجد شرط تعرّض والخادم يستقبل حركة عامة. يُرقَّع اليوم، أو يتلقى حلًا مؤقتًا خلال ساعة. وتأتي في المقدمة الوكلاء العكسية (reverse proxies) التي تخدم HTTP/3 والمواقع التي توثّق بشهادة العميل، لأن الأثر الموصوف يمسّ الطلب المُمرَّر أو التوثيق نفسه.
الخانة الثانية: لا يوجد أي شرط، لكن الإصدار ضمن النطاق المتأثر. الخطر الفوري منخفض، ويُجدول التحديث خلال الأسبوع. فالإعدادات تتغير، ويكفي alias يضيفه مطوّر غدًا لإعادة فتح CVE-2026-15176.
الخانة الثالثة: إصدار مصحَّح أصلًا، أو حزمة توزيعة يذكر سجل تغييراتها الثغرات. لا شيء يُفعل سوى تسجيل تاريخ الفحص. احتفظ بهذا الجدول لكل عميل: فهو أيضًا الجواب الذي تقدّمه حين يسألك عميل إن كان معنيًّا.
التحديث بيئة تلو الأخرى
مستودع nginx.org على Debian أو Ubuntu
sudo apt update && sudo apt install --only-upgrade nginx
بعدها يجب أن يعرضnginx -vالإصدار 1.30.6 على الفرع المستقر، أو 1.31.7 وما بعده على mainline.مستودع nginx.org على RHEL أو AlmaLinux أو Rocky
sudo dnf upgrade nginx
التحقق نفسه عبرnginx -v. وتُشرح طريقة إعداد المستودع للعائلتين في صفحة Linux packages على nginx.org.حزمة التوزيعة
على Debian 13، يجب أن يجلب
sudo apt update && sudo apt install --only-upgrade nginxالحزمة1.26.3-3+deb13u10أو أحدث. وفي غيرها، طبّق التحديثات الأمنية فور صدورها وتحقق من سجل التغييرات كما سبق. وإذا تأخرت توزيعتك، يمكنك الانتقال إلى مستودع nginx.org؛ تأكد أولًا من توفر الوحدات الديناميكية التي تعتمد عليها فيه.حاويات Docker
في ملف compose، ثبّت
image: nginx:1.30.6(أوnginx:stable)، ثم:docker compose pull && docker compose up -d
أما الصورة المبنية بـFROM nginx:…فيُعاد بناؤها:docker compose build --pull && docker compose up -d.خادم تديره لوحة تحكم أو جهة استضافة
إذا ثُبّت nginx عبر لوحة إدارة أو من قِبل جهة الاستضافة، فقناة التحديث الخاصة بها هي التي تسلّم الإصلاح. تحقق من
nginx -vومن سجل تغييرات الحزمة بعد تحديثها، وعند الشك، اسأل جهة الاستضافة عن تاريخ تطبيق الإصلاح.اختبار الإعدادات
sudo nginx -t
يجب أن يتضمن الردsyntax is okوtest is successful. لا تُعِد التشغيل أبدًا دون هذا الاختبار: الإعدادات غير الصالحة تترك الخدمة متوقفة.استبدال الملف التنفيذي في الذاكرة
تحديث الحزمة لا يستبدل العملية الرئيسية العاملة. يعرض
sudo ls -l /proc/$(cat /run/nginx.pid)/exeالعبارة(deleted)ما دام الملف التنفيذي القديم يعمل (عدّل مسار ملف PID حسب نظامك). يسببsudo systemctl restart nginxانقطاعًا لثوانٍ؛ أما الاستبدال الفوري عبر الإشارةUSR2، الموثّق لدى nginx، فيتفادى هذا الانقطاع لكنه يتطلب معرفة جيدة بإعدادات systemd لديك.التحقق ثم المراقبة
أعد تشغيل
nginx -vوأمر/proc: لم تعد(deleted)تظهر. اختبر موقعًا بـcurl -sI https://your-domain.com. ثم أضف تنبيهًا على إعادة تشغيل عمليات worker، كما في دليلنا المراقبة والتنبيه الاستباقي على VPS.
يتعذر الترقيع اليوم: الحلول المؤقتة التي نشرتها F5
تصف سجلات CVE من F5 حلًا مؤقتًا لكل واحدة من الثغرات الخمس. وهي تزيل شرط التعرّض دون إصلاح الشيفرة: إنها تدابير انتظار.
CVE-2026-15176: عدم استخدام alias في location المعني، أو عدم استخدام $request_filename.
CVE-2026-93479: استبدال الالتقاطات غير المسماة بالتقاطات مسماة من نوع (?<site>…)، وحصر استخدامها في الكتلة التي يُطبَّق فيها التعبير النمطي.
CVE-2026-95101: proxy_request_buffering off;. عندها يُرسل جسم الرفع إلى التطبيق تدفقًا، ما يغيّر سلوكه مع الملفات الكبيرة.
CVE-2026-97629: إزالة ssl_session_cache shared:…، أو تحميل مفاتيح ثابتة عبر ssl_session_ticket_key (ملف يُنشأ بـ openssl rand 80 > /etc/nginx/ticket.key). والخوادم التي تعمل بـ ssl_session_tickets off; غير معنية.
CVE-2026-97205: تعطيل aio، أو التوقف عن تقديم صفحات SSI.
يُتحقق من كل حل مؤقت بـ nginx -t ثم systemctl reload nginx. وتكفي إعادة التحميل هنا لأن الملف التنفيذي لا يتغير.
الرصد: مؤشرات لا أدلة
تترك عملية worker التي تتعطل سطرًا من نوع worker process 12345 exited on signal 11 في سجل الأخطاء. عُدّها بـ grep -c 'exited on signal' /var/log/nginx/error.log وقارن بالأسابيع السابقة. الأعطال المتكررة على خادم مكشوف مؤشر يستحق التحقيق، لا دليل على الاختراق؛ وغيابها ليس دليلًا على السلامة أيضًا. تدبير عام، خارج نشرة الجهة المطوّرة: قيّد في الجدار الناري المضيفات الافتراضية (vhosts) التي لا يلزم أن تكون عامة، كما تفصّل قائمة تحصين خادم VPS بنظام Linux.
استكشاف الأخطاء: ما يظهر بعد التحديث
يعرض nginx -v الإصدار 1.30.6، لكن لم يتغير شيء. الملف التنفيذي على القرص جديد، والعملية الرئيسية هي القديمة. يُظهر ذلك الأمر ls -l /proc/<pid>/exe مع العلامة (deleted). العلاج: إعادة تشغيل الخدمة، أو الاستبدال الفوري بـ USR2.
nginx: [emerg] "/etc/nginx/ticket.key" must be 48 or 80 bytes. ملف مفتاح التذاكر ليس بالحجم الصحيح، وغالبًا لأنه أُنشئ بترميز base64 أو مع سطر جديد في آخره. العلاج: openssl rand 80 > /etc/nginx/ticket.key دون أي خيار ترميز، ثم nginx -t.
nginx is already the newest version. مستودع توزيعتك لا يقدّم حزمة مصحَّحة بعد. العلاج: تطبيق الحلول المؤقتة أعلاه ومتابعة متتبّع الأمان في التوزيعة، أو الانتقال إلى مستودع nginx.org.
الحاوية لا تزال تردّ بالإصدار القديم. سُحبت الصورة، لكن الحاوية لم يُعَد إنشاؤها، أو أن الخدمة تشير إلى وسم مثبّت. العلاج: docker compose up -d --force-recreate، ثم docker compose exec <service> nginx -v.
خمس ثغرات على عشرين خادمًا: عبء الوكالة
بالنسبة إلى الوكالة، هذا الإصلاح ليس أمرًا واحدًا، بل جولة على كل الخوادم. خادم لكل عميل، ومصادر مختلفة (حزمة Debian هنا، ومستودع nginx.org هناك، وصورة Docker في مكان آخر)، وإعدادات كتبها أكثر من شخص. وكل جهاز يتطلب الجرد والتحديث وإعادة التشغيل والتحقق، ثم الرد على العميل القلِق.
الطريقة الأدوم لتقليص هذا العبء هي تقليص عدد خوادم الويب التي تديرها بنفسك. مع استضافة الموزعين من ServOrbit.com، تعمل مواقع عملائك في حسابات cPanel تديرها من WHM، تحت علامتك التجارية: تحتفظ أنت بالعلاقة مع العميل وبأسعارك، ونتولى نحن البنية التحتية. وللأجهزة التي يجب أن تبقى بصلاحيات root، يتوفر خيار الإدارة على خوادم VPS Cloud لدينا. وإن كنت لا تزال تتردد في اختيار الوكيل العكسي لهذه الأجهزة، فإن مقارنتنا بين Caddy وTraefik وnginx تعرض المعايير.