
تدقيق ثغرات CVE لخوادم الويب nginx وApache مع مراعاة شروط الاستغلال (Trigger-aware). يتجاوز مجرد مطابقة الإصدارات من خلال التحقق مما إذا كان مسار الكود المعرّض للخطر قابلًا للوصول فعليًا في إعدادك. يصنّف النتائج إلى: نشط (Active) / كامن (Latent) / غير مُتحقَّق (Unverified). أداة من ملف واحد بلغة Python 3.5+، دون أي تبعيات.
لا تسأل ما إذا كنت معرّضًا للثغرات؛ اسأل ما إذا كنت قابِلًا للاستغلال.
أداة Python من ملف واحد تفحص nginx وApache بحثًا عن ثغرات CVE المعروفة عبر التحقق من كلٍّ من الإصدار المثبَّت و ما إذا كان مسار الكود المعرَّض للخطر قابلًا للوصول فعليًا من خلال إعداداتك.
تتوقف معظم ماسحات CVE عند مطابقة الإصدار: «nginx 1.18.0 — CVE-2026-42945، الشدّة HIGH، أنت معرّض للثغرة». لكن العديد من ثغرات CVE تتطلب نمط إعدادات محددًا لتكون قابلة للاستغلال. الماسح الذي يتجاهل الإعدادات يُغرِقك بتنبيات حمراء لا تعكس المخاطر الحقيقية — والأسوأ من ذلك، أنه قد يُخفي المخاطر الكامنة التي ستصبح حقيقية إذا تغيّرت إعداداتك غدًا.
web_server_audit يجيب عن سؤالين منفصلين لكل CVE:
ودمج هذين السؤالين يمنحنا ثلاثة تصنيفات صادقة:
| التصنيف | المعنى |
|---|---|
| 🔴 خطر استغلال نشط | إصدار معرَّض للثغرة و مُشغِّل حاضر. قابل للاستغلال اليوم. |
| 🟡 خطر كامن | إصدار معرَّض للثغرة دون مُشغِّل. يصبح قابلًا للاستغلال إذا أدخلت تغييرات الإعدادات هذا النمط. |
| ⚪ غير مُتحقَّق | الإعدادات غير قابلة للقراءة؛ الحالة غير معروفة. |
git clone https://github.com/YOUR_USERNAME/web-server-audit.git
cd web-server-audit
sudo python3 web_server_audit.py
| CVE | الشدّة | نمط المُشغِّل |
|---|---|---|
| CVE-2026-42945 (Rift) | HIGH | rewrite + التقاط غير مُسمّى ($1,$2) + ? في الاستبدال |
| CVE-2026-42946 | MEDIUM | استخدام scgi_pass أو uwsgi_pass |
| CVE-2026-40701 | MEDIUM | وجود ssl_stapling on وresolver معًا |
| CVE-2026-42934 | LOW | توجيهات charset/charset_types/source_charset |
قائمة CVE الخاصة بـ Apache فارغة حاليًا لكن البنية جاهزة — انظر التوسيع أدناه.
إلى جانب ثغرات CVE، تُبلِّغ الأداة أيضًا عن:
/proc/sys/kernel/randomize_va_space) — يعمل ASLR الكامل على تقليل قابلية استغلال RCE لثغرات الذاكرة بشكل ملموسesm-infra وesm-appsnginx وapache2 وsystemctl وss وjournalctl عند توفّرها؛ ويتخطى الفحوصات بأمان في الحالات الأخرى# Compact report (default — hides OK lines)
sudo python3 web_server_audit.py
# All findings including OK lines
sudo python3 web_server_audit.py --verbose
# No ANSI colors (good for pipes, logs, CI output)
sudo python3 web_server_audit.py --no-color
# Machine-readable JSON
sudo python3 web_server_audit.py --json
| الكود | المعنى |
|---|---|
| 0 | لا توجد مشكلات |
| 1 | تحذيرات أو نتائج حرجة غير مرتبطة بـ CVE فقط |
| 2 | توجد CVE واحدة على الأقل قابلة للاستغلال بنشاط |
كود الخروج 2 إشارة فشل طبيعية في CI/CD.
========================================================================
Web Server Audit - 2026-05-16T01:24:55
Host: web-prod-01
web_server_audit.py v1.0.0 - SiberSAN - MIT License
========================================================================
[system]
------------------------------------------------------------------------
[OK] OK ASLR fully enabled (randomize_va_space=2)
[i] INFO OS: Ubuntu 18.04.6 LTS
[!] WARN Ubuntu 18.04 is in ESM-only support
[nginx] version 1.18.0 (active)
------------------------------------------------------------------------
[i] INFO nginx listening on: 0.0.0.0:80, 0.0.0.0:443
[i] INFO CVE-2026-42945 (HIGH): version vulnerable but NOT triggered
Trigger: rewrite + unnamed capture ($1,$2) + '?' in replacement
Evidence: No rewrite directives in configuration
[i] INFO CVE-2026-42946 (MEDIUM): version vulnerable but NOT triggered
[!] WARN nginx installed from PPA (1.18.0-3ubuntu1+bionic1)
========================================================================
Real-risk summary
------------------------------------------------------------------------
ACTIVE EXPLOITATION RISK: none detected.
LATENT RISK - vulnerable version, no trigger in config (3):
- [nginx] CVE-2026-42945 (HIGH)
- [nginx] CVE-2026-42946 (MEDIUM)
- [nginx] CVE-2026-42934 (LOW)
These become exploitable if config changes introduce the trigger.
Mitigation: config-change discipline + plan upgrade.
========================================================================
Findings: 0 critical, 2 warnings
========================================================================
إضافة CVE جديدة تتطلب خطوتين.
1. اكتب دالة مُشغِّل تأخذ نص الإعدادات الكامل (مخرجات nginx -T) وتُرجع (triggered: bool, evidence: str):
def _trigger_my_cve(conf):
hits = [l for l in conf.splitlines() if re.search(r'risky_directive', l)]
if hits:
return True, "Found: " + hits[0]
return False, "Pattern not present"
2. أضِف الإدخال إلى NGINX_CVES (أو APACHE_CVES):
{
"id": "CVE-XXXX-NNNNN",
"name": "Descriptive name",
"severity": "HIGH",
"affected": ("1.10.0", "1.25.0"),
"fixed_in": ["1.25.1"],
"trigger_desc": "Human-readable trigger description",
"trigger_fn": _trigger_my_cve,
},
هذا كل شيء. يتولى الإطار التعامل مع التصنيف وتنسيق المخرجات وJSON وأكواد الخروج والملخص التنفيذي تلقائيًا.
--verbose لفحص التفاصيل عند الشك.نرحب بطلبات السحب (Pull requests)، وبالإبلاغ عن المشكلات (Issues)، وبكاشفات CVE الجديدة، وبالدعم لخوادم ويب إضافية (lighttpd وCaddy وHAProxy وغيرها).
عند اقتراح كاشف CVE جديد، يُرجى تضمين:
أُصدرت بموجب MIT License.
Copyright (c) 2026 SiberSAN