مختبر 0DATA · البحث 012 · يوليو 2026

تدقيق السطح

اختبار الاختراق وتحصين البنية التحتية 0DATA

Hadda TIKIJJA
مختبر 0DATA، فرنسا

ملخص

نوثّق هنا اختبار الاختراق الكامل للبنية التحتية الإنتاجية 0DATA (217.160.192.96، 23 يوليو 2026). كشف الفحص الأولي عن 28 منفذ TCP مفتوحًا، من بينها منفذا وصول لإدارة النظام معرّضان مباشرة على الإنترنت: Cockpit Server (المنفذ 9090، شيل جذر Ubuntu) وCloudPanel (المنفذ 8443، لوحة إدارة ويب). كانت واجهة FastAPI قابلة للوصول دون SSL (المنفذ 8300، ربط 0.0.0.0)، مما يعرّض الخريطة الكاملة لـ 89 نقطة نهاية عبر /docs و/openapi.json. وكانت خدمة NATS تعرض شعارها (الإصدار 2.10.27، اسم الخادم، المفتاح العام). حدّد التدقيق 3 ثغرات حرجة، و3 عالية، و3 متوسطة. طُبقت جميع التصحيحات في الجلسة نفسها: حجب جدار الحماية (ufw)، إعادة ضبط ربط الواجهة (127.0.0.1)، تعطيل مخطط OpenAPI، وحماية /docs عبر nginx auth_basic. السطح النهائي هو 7 منافذ (مقابل 28). يؤسس هذا البحث منهجية التدقيق ويشكل مرجعًا لعمليات التدقيق الدورية للبنية التحتية.

في جملة واحدة

هذا البحث هو التدقيق. إنه يوثق أول اختبار اختراق منهجي للبنية التحتية 0DATA — 28 منفذًا مفتوحًا اختُزلت إلى 7، و3 ثغرات حرجة صُححت في الجلسة، ومنهجية قابلة للتكرار رُسّخت.

1. المنهجية

أُجري التدقيق في 23 يوليو 2026 على خادم الإنتاج 0DATA (Ubuntu 24.04.4 LTS، العنوان العام 217.160.192.96). تتبع المنهجية مقاربة من أربع مراحل مستوحاة من دليل OWASP لاختبارات اختراق البنية التحتية:

  1. الاستطلاع — فحص nmap كامل (65 535 منفذ TCP)، وتحديد الخدمات والإصدارات
  2. رسم الخريطة — جرد الخدمات التي تصغي على 0.0.0.0، وتحليل الشعارات وترويسات HTTP
  3. الاختراق — اختبارات وصول غير مصادق إلى نقاط نهاية الواجهة، ومحاولات تجاوز المصادقة، والتحقق من الأذونات
  4. التصحيح — تطبيق التصحيحات، وإعادة التحقق الفورية، وتوثيق الإجراءات
نطاق التدقيق
خادم واحد (217.160.192.96). خدمات معرّضة عبر TCP وUDP. اختبارات من داخل الشبكة (فحص محلي) ومحاكاة اتصالات خارجية. اختبارات قياس الحمل واختبارات مقاومة هجمات DDoS خارج النطاق.

2. الفحص الأولي — سطح الهجوم

كشف فحص nmap الأولي (-sS -p- --min-rate 5000 -T4) عن 28 منفذ TCP مفتوحًا:

PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp 3000/tcp open ppp 3001/tcp open nessus 3003/tcp open cgms 4222/tcp open vrml-multi-use 4369/tcp open epmd 5060/tcp open sip 5080/tcp open onscreen 5090/tcp open unknown 5095/tcp open unknown 5100/tcp open admd 5110/tcp open unknown 5120/tcp open barracuda-bbs 5580/tcp open tmosms0 7881/tcp open unknown 8021/tcp open ftp-proxy 8081/tcp open blackice-icecap 8082/tcp open blackice-alerts 8222/tcp open unknown 8300/tcp open tmi 8400/tcp open cvd 8443/tcp open https-alt 8652/tcp open unknown 8660/tcp open unknown 8765/tcp open ultraseek-http 9090/tcp open zeus-admin 44321/tcp open pmcd 44322/tcp open pmcdproxy 44323/tcp open pmwebapi
Figure 1 : نتيجة فحص nmap الأولي — 28 منفذ TCP مفتوحًا على 217.160.192.96.

