WordPress自动更新漏洞:超1/4网站可被黑客一举击溃
wordfence最新漏洞造成大部分的网站被黑,wordfence最近披露了某个影响范围很广的安全问题,大量wordpress网站都受到影响。这个漏洞利用的是wordpress的自动更新功能,此功能默认是开启的,又因为整个互联网上大约有27%的站点都采用wordpress,所以wordfence宣称,整个web世界有27%的网站都可能因此被黑。
简单说就是利用wordpress更新服务器的弱点,控制该服务器,自然也就能够同时对所有采用wordpress的网站完成入侵了。
一击黑入全球1/4的网站
在wordpress生态中,api.wordpress.org服务器的重要功能在于,为wordpress站点发布自动更新。各wordpress站点,每隔1个小时就会向该服务器发起请求,检查插件、主题和wordpress核心更新。
api.wordpress.org服务器的响应就包括了wordpress各部分是否需要自动更新,响应中也包含下载和安装更新软件的url地址。
于是,只要搞定了这台服务器,黑客也就能够让所有的wordpress站点自动从他们自己的url下载和安全恶意程序了。也就是说,攻击者通过api.wordpress.org的自动更新机制,就能大规模黑入大量wordpress站点。
整个过程实际上是完全可行的,因为wordpress本身并不提供软件的签名验证。它信任api.wordpress.org提供的任意url地址和包。wordpress文档中有提到:默认情况下,每个站点都会开启自动更新功能,接收核心文件更新。
按照wordfence的说法,黑客只需要针对api.wordpress.org一击,就能让全球超过1/4的网站感染恶意程序。
api.wordpress.org漏洞技术细节
这个更新服务器有个github webhook,它能够让wordpress核心开发者将代码同步到wordpress.org svn库,也就能够将github作为其源代码库了。这样一来,核心开发者只要在github提交更改,就会触发api.wordpress.org的一个进程,也就能方便得从github获得最新代码。
这里api.wordpress.org联系github的url也就是所谓的“webhook”,这东西是用php写的。此webhook的php是开源的,点击这里就能获取。
wordfence对其中的代码进行了分析,发现了其中的一个漏洞。攻击者利用该漏洞就能够在api.wordpress.org上执行任意代码,并且获得api.wordpress.org的访问权。实际上也就是远程代码执行漏洞了。
来自github的请求抵达api.wordpress.org,那么webhook会通过共享的hashing算法来确认,的确是github发出的请求。整个过程是github发出json数据,它会将数据和共享秘值进行混合,哈希后将哈希值与json数据一同发给api.wordpress.org。
api.wordpress.org收到请求之后,也将json数据和共享秘值进行混合,然后算哈希。最终结果如果和github发来的匹配,也就证明了来源是没问题的,是github发来的请求。
github采用sha1来生成哈希,并且在header: x-hub-signature: sha1={hash}的位置给出签名。webhook提取算法和哈希来确认签名。漏洞也就在于:代码会使用客户端提供的哈希函数,这里的客户端通常情况下当然就是github了。在这个过程中,如果能够绕过webhook认证机制,攻击者将能够向shell_exec直接传送post参数,从而执行远程代码并顺利入侵api.wordpress.org更新服务器。
当然整个过程需要让webhook认为,攻击者是知道共享秘值的。不过webhook能够让攻击者选择哈希算法,php提供了各种算法。找个足够弱的哈希算法,暴力攻破webhook,发出一系列哈希,猜出共享秘值和发送数据的哈希值,直到猜对为止,api.wordpress.org就会响应请求。
整个过程的详情可以参见文末wordfence的原文链接。
问题根源没有解决?
wordfence是在今年9月份将该漏洞上报给automattic(wordpress母公司)的,automattic与9月7日向代码库推了fix(有关补丁详情,可以点击这里)。不过wordfence表示api.wordpress.org仍然是部署wordpress核心、插件和主题升级的单点故障根源所在。
wordfence表示曾经试图与automattic安全团队就有关自动升级系统的安全问题展开对话,但没有得到任何回应。大约在3年前,就有相关wordpress服务器部署认证机制的探讨,目前都还没有任何进展。