WordPress 5.2 发布,支持通过数字签名检查更新

由...所提交 发布网络内容管理系统 WordPress的5.2。 该版本因其完成而引人注目 六年史诗 关于实施 能力 使用数字签名检查更新和添加。

到目前为止,在 WordPress 中安装更新时,主要的安全因素是对 WordPress 基础设施和服务器的信任(下载后,检查哈希值而不验证源)。 如果该项目的服务器遭到破坏,攻击者就能够欺骗更新并在使用自动更新安装系统的基于 WordPress 的站点之间分发恶意代码。 根据以前使用的信任传递模型,这种替代不会被用户注意到。

考虑到这一事实 数据 在 w3techs 项目中,网络上 33.8% 的网站都使用 WordPress 平台,如果该事件发生的话,其规模将是一场灾难。 与此同时,基础设施受损的危险并不是假设的,而是真实存在的。 例如,几年前,一位安全研究人员 证明的 该漏洞允许攻击者在 api.wordpress.org 的服务器端执行其代码。

在数字签名的情况下,获得对更新分发服务器的控制不会导致用户系统受到损害,因为要进行攻击,您还需要获取单独存储的私钥,用该私钥对更新进行签名。

使用数字签名检查更新源的实现受到以下事实的阻碍:标准 PHP 包中最近出现了对必要加密算法的支持。 由于库的集成,出现了必要的密码算法 天竺葵 给主队 PHP 7.2的。 但作为 WordPress 中最低支持的 PHP 版本 指出 版本 5.2.4(来自 WordPress 5.2 - 5.6.20)。 启用数字签名支持将导致对 PHP 最低支持版本的要求显着增加或添加外部依赖项,但考虑到托管系统中 PHP 版本的流行,开发人员无法做到这一点。

解决方案是 发育 WordPress 5.2 中包含了 Libsodium 的精简版 - 钠兼容性,其中验证数字签名的最小算法集是用 PHP 实现的。 该实现在性能方面还有很多不足之处,但完全解决了兼容性问题,并且还允许插件开发人员开始实现现代加密算法。

使用算法来生成数字签名 Ed25519,在 Daniel J. Bernstein 的参与下开发。 为根据更新存档的内容计算出的 SHA384 哈希值生成数字签名。 Ed25519 具有比 ECDSA 和 DSA 更高的安全级别,并且具有非常高的验证和签名创建速度。 Ed25519对黑客攻击的抵抗力约为2^128(平均而言,对Ed25519的攻击将需要2^140位操作),这对应于密钥大小为256位的NIST P-3000和RSA等算法的抵抗力或 128 位分组密码。 Ed25519 也不易受到哈希冲突问题的影响,并且不易受到缓存定时攻击或旁道攻击的影响。

在WordPress 5.2版本中,数字签名验证目前仅覆盖主要平台更新,默认情况下不会阻止更新,而只是告知用户存在问题。 由于需要全面检查和绕过,决定不立即启用默认阻止 可能出现的问题。 未来,还计划添加数字签名验证,以验证主题和插件的安装来源(制造商将能够使用其密钥签署版本)。

除了 WordPress 5.2 中对数字签名的支持之外,还可以注意到以下变化:

  • “站点健康”部分添加了两个新页面,用于调试常见配置问题,并且还提供了一个表单,开发人员可以通过该表单向站点管理员留下调试信息;
  • 新增“白屏死机”的实现,在出现致命问题时显示,并通过切换到特殊的崩溃恢复模式帮助管理员独立修复与插件或主题相关的问题;
  • 已经实现了一个检查插件兼容性的系统,该系统会考虑到所使用的 PHP 版本,自动检查在当前配置中使用该插件的可能性。 如果插件需要较新版本的 PHP 才能工作,系统将自动阻止包含该插件;
  • 添加了对使用 JavaScript 代码启用模块的支持 的WebPack и 巴贝尔;
  • 新增privacy-policy.php模板,允许您自定义隐私政策页面内容;
  • 对于主题,添加了 wp_body_open 挂钩处理程序,允许您在 body 标记之后立即插入代码;
  • PHP 最低版本要求已提高至 5.6.20;插件和主题现在可以使用命名空间和匿名函数;
  • 添加了 13 个新图标。

另外,你可以提到 发现 WordPress 插件中的严重漏洞 WP 实时聊天 (CVE-2019-11185)。 该漏洞允许在服务器上执行任意 PHP 代码。 该插件在超过 27 个网站上用于组织与访问者的互动聊天,其中包括 IKEA、Adobe、华为、PayPal、Tele2 和 McDonald's 等公司的网站(Live Chat 通常用于实现弹出烦人的弹出窗口)在公司网站上与员工聊天并提供优惠)。

该问题表现在将文件上传到服务器的代码中,它允许您绕过有效文件类型的检查并将 PHP 脚本上传到服务器,然后直接通过 Web 执行它。 有趣的是,去年 Live Chat (CVE-2018-12426) 中已经发现了类似的漏洞,该漏洞允许以图像的形式加载 PHP 代码,并在 Content-type 字段中指定不同的内容类型。 作为修复的一部分,添加了针对白名单和 MIME 内容类型的额外检查。 事实证明,这些检查实施不正确,很容易被绕过。

特别是,禁止直接上传“.php”扩展名的文件,但与许多服务器上的PHP解释器关联的“.phtml”扩展名并未被添加到黑名单中。 白名单只允许图片上传,但您可以通过指定双扩展名来绕过它,例如“.gif.phtml”。 要绕过文件开头的 MIME 类型检查,在使用 PHP 代码打开标签之前,指定“GIF89a”行就足够了。

来源: opennet.ru

添加评论