Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
secure-by-default-rce-demo — مختبر تجريبي آمن افتراضيًا يوضح كيف يمكن لتحصين الحاويات (صور distroless، التشغيل بغير صلاحيات root، نظام ملفات للقراءة فقط، أسرار محقونة في وقت التشغيل) أن يحيد ثغرة RCE حرجة في Next.js/React Server Actions (CVE-2025-55182 "React2Shell")، مع عرض نشر آمن وغير آمن جنبًا إلى جنب وسجلات الاستغلال. | Kitploit
أدوات/GitHubGitHub/meganekos/secure-by-default-rce-demo
أمن الحاوياتتحليل الثغرات الأمنيةالاستغلالأمن الويبأمن السحابةDevSecOpsسوء التكوينالتعلم والتعليممختبرات وتدريب عملي

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →

حول

مختبر تجريبي آمن افتراضيًا يوضح كيف يمكن لتحصين الحاويات (صور distroless، التشغيل بغير صلاحيات root، نظام ملفات للقراءة فقط، أسرار محقونة في وقت التشغيل) أن يحيد ثغرة RCE حرجة في Next.js/React Server Actions (CVE-2025-55182 "React2Shell")، مع عرض نشر آمن وغير آمن جنبًا إلى جنب وسجلات الاستغلال.

GitHubmeganekos/secure-by-default-rce-demo

secure-by-default-rce-demo

عرض المستودع
منذ 7 أشهرلم تتم المراجعة بعد
مشاركة

تخفيف RCE في Node.js: DevOps كخط الدفاع الأخير

يوضح هذا المشروع ثغرة خطيرة لتنفيذ التعليمات البرمجية عن بُعد (RCE) في تطبيق Next.js (وتحديدًا عبر Server Actions) وكيف أن تقوية البنية التحتية تُبطل الهجوم بفعالية حتى عندما تظل ثغرة الكود قائمة.

يقارن هذا المشروع بين نشر "غير آمن" قياسي ونشر "آمن" مُقوّى باستخدام صور Distroless وأنظمة ملفات للقراءة فقط.

🛡️ المفهوم: "الدفاع المتعمق"

ثغرات البرمجيات أمر لا مفر منه. عندما يفشل الكود، يجب أن تمنع بنيتك التحتية المهاجم من توسيع نطاق وجوده.

الثغرة

توجد ثغرة RCE حرجة (CVE-2025-55182، والمعروفة بـ React2Shell) في تنفيذ React Server Components (RSC) المستخدم في Next.js.

  • CVSS: 10.0 (حرجة)
  • السبب الجذري: يسمح إلغاء التسلسل غير الآمن لبروتوكول "Flight" للمهاجم بالتلاعب بالكائنات الداخلية (عبر تلويث النموذج الأولي أو آليات مشابهة) أثناء معالجة Server Action.
  • التأثير: يسمح ذلك بتنفيذ كود عشوائي (مثل spawnSync) دون مصادقة.

نواقل الهجوم

  1. العيش خارج الأرض (LotL): استخدام الأدوات الموجودة بالفعل في نظام التشغيل (curl, wget, ls, cat) لسرقة الأسرار أو تنزيل برمجيات خبيثة.
    • الآلية: يستغل الثغرة child_process.spawnSync() في Node.js. وينفّذ هذا الثنائيات مباشرة، دون الحاجة إلى شل (/bin/sh).
  2. أحضر أرضك الخاصة (BYOL): إذا كانت الأدوات القياسية مفقودة، يرفع المهاجم ثنائيته الخاصة (مثل ملف Go مُجمّع)، ويجعلها قابلة للتنفيذ (chmod +x)، ثم يشغّلها.

🏗️ مقارنة البنية


📝 تحليل سجلات التطبيق

تُظهر السجلات التالية كيف تبدو محاولات الهجوم من منظور التطبيق. يبرز هذا التباين بوضوح فعالية الإجراءات الأمنية.

سجلات التطبيق الآمن (logs/server.safe.log)

