
关于Confused
Confused是一款功能强大的依赖混淆漏洞检测工具,广大研究人员可以使用Confused跨多个包管理器检测其中存在的依赖混淆漏洞。Confused能够检测Python(pypi) requirements.txt、JavaScript (npm) package.json、PHP (composer) composer.json或MVN (maven) pom.xml等依赖配置文件中引用的私有包名称和命名空间,并帮助检测潜在的依赖混淆漏洞。
解释工具输出
Confused只会读取应用程序的依赖项定义文件,并检查公共包存储库中该文件中的每个依赖项条目。除此之外,它还会继续报告在公共存储库中找不到的所有包名—这种状态意味着包可能容易受到此类攻击,而此向量尚未被利用。
然而,这并不意味着应用程序没有受到攻击,或仍然是安全的。如果你发现你的应用程序正在使用私有包存储库,则应该确保你的私有包的命名空间已由受信任的一方(通常是你自己或你的公司)声明。
已知假阳性
一些包存储库生态系统(比如说npm)都会有一种名为“范围”的概念,也就是说其中的代码包可以是私有的也可以是公共的。简而言之,它意味着一个命名空间会有一个更高的级别-范围。这些作用域本质上不是公开可见的,这意味着Confused无法可靠地检测目标代码包是否已声明。如果应用程序使用作用域内的包名称,则应确保受信任方已在公共存储库中声明了作用域名称。
工具安装
广大研究人员可以选择访问该项目的【Releases页面】来下载预编译好的项目代码,然后解压并运行即可。
或者,你也可以在本地安装并配置好Go语言环境,然后使用Go编译器来进行安装(安装和更新命令相同):
go get -u github.com/visma-prodsec/confused
除此之外,广大研究人员也可以使用下列命令将该项目源码克隆至本地,然后使用Go命令进行代码编译和构建:
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 代码包存储库系统,可选的值有:"pip", "npm", "composer", "mvn" (默认为"npm") -s string 已知安全的命名空间,提供以逗号分隔的列表,支持通配符 -v Verbose模式输出
工具使用样例
Python(PyPI)
./confused -l pip requirements.txt Issues found, the following packages are not available in public package repositories: [!] internal_package1
JavaScript(npm)
./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
Maven(mvn)
./confused -l mvn pom.xml Issues found, the following packages are not available in public package repositories: [!] internal [!] internal/package1 [!] internal/_package2
项目地址
Confused:【GitHub传送门】
参考资料
https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610
https://azure.microsoft.com/en-gb/resources/3-ways-to-mitigate-risk-using-private-package-feeds/

