
أداة للتحقق من ثغرات الخلط بين التبعيات (Dependency Confusion) في أنظمة إدارة الحزم المتعددة.
أداة للتحقق من فضاءات الأسماء الحرة المتبقية لأسماء الحزم الخاصة المشار إليها في تكوين التبعيات لـ Python (pypi) requirements.txt, JavaScript (npm) package.json, PHP (composer) composer.json أو MVN (maven) pom.xml.
في 9 فبراير 2021، نشر الباحث الأمني Alex Birsan مقالة تناولت عيوبًا مختلفة في ترتيب التحليل في أدوات إدارة التبعيات الموجودة في أنظمة برمجية متعددة.
نشرت Microsoft ورقة تقنية تصف طرقًا لتخفيف الأثر، بينما لا يزال السبب الجذري قائمًا.
confused ببساطة يقرأ ملف تعريف التبعيات لتطبيق ما ويفحص مستودعات الحزم العامة لكل مدخل تبعية في ذلك الملف. ثم يقوم بالإبلاغ عن جميع أسماء الحزم التي لم يتم العثور عليها في المستودعات العامة - وهي حالة تشير إلى أن الحزمة قد تكون عرضة لهذا النوع من الهجوم، بينما لم يتم استغلال هذا المتجه بعد.
ومع ذلك، فإن هذا لا يعني أن التطبيق لا يتم استغلاله بشكل نشط بالفعل. إذا كنت تعلم أن برنامجك يستخدم مستودعات حزم خاصة، فيجب عليك التأكد من أن فضاءات أسماء حزمك الخاصة قد تمت المطالبة بها من قبل طرف موثوق (عادة أنت أو شركتك).
بعض أنظمة التعبئة مثل npm لديها مفهوم يسمى "النطاقات" (scopes) التي يمكن أن تكون خاصة أو عامة. باختصار، يعني ذلك فضاء اسم له مستوى أعلى - النطاق. النطاقات غير مرئية بشكل عام بطبيعتها، مما يعني أن confused لا يمكنه الكشف بشكل موثوق عما إذا تمت المطالبة بها. إذا كان تطبيقك يستخدم أسماء حزم ذات نطاق، فيجب عليك التأكد من أن طرفًا موثوقًا قد طالب باسم النطاق في المستودعات العامة.
تحميل ملف ثنائي مُعد مسبقًا من صفحة الإصدارات، فك الضغط ثم تشغيل!
أو
إذا كان لديك مترجم go حديث مثبت: go get -u github.com/visma-prodsec/confused (نفس الأمر يعمل للتحديث)
أو
git clone https://github.com/visma-prodsec/confused ; cd confused ; go get ; go build
Usage:
confused [-l LANGUAGENAME] depfilename.ext
Usage of confused:
-l string
Package repository system. Possible values: "pip", "npm", "composer", "mvn", "rubygems" (default "npm")
-s string
Comma-separated list of known-secure namespaces. Supports wildcards
-v Verbose output
./confused -l pip requirements.txt
Issues found, the following packages are not available in public package repositories:
[!] internal_package1
./confused -l npm package.json
Issues found, the following packages are not available in public package repositories:
[!] internal_package1
[!] @mycompany/internal_package1
[!] @mycompany/internal_package2
# مثال عند تسجيل النطاق الخاص @mycompany في npm، باستخدام -s
./confused -l npm -s '@mycompany/*' package.json
Issues found, the following packages are not available in public package repositories:
[!] internal_package1
./confused -l mvn pom.xml
Issues found, the following packages are not available in public package repositories:
[!] internal
[!] internal/package1
[!] internal/_package2
./confused -l rubygems Gemfile.lock
Issues found, the following packages are not available in public package repositories:
[!] internal
[!] internal/package1
[!] internal/_package2