
إثبات مفهوم يوضح ثغرة اجتياز المسار عبر الروابط الصلبة في حزمة tar الخاصة بـ npm، مما يسمح بالكتابة فوق الملفات خارج دليل الاستخراج عبر أرشيفات مصممة خصيصًا.
البحث: Joshua van Rijswijk
يحتوي هذا المستودع على إثبات المفهوم (PoC) لثغرة CVE-2026-29786، وهي ثغرة في حزمة tar الخاصة بـ npm تسمح لأرشيف مُصمم بعناية بإنشاء رابط صلب (hardlink) يشير إلى خارج دليل الاستخراج المقصود.
تحدث المشكلة عندما يحتوي أرشيف tar على هدف رابط يعتمد على محرك الأقراص مثل C:../target.txt. وبسبب الترتيب الذي تنفذ به المكتبة التحقق من الصحة وتطبيع المسار أثناء الاستخراج، يمكن تجاوز حماية التنقل بين الدلائل.
بعد التطبيع، يصبح المسار ../target.txt، مما يسمح لهدف الرابط بالهروب من دليل الاستخراج المُعد.
عند الكتابة إلى الملف المستخرج، يتم تعديل الملف الخارجي لأن كلا المسارين يشيران إلى نفس الرابط الصلب.
تحدث الثغرة في منطق الاستخراج المسؤول عن معالجة المسارات المطلقة (Unpack[STRIPABSOLUTEPATH]).
يتم إجراء اكتشاف التنقل بين الدلائل قبل إزالة المسار المطلق.
مثال على قيمة رأس خبيثة
linkpath: C:../target.txt
سلوك المعالجة:
يتم تقسيم المسار إلى أجزاء لاكتشاف التنقل بين الدلائل.
يبحث فحص التنقل عن أجزاء "..".
نظرًا لأن الجزء يظهر كـ "C:.."، لا يتم تفعيل الفحص.
تقوم الدالة stripAbsolutePath() لاحقًا بإزالة بادئة محرك الأقراص (C:).
يصبح المسار الناتج:
../target.txt
يسمح هذا للمسار بالهروب من جذر الاستخراج المقصود.
يمكن للمهاجم الكتابة فوق ملفات خارج دليل الاستخراج بصلاحيات العملية التي تقوم بالاستخراج.
تشمل السيناريوهات الواقعية المحتملة:
• أدوات سطر الأوامر التي تستخرج أرشيفات tar غير موثوقة • خطوط البناء (build pipelines) التي تعالج مصنّفات الطرف الثالث • الخدمات التي تستورد ملفات tar مقدمة من المستخدم • أنظمة إدارة الحزم أو أنظمة الإضافات التي تفك ضغط الأرشيفات
npm install [email protected]
node poc.cjs
يقوم البرنامج النصي بإنشاء أرشيف tar خبيث ويوضح أن الكتابة إلى الملف المستخرج تؤدي إلى الكتابة فوق ملف خارج دليل الاستخراج.