如果您收到我的邮件并被引导到此页面,是因为您的网站看起来正在运行的 Link Library 版本 (这个 WordPress 插件由 Yannick Lefebvre 开发,在您的文件中位于 /wp-content/plugins/link-library/)落在某个已知安全问题的受影响范围内。本页说明该问题是 什么、如何查看您使用的版本、如何更新,以及之后应当做什么。

该问题是 CVE-2026-16532,这是一个未经身份验证的 SQL 注入漏洞,可通过该插件的链接提交处理 流程触及。它影响 7.9.3 之前的每一个发布版本,并在 7.9.3 中得到修复。撰写本文时的当前 发布版本是 7.9.4,它同样包含该修复。如果您运行的是任何早于 7.9.3 的版本,请将 Link Library 更新到 7.9.3 或更高版本

有一点需要说清楚:不存在更旧的安全版本。这不是一个在插件历史上的某个时点被引入、之后又被 修复的缺陷。存在漏洞的代码出现在我能够检查的每一个已发布版本中,一直追溯到 WordPress.org 目录 仍在提供的最旧版本。”我的安装太旧了,不会受影响”在这里并不是一条出路。唯一不受影响的版本是 7.9.3 及更高版本。

同样重要的是:本通知取决于您的网站是如何配置的。Link Library 包含一个允许访问者推荐链接 的表单,人们自然会假设只有当网站真的把该表单放到了某个页面上时才会暴露。这个假设是错误的。 受影响的代码会在每一个普通的前台请求中运行,无论您是否曾经发布过那个提交表单,而且该插件的 默认设置并不会阻止它。如果您的网站运行的是受影响的版本,它就是可被触及的。就是这样。

这是一个插件缺陷,不是 WordPress 核心的缺陷。如果 Link Library 插件本身处于受影响的版本, 那么一个完全更新到最新的 WordPress 并不能保护您。

这封邮件是真实的吗?

是的。这是一位独立安全研究者出于善意、依照负责任披露原则发出的通知。我不会向您索取金钱、 密码或网站访问权限,我也没有尝试入侵您的网站、向它提交任何内容或利用任何漏洞。

我所做的只是查看您的网站向每位访问者公开提供的文件(就像您的首页是公开的一样),并记录该插件 公开的版本号。我特意没有向该插件的链接提交功能提交任何内容,无论是在您的网站还是任何其他 网站上,这次检查的任何环节都不会触及您的数据、您的后台或您网站的任何私有部分(详见下方 我做了什么、没做什么)。

如果您想核实我的身份,请查看本页底部的联系方式以及关于页面。

为什么这很重要

Link Library 会在您的网站上构建并展示链接目录,并且可以接受访问者提交的链接推荐。问题就出在 推荐的处理流程中。

在受影响的版本中,当插件处理一条提交的链接时,它用于判断该链接是否已存在的检查会把提交的值 直接拼进一条数据库查询里。这些值为显示做了清理,但并没有为在 SQL 中使用而转义,而且该查询 运行时没有使用预处理语句。其后果是:一个未登录的访问者可以改变这条查询,并从您网站的数据库中 读取数据。7.9.3 版本把该查询改写为使用预处理语句,从而关闭了这个问题。

再重复一遍开头的那一点,因为它最容易让人产生虚假的安心感:是否暴露并不取决于提交表单是否 发布在您网站的任何地方。 处理提交的那条代码路径会在每一个前台请求上监听,而一个请求要抵达 它所需要的一切,都可以从插件本身获得,不需要任何页面上存在任何表单。您的网站是否暴露只取决于 一件事:您运行的版本。

同样值得说清楚的是这个问题是什么、不是什么。它让攻击者能够从数据库中读取数据。这本身就很 严重,因为 WordPress 数据库中保存着用户邮箱地址和经过哈希的密码之类的东西,在某些网站上还有 客户或会员记录。但它本身并不是远程代码执行、网站接管,也不是让攻击者给自己弄一个管理员账号的 途径。它比我在别处写到的完全沦陷类问题要窄,我宁愿诚实地界定其严重程度,也不愿给您留下比事实 更可怕的印象。

我只讲到网站所有者采取行动所需的详细程度,不再深入。我不会公布那些足以让人复现该问题的细节, 也请您不要在自己的或他人的网站上尝试。像下文所述那样读取您的版本号,就足以让您决定该做什么。

如果我的邮件引用了这个问题,说明您网站报告的版本早于 7.9.3。我并没有测试您这个具体网站是否 可被利用;我观察到的只有版本号。

我受影响吗?

归结为一个问题:您运行的是哪个版本的 Link Library?

在 WordPress 后台(权威来源):

  1. 登录您的 WordPress 仪表盘(通常是 您的域名.com/wp-admin)。
  2. 进入插件,然后是已安装的插件
  3. 找到 Link Library:目录为 link-library 的那一项,查看其名称下方显示的版本。

从公开清单文件(无需登录): 在浏览器中打开 您的域名.com/wp-content/plugins/link-library/readme.txt。靠近开头的 Stable tag: 一行 就是您的安装所报告的版本,这也正是我读取的那个公开文件。对这个插件,我核实过它在最近的每一个 发布版本中都与实际发布的代码相符,因此这是一种可靠的检查方式。

