
여러 패키지 관리 시스템에서 종속성 혼동 취약점을 확인하는 도구
비공개 패키지 이름에 대한 지속적인 자유 네임스페이스를 확인하는 도구로, Python (PyPI) requirements.txt, JavaScript (npm) package.json, PHP (composer) composer.json 또는 MVN (Maven) pom.xml의 종속성 구성을 참조합니다.
2021년 2월 9일, 보안 연구원 Alex Birsan이 Medium에 글을 게시하여 여러 프로그래밍 언어 생태계에 존재하는 종속성 관리 도구의 다양한 해결 순서 취약점을 다루었습니다.
Microsoft는 영향을 완화하는 방법을 설명하는 백서를 발표했지만, 근본 원인은 여전히 남아 있습니다.
confused는 단순히 애플리케이션의 종속성 정의 파일을 읽고 각 종속성 항목에 대해 공개 패키지 저장소를 확인합니다. 공개 저장소에서 찾을 수 없는 패키지 이름을 모두 보고합니다. 이는 해당 패키지가 이러한 공격에 취약할 수 있지만, 아직 이 벡터가 악용되지 않은 상태임을 의미합니다.
하지만 이것이 애플리케이션이 이미 적극적으로 악용되고 있지 않다는 의미는 아닙니다. 귀하의 소프트웨어가 비공개 패키지 저장소를 사용하고 있다면, 비공개 패키지의 네임스페이스가 신뢰할 수 있는 당사자(일반적으로 귀하 또는 귀하의 회사)에 의해 클레임되었는지 확인해야 합니다.
npm과 같은 일부 패키징 생태계에는 "스코프"라는 개념이 있으며, 이는 비공개 또는 공개일 수 있습니다. 간단히 말해, 상위 레벨(스코프)이 있는 네임스페이스를 의미합니다. 스코프는 본질적으로 공개적으로 표시되지 않으므로 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
# Example when @mycompany private scope has been registered in npm, using -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