تُظهر السجلات حالات فشل متكررة (ENOENT).

  • لماذا؟ يحاول spawnSync تشغيل ls, id, curl. صورة Distroless ببساطة لا تحتوي على هذه الثنائيات. الأمر لا يتعلق فقط بغياب الشل؛ فالأدوات نفسها غير موجودة.
root@kitploit:~
[Instrumentation] Logging initialized. Writing to: /app/logs/server.safe.log
 ⨯ Error: NEXT_REDIRECT
    ... digest: '`{"step":"1. Write Initial Chunk to /tmp/hello_test","success":true}`'
 ⨯ Error: NEXT_REDIRECT
    ... digest: '`{"step":"2. Verify Binary was Written","verification":{...},"success":true}`'
 ⨯ Error: NEXT_REDIRECT
    ... digest: '`{"step":"4. Execute Binary","stdout":"","stderr":"","error_obj":{"message":"spawnSync /tmp/hello_test EACCES","code":"EACCES"},"success":true}`'

سجلات التطبيق غير الآمن (logs/server.unsafe.log)

تؤكد السجلات نجاح تنفيذ الأوامر والتلاعب بنظام الملفات.

root@kitploit:~
[Instrumentation] Logging initialized. Writing to: /app/logs/server.unsafe.log
 ⨯ Error: NEXT_REDIRECT
    ... digest: '`{"step":"1. Write Initial Chunk to /tmp/hello_test","success":true}`'
 ⨯ Error: NEXT_REDIRECT
    ... digest: '`{"step":"4. Execute Binary","stdout":"Hello from Go binary!\\n","stderr":"","error_obj":null,"success":true}`'
 ⨯ Error: NEXT_REDIRECT
    ... digest: '`{"command":"id","args":[],"stdout":"uid=0(root) gid=0(root) ...","stderr":"","status":0,"signal":null}`'
 ⨯ Error: NEXT_REDIRECT
    ... digest: '`{"command":"cat","args":["/app/.env"],"stdout":"","stderr":"cat: can\'t open \'/app/.env\': No such file or directory\n","status":1,"signal":null}`'

(ملاحظة: في سجلات غير الآمن، يفشل أمر cat /app/.env أعلاه لأن الملف يُسمى .env في الجذر، لكن ls -la في السجلات الكاملة سيكشف هيكل الدليل.)


💥 نتائج إثبات المفهوم (POC)

1. RCE القياسي (العيش خارج الأرض)

محاولة تشغيل أوامر شل قياسية.

  • غير آمن: ✅ نجاح. يمكن للمهاجم تشغيل id, ls, cat .env، والوصول إلى بيانات حساسة.
  • آمن: ❌ محظور. spawnSync /bin/sh ENOENT. لا يوجد شل لتنفيذ الأوامر.

2. الهجوم المتقدم (أحضر أرضك الخاصة)

محاولة تجاوز "الأدوات المفقودة" عن طريق رفع ثنائية مخصصة.

  • غير آمن: ✅ نجاح.
    1. يجزّئ المهاجم الثنائية (لتجاوز حدود الحمولة).
    2. يكتبها إلى /tmp/malware.
    3. يشغّل chmod +x.
    4. ينفّذ الثنائية.
  • آمن: ❌ محظور.
    • فشلت الكتابة: EROFS: read-only file system.
    • لا يمكن للمهاجم إسقاط الملفات في أي مكان، مما يحيد هجوم BYOL بفعالية.

3. تحليل تنفيذ "عديم الملفات" الحقيقي

هل يمكن للمهاجم تحميل ثنائية في متغير وتنفيذها مباشرة من الذاكرة؟

  • المفهوم: دمج أجزاء من ثنائية في متغير JavaScript عام (مثل global.payload = "...")، ثم تنفيذها.
  • الواقع: فشل.
    • دوال child_process في Node.js (spawn, exec) تتطلب مسار ملف. لا يمكنها تنفيذ مخزن مؤقت أو سلسلة نصية مباشرة.
    • لتجاوز ذلك على Linux، يحتاج المرء إلى memfd_create (استدعاء نظام لإنشاء ملف مجهول في الذاكرة).
    • الحاجز: لا يعرض Node.js memfd_create بشكل أصلي. يتطلب الوصول إليه إضافة C++ (مثل ffi-napi) مثبتة مسبقًا في node_modules.
    • تأثير Distroless: نظرًا لأن الصورة تفتقر إلى المترجمات (gcc, make)، لا يمكن للمهاجم بناء هذه الإضافة في الوقت الفعلي.