湖北省武汉市 1F
这工具对npm项目挺管用的,刚试了下
山东省德州市 2F
这工具对小团队挺实用,不用搭CI也能快速排查风险
山东省淄博市 3F
感觉还行,不过假阳性有点多吧?
日本 B1
@ 流浪的诗人 假阳性确实有点烦,特别是 composer 里那些本地路径包
天津市 4F
求问pip环境下带私有源的requirements能准确识别吗?
山西省太原市 B1
@ 碧海琉璃 pip私有源得配trusted-host和extra-index-url,不然confused可能读不到真实来源
台湾省 5F
前几天刚搞完依赖混淆的事,确实得盯紧命名空间
浙江省杭州市 6F
@mycompany这种scope要是没注册就容易出事啊
韩国 B1
@ 古董钥匙 scope没注册等于把门敞开,npm上随便谁都能抢注@mycompany/internal
山东省潍坊市 B1
@ 古董钥匙 scope没注册的风险确实大,我们项目就中过招
四川省内江市 7F
又是标题党?说“快速检查”结果还得手动配一堆参数🤔
澳大利亚 B1
@ 木匠周九 手动配参数是有点麻烦,但比写脚本自己查快多了,不算标题党吧
广东省江门市 8F
可以这样理解:只要私有包名没在公仓注册就有风险
北京市 9F
我之前也踩过这坑,内部包被恶意上传到pypi了
印度尼西亚 10F
工具输出里那个-s参数具体咋写通配符?有人试过吗
北京市 11F
hhh 本地跑完发现一堆internal包,吓得赶紧去注册scope
上海市 B1
@ 废柴少女 -s 参数支持 * 通配符,比如 ‘@myteam/*’ 就行,亲测有效
吉林省长春市 12F
pip环境下私有源的包名要是带下划线会不会被误判?
越南 13F
刚用这工具扫了我们项目,@internal 的 scope 没注册,吓出一身汗
北京市 14F
内部包命名最好加个统一前缀,不然真容易混
广东省广州市 15F
npm 那块 scope 注册流程有人能说说吗?官方文档太绕了
福建省泉州市 16F
我司上周就中招了,有个 internal-util 被抢注,还好没上线
湖北省武汉市 17F
mvn 的 groupID 如果是 com.company.internal 这种会被报吗?
印度 18F
这玩意对小团队挺友好的,不用配 CI 也能快速扫一遍
湖北省武汉市 19F
composer.json 里 repo 类型是 vcs 的也会被当成私有包报出来,有点坑
上海市 20F
internal-util这种通用名真的别用,我们之前也差点被撞包
上海市南汇区 21F
刚跑完composer项目,报了一堆vcs repo的包,其实都是内部git,误报挺烦的
辽宁省沈阳市 B1
@ 龙魂战士 vcs repo误报问题确实头疼,有法子过滤不?
陕西省汉中市 22F
mvn的groupID要是com.xxx.internal这种,工具会当成私有包报出来吗?
辽宁省大连市 23F
感觉假阳性主要集中在带下划线或驼峰命名的包上,蛮那啥的
韩国 24F
小团队用这个扫一遍确实省事,不用搭复杂流水线就能排查风险
广东省广州市 B1
@ 星空呓语 对小团队太友好了,省了搭CI的麻烦
北京市 25F
hhh 扫完发现三个没注册的scope,连夜去npm占坑了👍
广东省肇庆市 26F
内部包统一加个公司缩写前缀吧,比如acme-internal-utils,安全点
上海市 27F
这工具对maven项目支持怎么样?
河南省商丘市 28F
npm scope那块解释得不够清楚啊
北京市 29F
之前用类似的工具误报率太高了,这个准确吗?
福建省厦门市 30F
-s参数支持多个通配符吗?比如’@acme/*,@test/*’
北京市 B1
@ 寒露凝霜 -s参数可以写多个通配符,用逗号分开就行
泰国 B1
@ 寒露凝霜 -s参数可以,我刚试了’@acme/*,@test/*’这种写法是支持的
浙江省台州市 31F
我们内部包都加了公司前缀,扫出来全是安全命名空间
日本 B1
@ 纸巾 加前缀这招稳,我们也是acme-打头,扫出来干净
黑龙江省黑河市 32F
composer的vcs类型被误报确实挺烦人的
广东省广州市 33F
刚试了下pip项目,requirements.txt里带私有源的包没报错
香港 B1
@ 暗铁苍狼 pip私有源的包没报错可能是因为工具默认只查公仓,没连你私有源吧
印度尼西亚 34F
依赖混淆这事真的防不胜防
福建省漳州市 35F
要是能集成到CI里自动扫描就好了
上海市 B1
@ 账房林 要是能集成到CI/CD流程里就完美了
山东省聊城市 36F
工具安装倒是挺简单的,go get就行
中国 B1
@ 青瓷梦语 go get装是快,但得先配好GOPATH和代理,新手容易卡住
上海市 37F
这个工具对maven支持咋样?有人试过没?
云南省楚雄州 38F
npm scope注册流程确实麻烦,官方文档绕来绕去的
山东省淄博市 39F
内部包命名加个统一前缀确实很重要,我们之前就吃过亏
辽宁省抚顺市 40F
工具安装倒是挺简单的,go get直接搞定
浙江省台州市 41F
composer的vcs类型误报问题有办法解决吗?
湖北省襄阳市 42F
pip环境下私有源支持得怎么样?
上海市 43F
刚跑了下npm项目,发现两个没注册的scope,赶紧去补了
韩国 B1
@ 电子牧者 npm scope没注册真危险,我上次漏了一个差点被抢注
重庆市 44F
npm scope没注册真的吓人,刚补完手还在抖
泰国 45F
pip私有源带下划线的包会被误判吗?求试过的说说
韩国 46F
internal-util这种名字千万别用,血泪教训啊
上海市 47F
hhh 扫出两个未注册scope,立马去npm占坑了👍
印度 48F
mvn的com.xxx.internal会被报?有点慌
湖北省武汉市 49F
工具假阳性集中在composer的vcs类型,能不能加个忽略选项?
北京市 50F
感觉还行,但-s通配符写法文档太模糊了
天津市 51F
-s参数通配符写法文档太模糊了,试了几次才成功
湖南省长沙市 52F
pip项目跑了下,带私有源的包好像没报,是忽略了吗?
福建省 53F
感觉这工具对composer项目支持不太好,误报一堆
韩国 54F
内部包统一加前缀这招确实管用,我们项目就没扫出问题
北京市 55F
刚试了mvn,com.company.internal这种会被报,得手动加到-s里排除
江苏省苏州市 56F
这工具原理是啥?就是检查包名在不在公仓?
菲律宾 57F
composer的vcs类型误报问题有办法解决吗?文章好像没说清楚
韩国 58F
工具输出结果里带感叹号的是高危,没感叹号的算啥?
江苏省苏州市 59F
内部包名带下划线的确实容易误报,我们扫出来好几个假的
湖北省武汉市江岸区 60F
mvn的com.xxx.internal这种groupID会被报,得加到-s里排除
香港 61F
composer的vcs repo误报能不能加个–ignore-vcs参数啊?
北京市 62F
hhh 扫完发现@oldteam没注册,火速去npm占了坑👍
印度 63F
Python项目扫了下,误报比想象中多啊。
上海市 B1
@ 幽谷先知 试过加-s参数过滤私有命名空间吗?
广东省深圳市 64F
Go版本装起来还挺快。
上海市 65F
npm的范围包检测这块确实是个痛点。
福建省泉州市 66F
这工具能扫composer.json还挺方便。
宁夏银川市 B1
@ 木匠刘八 对,PHP项目也能直接扫了。