首页 教程WordPress正文

WordPress 自动更新漏洞可使全球27%网站被一举击溃

Wordfence 最近披露了某个影响范围很广的安全问题,大量 WordPress 网站都受到影响。这个漏洞利用的是 WordPress 的自动更新功能,此功能默认是开启的,又因为整个互联网上大约有

Wordfence 最近披露了某个影响范围很广的安全问题,大量 WordPress 网站都受到影响。这个漏洞利用的是 WordPress 的自动更新功能,此功能默认是开启的,又因为整个互联网上大约有 27%的站点都采用 WordPress,所以 Wordfence 宣称,整个 web 世界有 27%的网站都可能因此被黑。

简单说就是利用 WordPress 更新服务器的弱点,控制该服务器,自然也就能够同时对所有采用 WordPress 的网站完成入侵了。

161201_wordpress.jpg

一击黑入全球 1/4 的网站

在 WordPress 生态中,api.wordpress.org 服务器的重要功能在于,为 WordPress 站点发布自动更新。各 WordPress 站点,每隔 1 个小时就会向该服务器发起请求,检查插件、主题和 WordPress 核心更新。

api.wordpress.org 服务器的响应就包括了 WordPress 各部分是否需要自动更新,响应中也包含下载和安装更新软件的 URL 地址。

于是,只要搞定了这台服务器,黑客也就能够让所有的 WordPress 站点自动从他们自己的 URL 下载和安全恶意程序了。也就是说,攻击者通过 api.wordpress.org 的自动更新机制,就能大规模黑入大量 WordPress 站点。

161201_wordpress1.jpg

整个过程实际上是完全可行的,因为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 发来的请求。

161201_wordpress1.jpg

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 服务器部署认证机制的探讨,目前都还没有任何进展。

共收到 0 条回复

访客访客