导语:Apache一项安全措施的移除导致jQuery file upload软件项目的该项安全措施也被移除,所有fork该软件项目的项目都受到影响。
https://www.npmjs.com上有Node.js和许多相关的包。研究人员在Node.js npm上搜索了许多常见的包名和函数,包括file, backup, download, upload等。最后搜索的upload的结果是Blueimp的软件项目,名为jQuery file upload。
其描述为:
文件上传小工具,包含多个文件选择,拖放支持,进度条,验证和预览图像,jQuery的音频和视频。支持跨域、分块和可恢复文件上传以及客户端图像大小调整。适用于任何服务器端平台——支持标准HTML表单文件上传(PHP,Python,Ruby on Rails,Java,Node.js,Go等)。
分析
研究人员开始分析package源码,发现server/php目录下的2个PHP文件,upload.php和UploadHandler.php。upload.php文件会调用所有文件上传代码所在的UploadHandler.php主文件。所有上传的文件都回保存在web服务器的根目录files/ directory下。研究人员用curl写了点简单的代码,并用一个简单的PHP shell文件来确认是否可以在服务器上上传web shell并运行命令。
$ curl -F "[email protected]" http://example.com/jQuery-File-Upload-9.22.0/server/php/index.php
shell.php文件:
<?php $cmd=$_GET['cmd']; system ($cmd);?>
用cmd=id连接到测试web服务器会返回web服务器运行的进程的user id。
研究人员对fork原代码的1000个项目进行了测试,发现只有36个项目不受该POC的影响。但只需对POC做一点修改就可以利用该漏洞。
POC参见:https://github.com/lcashdol/Exploits/tree/master/CVE-2018-9206
研究人员怀疑该漏洞应该也被其他人发现了,因此Google搜索了一下,确认使用该代码的项目都容易被入侵,并且已经有许多Youtube视频来证明类似的软件package攻击。
研究人员通知了jQuery File Upload的作者,并报告了该漏洞。作者回应了该漏洞称并没有在测试环境中复现该漏洞。研究人员与作者通过邮件比较了测试配置后发现,Apache的维护人员在Apache version 2.3.9后就不支持.htaccess了。也就是说为了改善性能,并不需要在每次访问目录时都检查该文件。这一变化可能会使用户为服务器配置的安全策略被绕过。
Apache也有理由关闭.htaccess,但这一改变会使许多开发者和项目受到攻击,尤其是将.htaccess作为安全特征的项目。在Blueimp的案例中,为了解决这一变化带来的问题,并修复CVE-2018-9206文件上传漏洞,开发者需要修改其代码使其只允许内容类型的图片文件上传。
并不是一个项目的问题
值得一提的是,因为Apache的这一改变大约有7800个项目受到文件上传问题的影响。
大多数的代码fork会使新代码也包含原代码中的漏洞。这样的话,即使项目作者修改了Blueimp的代码,该漏洞在fork这段代码的项目中还是会存在。如果这些项目在生产环境中,那么易受到文件上传和代码执行漏洞的攻击。打开了数据泄露的大门之后,恶意软件感染、数据污染和各种破坏也会接踵而至。
但没有一种方式可以精确的计算fork jQuery File Upload的项目个数,当然也没有办法可以确定这些fork的项目是不是用在生产环境中。该项目的旧版本也存在文件上传的问题,时间可以追溯到2010年。
结论
Apache移除了一个安全控制措施,导致Blueimp的Jquery file upload软件项目的安全措施也被移除,同时fork了Jquery file upload软件项目的所有软件项目都受到影响。该漏洞影响独立的web应用、WordPress插件和其他CMS。