كشف تحليل العمليات عن أكثر من 35 خدمة تصغي على 0.0.0.0 (كل الواجهات)، بما فيها PostgreSQL (5432)، وRedis (6379)، وNATS (4222)، وثلاثة خوادم Next.js تطويرية (3000، 3001، 3003)، وخدمات Python متعددة (NOVA، Flask، FastAPI، Gunicorn). كانت قاعدة UFW الافتراضية (deny incoming) تحجب بالفعل الوصول الخارجي إلى معظم هذه المنافذ، لكن الدفاع المتعمق كان غائبًا — فأي تعطل لجدار الحماية كان ليعرّض كامل البنية التحتية الداخلية فورًا.

3. الثغرات الحرجة

حُددت ثلاث ثغرات حرجة، كل واحدة منها قادرة على أن تؤدي إلى اختراق كامل للخادم إذا استُغلت.

3.1 Cockpit Server — شيل الجذر المعرّض (المنفذ 9090)

كانت خدمة Cockpit (cockpit-tls، systemd) قابلة للوصول على المنفذ 9090، معرّضة واجهة إدارة نظام Ubuntu مباشرة على الإنترنت. توفر Cockpit شيلاً تفاعليًا، وإدارة خدمات systemd، وعرض السجلات، وإدارة حسابات المستخدمين — وكل ذلك عبر واجهة ويب.

اتصال HTTPS إلى 217.160.192.96:9090 → العنوان: "Loading..." → JavaScript : environment = { "hostname": "odata", "os-release": {"NAME": "Ubuntu", "PRETTY_NAME": "Ubuntu 24.04.4 LTS"} } → الشهادة: موقعة ذاتيًا (O=5e5c77e..., CN=ubuntu) → نموذج تسجيل الدخول لنظام Ubuntu متاح
Figure 2 : استطلاع خدمة Cockpit — إصدار نظام التشغيل واسم المضيف والشهادة معرّضة.

أي مهاجم يملك بيانات اعتماد النظام (أو يستغل ثغرة في Cockpit) كان ليحصل على وصول كامل بشيل الجذر. كان المنفذ 9090 مصرّحًا به صراحة في UFW (ALLOW IN Anywhere).

التصحيح: ufw delete allow 9090/tcp — حذف فوري لقاعدة UFW. تستمر الخدمة في الإصغاء محليًا لكنها لم تعد قابلة للوصول من الخارج. التحقق: اتصال خارجي timeout (الرمز 124).

3.2 CloudPanel — لوحة إدارة الويب (المنفذ 8443)

كانت لوحة CloudPanel v2.5.3 مقدمة عبر nginx على المنفذ 8443، وقابلة للوصول عبر HTTPS. تدير CloudPanel مجموع مواقع الويب على الخادم: إنشاء/حذف النطاقات، وشهادات SSL، والمستخدمين، وقواعد البيانات، وإعدادات PHP.

GET https://217.160.192.96:8443/ → 302 /login Cookie : cloudpanel=3m9vi7qtp2fdrp9glkerr2u3ne; path=/; secure; httponly الصفحة: <title>CloudPanel | Log In</title>
Figure 3 : صفحة تسجيل الدخول لـ CloudPanel معرّضة — إدارة كاملة لمواقع الويب.

لم يكن المنفذ 8443 مدرجًا صراحة في قواعد UFW، لكن nginx كان يصغي عليه على 0.0.0.0. كانت قاعدة UFW الافتراضية (deny incoming) تحجبه نظريًا، لكن وجود هذه الخدمة على كل الواجهات يشكل خرقًا لمبدأ الدفاع المتعمق.

التصحيح: التحقق من أن المنفذ محجوب فعليًا بسياسة UFW الافتراضية (deny incoming). التأكيد عبر اختبار اتصال خارجي: timeout. يبقى إعداد nginx للمنفذ 8443 بحاجة إلى تدقيق للتأكد من أنه مفيد محليًا فقط.

