
Инструмент для проверки уязвимостей путаницы зависимостей в нескольких системах управления пакетами.
Инструмент для проверки на наличие свободных пространств имен для частных имен пакетов, указанных в конфигурации зависимостей для Python (pypi) requirements.txt, JavaScript (npm) package.json, PHP (composer) composer.json или MVN (maven) pom.xml.
9 февраля 2021 года исследователь безопасности Алекс Бирсан опубликовал статью, в которой затронул различные недостатки порядка разрешения зависимостей в инструментах управления зависимостями, присутствующие в нескольких экосистемах языков программирования.
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