漏洞报告原始地址:RCE via npm misconfig -- installing internal libraries from the public registry
漏洞报告时间为2020年7月17日 由alexbirsan提交 赏金为$30000 本篇文章记录的仅为提交给Paypal的漏洞报告,但另有针对多家企业的报告
漏洞概况
为了简约并快速的让读者能够对这样一份报告有大体上的理解,所以我决定将漏洞报告分析概况提到文章前头来。这样也方便读者决定是否要继续阅读完整报告,也尽量能让一些非专业读者能够对此篇文章所介绍的内容有所了解,而不至于太过枯燥乏味。
在配置项目的包依赖时,常常会混用外部公共包和内部自定义包,我们称此为dependency confusion(依赖混淆)问题。而由于包依赖程序的内部机制,就会导致错误的引入外部的恶意包,这也就为一次成功的供应链攻击(supply chain attacks)提供了机会。攻击者通过将配置文件中与内部包相同名称的恶意包上传到公共包管理库当中,使得当项目构建加载运行时错误引用这一恶意包,从而使得RCE攻击成为可能。
以python的包管理工具pip
为例,当使用包含这一参数--extra-index-url
的pip install library
命令来指定所要使用的包时,其内部机制为:
-
检测
library
是否存在于指定(内部)包索引中 -
检测
library
是否位于公共包索引(PyPI)中 -
安装所找到的版本,如果在两个位置都找到了
library
,那默认就会安装更高版本的那个
因此上传高版本的包到公共源当中,即可实现RCE攻击,且这一攻击的成功率非常之高。
当然,不单单是python的pip
,管理Node包的npm
,Ruby的RubyGems
等也存在同样的问题。发掘这一漏洞的关键除了这些包管理工具的内部机制外,如何发现更多的暴露出来的内部包配置脚本同样也是值得探究的地方。
研究员alexbirsan利用自动化脚本搜集并利用这一dependency confusion(依赖混淆)问题,成功“入侵”了包括苹果(Apple)、Yelp、特斯拉(Tesla)和Shopify等大型公司,且每项漏洞报告都获得了不菲的奖金(