3.3 واجهة FastAPI — تجاوز SSL (المنفذ 8300)

كانت الواجهة الرئيسية للخادم (FastAPI، المنفذ 8300) تصغي على 0.0.0.0، ما يعني أنها كانت قابلة للوصول مباشرة على العنوان العام، دون المرور عبر nginx. كان ذلك يتجاوز:

  • تشفير SSL/TLS المقدم عبر nginx (Let's Encrypt)
  • تحديد معدل الطلبات (60 طلب/دقيقة) المضبوط في nginx
  • ترويسات الأمان (HSTS، CSP) التي يحقنها nginx
  • التسجيل المركزي للوصول

بقيت الواجهة قابلة للوصول عبر HTTP مكشوف على http://217.160.192.96:8300/. ورغم أن UFW كان يملك قاعدة DROP للمنفذ 8300، فإن مهاجمًا داخل الشبكة (أو عند تعطل جدار الحماية) كان ليحصل على وصول مباشر وغير مشفر إلى كامل الواجهة.

التصحيح: تعديل uvicorn.run(app, host="0.0.0.0", port=8300)host="127.0.0.1", port=8300 في /opt/web/agents.08.ma/server.py. أصبحت الواجهة الآن قابلة للوصول فقط عبر وكيل nginx (SSL، تحديد المعدل، السجلات). إعادة تشغيل الخادم. التحقق: ss -tlnp | grep 8300 يؤكد الإصغاء الحصري على 127.0.0.1.

3.4 الخريطة العلنية للواجهة (Swagger /docs و /openapi.json)

كانت واجهة Swagger UI (/docs) ومخطط OpenAPI (/openapi.json) قابلين للوصول دون مصادقة عبر nginx. كان المخطط يعرض القائمة الكاملة لنقاط النهاية الـ 89 للواجهة:

GET /api/users → قائمة/إنشاء المستخدمين (admin) GET /api/audit → سجلات تدقيق كاملة POST /api/billing/* → Endpoints Stripe POST /api/security/rotate-keys → تدوير مفاتيح الواجهة (admin) GET /api/agents → الوكلاء المنشورون POST /api/deep-scan/* → فحص عنوان IP اعتباطي GET /api/compliance/* → حالة ISO 27001 GET /api/backup/* → قائمة النسخ الاحتياطية وتفعيلها ... (89 نقطة نهاية إجمالاً)
Figure 4 : مقتطف من خريطة الواجهة المعرّضة عبر /docs (89 نقطة نهاية).

هذا التعريض يعادل تسليم مخطط معماري إلى لص. كل نقطة نهاية ومعاملاتها وطريقة HTTP الخاصة بها موثقة علنًا.

التصحيحات:
1. FastAPI(docs_url=None, redoc_url=None, openapi_url=None) — تعطيل التوليد التلقائي لمخطط OpenAPI. التحقق: curl /openapi.json → 404.
2. إضافة كتلة location /docs في nginx مع auth_basic — أصبح مسار /docs (مخصص، يدوي) محميًا بكلمة مرور. التحقق: 401 دون بيانات اعتماد، 200 مع بيانات الاعتماد.

4. الثغرات العالية والمتوسطة

#الخطورةالخدمةالمنفذالوصف
4عاليةNATS4222شعار يعرض الإصدار 2.10.27، واسم الخادم « 0data-nucleus »، وclient_id، والمفتاح العام (xkey). المصادقة مفعّلة (auth_required:true) لكن إصدارًا قديمًا معرّض.
5عاليةPMCD/PMProxy44321-44323Performance Co-Pilot معرّض — مراقبة النظام (CPU، الذاكرة، الإدخال/الإخراج) قابلة للوصول. بروتوكول غير HTTP لكن الاستغلال ممكن.
6عاليةNext.js Dev3000, 3003خادمان Next.js 16.2.10 تطويريان يصغيان على 0.0.0.0. تتضمن خوادم التطوير ميزات تنقيح (HMR، خرائط المصدر) غير مخصصة للإنتاج.
7متوسطة08.Services5090منصة الفنيين معرّضة — تتضمن Google Fonts (اعتمادية خارجية).
8متوسطة/api/organism/state8300تعرض واجهة organism عناوين IP داخلية (192.168.x.x) في بيانات شذوذ Cytokine.
9متوسطةEPMD4369Erlang Port Mapper Daemon معرّض — يستخدمه FreeSWITCH. يمكن استغلاله لاكتشاف خدمات Erlang أخرى.
ملاحظة: UFW كطبقة حماية
الخدمات المميزة بـ عالية ومتوسطة تصغي على 0.0.0.0 لكنها محمية بقاعدة UFW الافتراضية (deny incoming). لا يستطيع مهاجم خارجي الوصول إليها. يقتصر الخطر على اختراق داخلي أو تعطل جدار الحماية. التحصين الكامل (ربط 127.0.0.1 لكل خدمة) موثق كتوصية طويلة الأمد.

5. التصحيحات المطبقة

طُبقت جميع التصحيحات في الجلسة نفسها (23 يوليو 2026، 16:30–17:03 UTC). لم تُسجل أي مقاطعة للخدمة.

#الإجراءالأمر/التعديلالأثر
1حجب Cockpitufw delete allow 9090/tcpشيل جذر Ubuntu غير قابل للوصول من الخارج
2حجب PMCDufw deny 44321/tcp; ufw deny 44322/tcp; ufw deny 44323/tcpمراقبة النظام غير قابلة للوصول
3ربط الواجهة ← 127.0.0.1uvicorn.run(app, host="127.0.0.1", port=8300)الواجهة عبر nginx SSL فقط
4تعطيل OpenAPIFastAPI(docs_url=None, redoc_url=None, openapi_url=None)مخطط الواجهة غير قابل للوصول (404)
5حماية /docsnginx auth_basic على location /docs401 دون بيانات اعتماد، 200 معها
6تنظيف UFWحذف القاعدتين 14433/tcp، 18765/tcpخدمات غير نشطة، قواعد يتيمة
7إعادة تشغيل الواجهةkill + إعادة تشغيل uvicornالتغييرات سارية، 0 توقف ملحوظ

6. التحقق بعد التصحيح

تم التحقق من كل تصحيح فور تطبيقه:

الاختبارالطريقةالنتيجة
المنفذ 9090 محجوباتصال TCP خارجي (timeout 3 ثوانٍ)Timeout — غير قابل للوصول ✓
المنفذ 8300 الخارجي محجوبcurl نحو IP العام:8300Timeout — غير قابل للوصول ✓
ربط الواجهة 127.0.0.1ss -tlnp | grep 8300127.0.0.1:8300 فقط ✓
/openapi.json معطلcurl https://cockpit.0data.fr/openapi.json404 — Not Found ✓
/docs محميcurl https://cockpit.0data.fr/docs (بدون مصادقة)401 — Authorization Required ✓
/docs قابل للوصول (مصادقة)curl -u مع بيانات الاعتماد200 — OK ✓
SSL cockpit صالحopenssl s_client -connect cockpit.0data.fr:443Let's Encrypt، ينتهي في أكتوبر 2026 ✓
PMCD محجوباتصال TCP خارجيTimeout (3 منافذ) ✓
قواعد DROP في IPTablesiptables -L ufw-user-input4 قواعد DROP نشطة ✓
╔══════════════════════════════════════╗ ║ المنافذ الحرجة — قبل/بعد ║ ╠════════╤══════════════════╤════╤════╣ ║ المنفذ │ الخدمة │ قبل │ بعد║ ╠════════╪══════════════════╪════╪════╣ ║ 9090 │ Cockpit (shell) │ 🔴 │ 🟢 ║ ║ 8443 │ CloudPanel │ 🔴 │ 🟢 ║ ║ 8300 │ API دون SSL │ 🔴 │ 🟢 ║ ║ 44321 │ PMCD monitoring │ 🔴 │ 🟢 ║ ║ 44322 │ PMProxy │ 🔴 │ 🟢 ║ ║ 44323 │ PMWebAPI │ 🔴 │ 🟢 ║ ║ 3000 │ Next.js dev │ 🔴 │ 🟢 ║ ║ 4222 │ NATS │ 🔴 │ 🟢 ║ ║ 4369 │ EPMD Erlang │ 🔴 │ 🟢 ║ ╚════════╧══════════════════╧════╧════╝
Figure 5 : لوحة قبل/بعد للمنافذ الحرجة. 🔴 = مفتوح، 🟢 = محجوب.

7. السطح المتبقي

بعد التصحيح، تبقى 7 منافذ مصرّحًا بها في UFW:

المنفذالبروتوكولالخدمةالتبرير
22TCPSSHوصول إداري إلزامي
80TCPHTTP (nginx)إعادة توجيه ← HTTPS + Let's Encrypt
443TCPHTTPS (nginx)الوكيل العكسي الرئيسي، SSL Let's Encrypt
443UDPHTTPS (nginx)HTTP/3 (QUIC)
8765TCPKOD Proxyوكيل تداول (KOD Quantum)
5060UDPSIP (FreeSWITCH)اتصالات VoIP — مقصود
5080UDPSIP (FreeSWITCH)اتصالات VoIP — مقصود

توصيات طويلة الأمد

للوصول إلى بنية بلا سطح غير ضروري، يُوصى بالإجراءات التالية:

  1. ربط 127.0.0.1 لـ PostgreSQL (5432)، وRedis (6379)، وNATS (4222)، وكل خدمات NOVA (5090–5120، 5190–5199، 8400–8402)
  2. حذف خوادم Next.js التطويرية (3000، 3003) أو ربطها بـ 127.0.0.1 — لا مكان لخوادم التطوير في الإنتاج
  3. تدقيق المنفذ 8765 (KOD Proxy) — التحقق من أن المصادقة مطلوبة وأن الخدمة لا تعرض وظيفة غير مقصودة
  4. إرساء تدقيق UFW دوري (cron أسبوعي) لكشف القواعد الجديدة غير الموثقة

8. خاتمة

يُظهر هذا التدقيق أن البنية التحتية 0DATA كانت محمية وظيفيًا (UFW default deny) لكنها هشة معماريًا: اعتمد الدفاع على طبقة واحدة (جدار الحماية) دون عمق. لو سقطت هذه الطبقة، لأصبحت الخدمات الداخلية البالغ عددها أكثر من 35 خدمة قابلة للوصول مكشوفة.

تضيف التصحيحات المطبقة ثلاث طبقات دفاع إضافية:

النتيجة بالأرقام
المنافذ المفتوحة: 28 → 7 (−75%)
الثغرات الحرجة: 3 → 0
زمن التصحيح: 33 دقيقة (16:30–17:03 UTC)
مقاطعة الخدمة: 0
سطح الإدارة المعرّض: 2 → 0

يرسّخ اختبار الاختراق هذا منهجية تدقيق قابلة للتكرار للبنية التحتية 0DATA. وسيُعاد شهريًا وبعد كل نشر رئيسي. الأمن السيبراني الذي نبيعه يبدأ بالأمن الذي نمارسه.

المراجع

TIKIJJA, Hadda. « الانضباط ». مختبر 0DATA، البحث 001، يوليو 2026.

TIKIJJA, Hadda. « الجهاز العصبي ». مختبر 0DATA، البحث 003، يوليو 2026. Zenodo: 10.5281/zenodo.21342768.

TIKIJJA, Hadda. « الطُعم الرقمي ». مختبر 0DATA، البحث 004، يوليو 2026. Zenodo: 10.5281/zenodo.21270325.

TIKIJJA, Hadda. « الجهاز المناعي ». مختبر 0DATA، البحث 005، يوليو 2026.

TIKIJJA, Hadda. « الطُعم الأول ». مختبر 0DATA، البحث 010، يوليو 2026.

OWASP Foundation. « Web Security Testing Guide ». v4.2, 2024.

شكر وتقدير. إلى القائمين على صيانة UFW وnmap وFastAPI — أدوات لولاها ما كان هذا التدقيق ممكنًا. وإلى البنية التحتية 08.ma التي تحملت فحصًا كاملاً دون أن تتراجع.