packagist.org远程代码执行漏洞
发布于:2018-09-05 13:49  浏览:

研究人员Max Justicz日前发现了packagist.org网站的一个远程代码执行漏洞。packagist.org是php包管理器Composer的默认包服务器,Packagist目前服务的下载量大约是每个月4亿。

packagist.org远程代码执行漏洞

研究人员发现的packagist.org bug技术上并没有非常创新,但研究人员认为Packagist是一个主流的服务,因此写了这篇博客(近期通过供应链进行攻击的例子也很多,攻击者也可能通过Packagist网站的远程代码执行漏洞发起供应链攻击)。

漏洞

在网站的文本域内输入$(execute me)就会在shell中执行命令。

packagist.org远程代码执行漏洞

漏洞产生原因

用户向Packagist上传包时会提供一个到Git、Perforce、Subversion、Mercurial库的URL。为了识别URL是指向哪种库,URL中会含有shell输出的git、p4、svn、hg等命令作为参数。

研究人员用运行shell命令的ProcessExecutor::execute来打印请求执行的命令。对$(sleep 1)的URL,会运行下面的命令:


git ls-remote --heads '$(sleep 1)' hg identify '$(sleep 1)' p4 -p $(sleep 1) info -s svn info --non-interactive $(sleep 1)

从上面的命令可以看出,p4和svn wrapper会不适当地泄露URL参数。

缓解措施

研究人员将漏洞报告给security@packagist.org ,Packagist团队很快就修复了该漏洞。

packagist.org远程代码执行漏洞

更多参见:https://github.com/composer/composer/commit/bf125295df9da84c44989e33f9f84b4ed4f8ea56

结论

包管理器的安全性一直不理想,包管理器服务器运维人员应该想到有一天会被入侵。

去年rubygems.org出现了任意代码执行漏洞,一些npm官方镜像中也出现了代码执行漏洞,PyPI出现了任意释放文件删除漏洞,使用主流CDN的npm站点出现了服务器任意JS执行漏洞,现在packagist.org又出现了任意代码执行漏洞。其他网站也出现了类似漏洞,甚至存在合法包文件被黑的风险。