🔐 أفضل الممارسات الموضحة

1. استخدم صور Distroless

صور "Distroless" تحتوي فقط على تطبيقك وتبعيات وقت التشغيل الخاصة به. لا تحتوي على مديري حزم أو شل أو أدوات UNIX القياسية.

  • لماذا؟ إذا حصل المهاجم على RCE، فلن يتمكن من التجول (ls) أو تنزيل الملفات (curl) أو تصعيد الامتيازات بسهولة.

2. أنظمة الملفات للقراءة فقط

قم بتكوين بيئة تشغيل الحاويات لديك لتركيب نظام الملفات الجذر كقراءة فقط.

  • لماذا؟ يمنع المهاجمين من التنزيل (BYOL) أو تعديل كود تطبيقك (الاستمرارية).
  • كيف؟ في docker-compose.yml:
    root@kitploit:~
    read_only: true
    tmpfs:
      - /tmp:noexec # CRITICAL: explicitly block execution!
    
    ملاحظة: مع هذا الإعداد، يُظهر اختبار POC أن المهاجم يمكنه كتابة الثنائية إلى /tmp (كتابة ناجحة)، لكن التنفيذ يفشل مع EACCES (تم رفض الإذن) بسبب علامة noexec. وهذا يوازن بين الوظيفة (tmp قابل للكتابة) والأمان.

3. متغيرات البيئة الأصلية (مساحة "التصدير")

لا تضع ملفات .env في صور الحاويات الخاصة بك. إذا كان بإمكان المهاجم قراءة الملفات (مثل cat .env)، فستتعرض أسرارك للخطر.

  • النهج الآمن: حقن المتغيرات مباشرة في بيئة العملية وقت التشغيل (مثل عبر Kubernetes Secrets أو AWS Parameter Store أو مفتاح environment في Docker).
  • لماذا؟ يجعل من الصعب على المهاجم تفريغ جميع الأسرار دفعة واحدة مقارنة بقراءة ملف واحد.

🚀 كيفية التشغيل

  1. ابدأ البيئة: يتم تعريف كل من التطبيق الآمن وغير الآمن في ملف docker-compose.yml واحد.

    root@kitploit:~
    docker compose up --build -d
    
  2. شغّل الاستغلالات: يمكنك تشغيل الاستغلالات ضد المنافذ المحددة لرؤية الفرق.

    • استهداف التطبيق غير الآمن (المنفذ 3001):

      root@kitploit:~
      # 1. Standard RCE (LotL) - SUCCEEDS
      python exploit/poc.py http://localhost:3001
      
      # 2. Advanced Attack (BYOL) - SUCCEEDS
      python exploit/poc_advanced.py http://localhost:3001
      
    • استهداف التطبيق الآمن (المنفذ 3000):

      root@kitploit:~
      # 1. Standard RCE (LotL) - FAILS (ENOENT)
      python exploit/poc.py http://localhost:3000
      
      # 2. Advanced Attack (BYOL) - FAILS (EACCES/EROFS)
      python exploit/poc_advanced.py http://localhost:3000
      
  3. التنظيف:

    root@kitploit:~
    docker compose down
    
تنزيل الأداة
الميزة❌ البيئة غير الآمنة (المنفذ 3001)✅ البيئة الآمنة (المنفذ 3000)
الصورة الأساسيةnode:20-alpine (تحتوي على ls, curl, wget, إلخ.)gcr.io/distroless/nodejs20-debian12 (لا شل، ولا أدوات)
نظام الملفاتقابل للكتابة (الافتراضي القياسي لـ Docker)للقراءة فقط (read_only: true)
الأسرارملف .env على القرص (عرضة لأمر cat .env)متغيرات البيئة (تُحقن وقت التشغيل)
المستخدمroot (الافتراضي)غير الجذر (تُطبقه Distroless)