有一种检查方式对这个插件不适用,因此请不要依赖它。 如果您习惯从页面源代码中脚本或样式表 后面附带的 ?ver= 数字来读取插件版本,在这里它会误导您。该插件资源 URL 上的版本号是所捆绑的 第三方库被固定的版本(诸如 4.0.11.0.01.3.9 这样的值),或者是 WordPress 核心的 版本。它们当中没有一个是该插件的版本,把其中任何一个拿去和 7.9.3 比较都毫无意义。请使用后台 页面或 readme.txt

还有一种特殊情况:某些非常古老的安装在其 readme.txt 中显示 Stable tag: trunk。那根本不是 一个版本号。如果您看到它,请改用后台的插件页面,并在该页面告诉您别的结果之前先把这个安装视为 受影响,因为一个老到会写 trunk 的安装必定早于 7.9.3。

然后套用以下规则:

  • 任何早于 7.9.3 的版本: 受影响。请更新。不存在某个分界线,低于它的旧版本就重新安全了。
  • 7.9.3 或更高版本: 已经修复。当前发布版本 7.9.4 同样包含该修复。

如何升级

该插件是免费的、仍在发布且积极维护,因此修复就是一次普通的更新。最稳妥的做法是通过 WordPress 自身更新,并且先做备份:

  1. 备份您的网站(文件和数据库)之后再做更改。多数主机商提供一键备份,或者使用一款 WordPress 备份插件。
  2. 在 WordPress 后台,进入仪表盘然后更新,或者插件然后已安装的插件。如果列出 了 Link Library 的更新,请从这里安装。
  3. 如果您更习惯命令行,WP-CLI 的效果相同:wp plugin update link-library
  4. 如果没有出现更新,您可以直接从该插件在 WordPress.org 目录中的页面 Link Library 获取最新 发布版本,并通过插件然后安装插件然后上传插件进行更新。
  5. 更新后,请用上面的步骤确认新的版本号(7.9.3 或更高),并检查您的链接目录是否仍然正常显示 与工作。

趁着在后台,也值得确认一下 WordPress 核心和您的其他插件是否都是最新的,因为同样的道理适用 于它们全部。

更新之后

更新到 7.9.3 或更高版本即可关闭这个问题:提交检查现在以预处理语句的方式运行,因此提交的值会被 当作数据处理,而不是当作查询的一部分。

更新做不到什么,需要谨慎表述。 更新能阻止今后有人从您的数据库中读取数据。它无法撤销在网站 处于受影响版本期间可能已经被读取的内容。我对您的网站上是否发生过这种情况没有任何可见性,我也 没有去查看;处于受影响范围内的大多数网站很可能从未被碰过。但因为我无法确定地告诉您这一点, 采取一点预防措施是合理的,其力度应与您数据库中保存的内容相称:

  • 如果您的网站是一个普通的内容发布站点,数据库中保存的是您的文章、页面和少量用户账号,那么 明智的一步是让您的用户(尤其是您的管理员)更改密码。WordPress 存储的密码是经过哈希的,不是 明文,但弱密码的哈希可以离线破解,因此换一个新密码就能消除这份顾虑。
  • 如果您的网站保存了更敏感的内容(会员记录、客户资料、由插件保管的 API 密钥或其他凭据), 也应把它们视为值得轮换的对象。
  • 重新生成 wp-config.php 中 WordPress 的安全密钥与 salt(新值可在官方 密钥生成器一键获取) 会让所有用户登出一次,并使任何被窃取的会话令牌失效。

把话说清楚:这是一项预防措施,不是在宣布您的数据已被窃取。本通知基于的是一个版本号,而不是 任何遭受攻击的证据。

我做了什么、没做什么

为了完全说明我这封邮件背后的检查过程:我只读取了您的网站本来就向每位访问者提供的公开文件, 具体是该插件的公开 readme.txt 文件和您的首页。我没有访问您的 WordPress 后台、数据库或 网站的任何私有部分。

特别地,我从未向该插件的链接提交功能提交任何内容,无论是在您的网站还是其他任何地方。没有 任何东西被提交、存储、测试或利用。这一点在本页比在大多数同类页面上更重要,因为提交处理流程 正是这个问题所涉及的东西,所以”我没有碰它”就是披露与入侵之间的全部区别。

我也有意不公布那些能帮助他人利用这个问题的细节。上面的描述止步于网站所有者所需的程度,我也 不会链接任何概念验证代码。

这是一项基于版本的观察:您的网站报告的版本早于 7.9.3。处于该范围内的网站可能已经通过其他 方式得到保护,例如 Web 应用防火墙或回移的修复。本通知并不表示在我检查时您的网站是可被利用的。

我没有网站管理员 / 我卡住了

如果维护网站的不是您本人,请将本页转发给负责的人(您的开发人员、代理机构或主机商)。他们会很快 认出上述步骤。

如果您自己维护网站并遇到困难,我很乐意免费为您指明方向。请通过下方联系方式与我联系。

联系方式

Evan Harris,安全研究员

我就此类问题主动联系,纯粹是为了帮助运营者保护自己的网站。如果您不希望再次收到联系,请告诉我, 我会遵从。

参考

官方公告与追踪

开发者 / 插件