到目前为止,在 WordPress 中安装更新时,主要的安全因素是对 WordPress 基础设施和服务器的信任(下载后,检查哈希值而不验证源)。 如果该项目的服务器遭到破坏,攻击者就能够欺骗更新并在使用自动更新安装系统的基于 WordPress 的站点之间分发恶意代码。 根据以前使用的信任传递模型,这种替代不会被用户注意到。
考虑到这一事实
在数字签名的情况下,获得对更新分发服务器的控制不会导致用户系统受到损害,因为要进行攻击,您还需要获取单独存储的私钥,用该私钥对更新进行签名。
使用数字签名检查更新源的实现受到以下事实的阻碍:标准 PHP 包中最近出现了对必要加密算法的支持。 由于库的集成,出现了必要的密码算法
解决方案是
使用算法来生成数字签名
在WordPress 5.2版本中,数字签名验证目前仅覆盖主要平台更新,默认情况下不会阻止更新,而只是告知用户存在问题。 由于需要全面检查和绕过,决定不立即启用默认阻止
除了 WordPress 5.2 中对数字签名的支持之外,还可以注意到以下变化:
- “站点健康”部分添加了两个新页面,用于调试常见配置问题,并且还提供了一个表单,开发人员可以通过该表单向站点管理员留下调试信息;
- 新增“白屏死机”的实现,在出现致命问题时显示,并通过切换到特殊的崩溃恢复模式帮助管理员独立修复与插件或主题相关的问题;
- 已经实现了一个检查插件兼容性的系统,该系统会考虑到所使用的 PHP 版本,自动检查在当前配置中使用该插件的可能性。 如果插件需要较新版本的 PHP 才能工作,系统将自动阻止包含该插件;
- 添加了对使用 JavaScript 代码启用模块的支持
的WebPack и巴贝尔 ; - 新增privacy-policy.php模板,允许您自定义隐私政策页面内容;
- 对于主题,添加了 wp_body_open 挂钩处理程序,允许您在 body 标记之后立即插入代码;
- PHP 最低版本要求已提高至 5.6.20;插件和主题现在可以使用命名空间和匿名函数;
- 添加了 13 个新图标。
另外,你可以提到
该问题表现在将文件上传到服务器的代码中,它允许您绕过有效文件类型的检查并将 PHP 脚本上传到服务器,然后直接通过 Web 执行它。 有趣的是,去年 Live Chat (CVE-2018-12426) 中已经发现了类似的漏洞,该漏洞允许以图像的形式加载 PHP 代码,并在 Content-type 字段中指定不同的内容类型。 作为修复的一部分,添加了针对白名单和 MIME 内容类型的额外检查。 事实证明,这些检查实施不正确,很容易被绕过。
特别是,禁止直接上传“.php”扩展名的文件,但与许多服务器上的PHP解释器关联的“.phtml”扩展名并未被添加到黑名单中。 白名单只允许图片上传,但您可以通过指定双扩展名来绕过它,例如“.gif.phtml”。 要绕过文件开头的 MIME 类型检查,在使用 PHP 代码打开标签之前,指定“GIF89a”行就足够了。
来源: opennet.ru