安装量超过 200 万次的高级自定义字段 (ACF) WordPress 插件宣布发布安全更新版本 6.2.5,该更新修复了一个漏洞,该漏洞的严重程度尚不清楚,仅发布了有关该漏洞的有限详细信息。
虽然尚不清楚可能发生何种类型的攻击或攻击者可能造成的损害程度,但 ACF 确实建议该漏洞需要贡献者级别或更高级别的访问权限,这在一定程度上使发起攻击变得更加困难。
ACF 6.2.5 可能会引入重大变化
安全发布公告警告说,更新补丁引入的更改有可能导致网站崩溃,并提供了有关如何调试更改的说明。
版本 6.2.5 更新对 ACF 短代码处理和输出潜在不安全 HTML 内容的方式进行了重大更改。现在,输出将被转义,这是一个安全过程,通常会删除不需要的 HTML(例如恶意脚本或格式错误的 HTML),以便呈现的 HTML 是安全的。
然而,此更改在增强安全性的同时,可能会破坏使用短代码呈现脚本或 iframe 等复杂 HTML 元素的网站。
可能被误用的标签(例如 <script> 和 <iframe>)将被自动删除,尽管这可以根据特定站点的需求进行自定义。
不寻常且复杂的安全发布
此安全更新是独一无二的,因为在大多数情况下,安全研究人员会秘密向 WordPress 插件发布者发出漏洞警报,然后发布者会悄悄发布更新来解决该问题。通常,安全研究人员会等待几周才发布公告,以便用户有足够的时间在漏洞广为人知之前更新其插件。
此漏洞的情况并非如此,因为潜在的破坏性更改使情况变得复杂。因此,ACF 正在采取措施宣布安全版本,并提醒用户修复引起的潜在问题,这些问题可以缓解,但只能通过 ACF 用户端的更改来缓解。
6.2.7 计划于 2024 年 2 月进行的另一次安全修复
修补此漏洞的复杂性导致我们选择在今年 2 月推出第二个安全版本,即版本 6.2.7。这将为插件用户提供额外的时间来准备和减轻其他潜在的重大变化。
版本 6.2.7 将这些安全措施扩展到其他 ACF 函数,包括 the_field() 和 the_sub_field()。网站管理员应注意 HTML 输出中的潜在更改,并建议检查其网站与这些即将发生的更改的兼容性。
还有一种方法可以手动添加 6.2.7 版本中的更改。ACF 解释说,如果您当前没有存储不安全的 HTML,或者您正在存储不安全的 HTML,但已经转义了数据,那么可以选择剥离不安全的 HTML 并在 WordPress 中触发错误报告的新行为具有以下过滤器的管理面板:acf/the_field/escape_html_optin
漏洞描述
此更新的必要性源于一个已发现的漏洞,该漏洞允许具有贡献者角色的用户(通常无法发布未经过滤的 HTML)插入恶意代码。此问题绕过了 ACF 的标准清理协议,从而产生潜在的安全风险。
为了消除此漏洞,ACF 6.2.5 将检测并从短代码输出中删除不安全的 HTML。受影响的字段将在 WordPress 管理区域中触发错误消息,帮助网站所有者识别和解决错误。
the_field() 函数即将发生的变化
the_field() 函数将在版本 6.2.5 中进行安全修订,并且 the_sub_field() 函数将在版本 6.2.7 中进行更改。这些功能将默认纳入 HTML 安全措施,防止输出潜在有害内容。
根据公告:
“此版本是一个安全修复版本,包含您在更新之前需要注意的重要更改,并为即将发布到 ACF 的 the_field 输出更改做好准备。
从 ACF 6.2.5 开始,使用 ACF 短代码输出 ACF 字段将被 WordPress HTML 转义函数 wp_kses 转义。
如果您使用短代码 () 输出潜在不安全的 HTML(例如文本区域或所见即所得字段的脚本或 iframe),这可能会成为重大更改。”
关于即将到来的版本 6.2.7 的变更,如果您的网站将受到版本 6.2.7 的变更的影响,ACF 6.2.5 将会发出警报,以便有时间提前做好准备。
开发人员安全使用 ACF 指南
建议开发人员谨慎处理 HTML 输出。在需要未经过滤的 HTML 输出(例如脚本标记)的情况下,建议使用“echo get_field()”。对于其他情况,建议应用适当的转义函数,例如“wp_kses_post”(一种清理 HTML 输出的安全函数)。
根据WordPress 官方安全文档页面有关“wp_kses_post”函数的信息:
“清理帖子内容允许的 HTML 标签的内容。
说明帖子内容是指“帖子”类型的页面内容,而不是表单中的 $_POST 数据。
该函数需要未斜杠的数据。”
ACF 的更新还引入了字段类型处理方面的修改,特别是对于传统上输出 HTML 的字段,例如 oEmbed 和 WYSIWYG。这些更改旨在平衡 HTML 输出的需求与安全考虑。
ACF 解释:
“为了支持这一点,我们为字段类型添加了一种方法,通过新参数 $escape_html 来标记它们将在请求时处理 HTML 转义。
新参数在 get_field 和 get_field_object 上可用,并一直传递到 fields format_value 方法。
这意味着如果字段类型支持处理转义本身,则将其设置为 true 将获得转义值。
最终用户不应使用此参数,因为它还需要进行检查以确保字段类型已更新以支持转义其自己的 HTML。对于除 WYSIWYG 之外的每个核心 ACF 字段,此属性目前不会对其值产生影响。”
我们敦促所有 ACF 用户立即更新到版本 6.2.5,以减轻已发现的安全风险。此外,建议那些不使用 ACF 短代码的人完全禁用它。
阅读官方公告: