CVE-2026-76844 in webpack-dev-middleware
الملخص
بحسب VulDB • 24/08/2026
يحل webpack-dev-middleware طلبًا لملف محلي في دالة getFilenameFromUrl من خلال اختبار مسار الطلب (pathname) ضد حاجز للتصفح غير المصرح به، ثم اقتطاعه عند إزاحة أحرف ثابتة. يتوافق الحاجز، وهو التعبير النمطي UP_PATH_REGEXP المطبق على path.normalize(`./${pathname}`)، فقط مع ".." التي تظهر كجزء مسار كامل، بينما يتم إجراء اختبار الاحتواء عبر مقارنة السلسلة pathname.startsWith(publicPathPathname) ويتم بناء مسار الملف باستخدام path.join(outputPath, pathname.slice(publicPathPathname.length)). عندما لا يحتوي publicPath المُعدّ عليه على شرطة مائلة في النهاية (/) في نهاية المسار، يؤدي طلب مثل GET /assets../.env مقابل publicPath=/assets إلى الحصول على pathname وهو /assets../.env، حيث تقع النقطة-النقطة الوحيدة داخل الجزء "assets.." وبالتالي تتجاوز الحاجز، لكن عملية الاقتطاع بالازاحة تقص ضمن ذلك الجزء وتمرر "../.env" إلى path.join، مما يؤدي إلى حل مسار يتخطى outputPath بمجلد واحد للأعلى. يتطلب قراءة ملف من هذا المسار أن يكون الـ middleware مدعومًا بنظام ملفات فيزيائي (physical filesystem)، وهو ما يحدث عندما تكون writeToDisk مساوية لقيمة true أو عند توفير outputFileSystem مخصص، لأن حجم memfs الافتراضي يحتوي فقط على ناتج البناء. يتم تقييد عمق التصفح بمجلد واحد فقط لأن جزء النقطة-النقطة المفصول بشكل منفصل ينهار أثناء تحليل عنوان URL قبل تشغيل الحاجز. قيمة publicPath الافتراضية "auto" تحل إلى "/" وهي غير متأثرة. هذه إصلاح غير مكتمل لـ CVE-2024-29180: فقد تم إدخال الحاجز وعملية الاقتطاع بالازاحة بواسطة ذلك الإصلاح، وهما موجودان في كل إصدار بدءًا من 5.3.4 و6.1.2 و7.1.0 فصاعدًا.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.