如果您收到我的邮件并被引导到此页面,是因为您的网站看起来正在运行受已知安全问题影响的 Bookly 版本(WordPress 预约插件 bookly-responsive-appointment-booking-tool)。本页说明 问题是什么、如何查看您的版本、如何升级,以及升级之后值得做的一件后续事项。

该问题是 CVE-2026-13395,即插件前台预约流程中的一处无需身份验证的 SQL 注入。受影响版本为 11.3 至 27.7,已在 2026 年 7 月 10 日发布的 27.8 中修复。如果您运行的是受影响版本, 请将 Bookly 升级到 27.8 或更高版本(27.9 是当前版本,同样包含该修复)。目前没有任何迹象 表明该问题正在被利用,任何地方都没有公开的利用报告。本页是预防性提醒,不是事件报告。

与我发出的其他一些通知不同,这一条取决于您网站的配置。无需开启任何设置该缺陷即可被触及: 在普通安装中,受影响的请求路径对未登录的访问者是开放的。如果您的 Bookly 版本落在受影响范围内, 值得尽快升级。

这是插件的缺陷,不是 WordPress 核心的缺陷。如果 Bookly 插件本身仍是受影响版本,即使 WordPress 完全为最新版也无法保护您。

这封邮件是真实的吗?

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

我所做的只是查看您的网站向每位访问者公开提供的文件(就像您的首页是公开的一样),并记录 Bookly 插件公开的版本号。具体来说,我没有向您的预约表单或本问题所涉及的请求路径发送任何 内容,这项检查也不触及您的数据、后台管理区域或网站的任何私有部分(详见下方 我做了什么、没做什么)。

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

为什么这很重要

Bookly 是 WordPress 上使用最广泛的预约插件之一,自 2014 年起收录于官方目录,运行在数万个网站 上。它在您网站的前台发布一个预约表单,让访问者无需账号即可选择服务项目、服务人员和时段。

在受影响的版本中,该表单回传的其中一个值(访问者所选服务人员的标识)会被原样存储、不作校验, 之后又被直接拼接进数据库查询,而不是作为参数传入。因此,凡是提交精心构造的值而非普通标识的人, 都可以改变该查询的含义。实际后果是:没有账号、也未登录的人可能读取到您网站数据库中该查询 本不应返回的数据,其中包括您 WordPress 用户账号的密码哈希。

有两点需要在两个方向上都讲清楚。

第一,把握分寸:这是一个数据读取问题,而非服务器或管理员权限被接管。它本身并不能让攻击者在 您的服务器上执行代码,也不能让其登录您的后台。密码哈希并不是密码,仍需破解之后才能转化为访问 权限。而且没有证据表明其被利用:分配该 CVE 的机构未发布严重性评分,它不在美国 CISA 的已知 被利用漏洞(KEV)目录中,其被利用可能性评分(EPSS)未评定,我也未见任何利用报告。

第二,不淡化问题:在匿名访问者与该路径之间,没有登录、没有一次性令牌、也没有任何插件设置作为 阻隔。在免费版插件的默认安装上它即可被触及。正因如此,这里的建议是尽快升级,而不是把它归入下一 个维护窗口。

如果我的邮件提到了这个问题,说明您网站报告的版本落在受影响范围内。我并未测试您的具体网站是否 可被利用;我观察到的只有版本号。

我受影响吗?

归结为一个问题:您运行的是哪个版本的 Bookly? 您不必只听我一面之词,有两种查看方式。

在 WordPress 后台(权威来源):

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

从公开清单文件(无需登录): 在浏览器中打开 您的域名.com/wp-content/plugins/bookly-responsive-appointment-booking-tool/readme.txt。靠近 开头的 Stable tag: 一行就是您的安装所报告的版本,这也正是我读取的那个公开文件。

然后套用以下规则,并注意版本号是按数值比较,而不是按字母顺序

  • 11.3 至 27.7: 受影响。请立即升级。
  • 27.8 或更高: 已修复。这包括保留了该修复的 27.9
  • 早于 11.3: 不受此问题影响。那些版本中并不存在这种不安全的查询构造,服务人员标识当时是 经由插件的参数化查询构建器处理的。如此老旧的版本有许多其他理由需要升级,但本通知不是其中之一。
  • 不要把版本号当作文本来读。Bookly 的主版本号是两位数,因此按文本排序会两次给出错误答案: 3.3 看起来比 27.8 大,实际却老得多;27.10 看起来比 27.7 小,实际却更新。请逐段数字 比较。

关于 Bookly 的附加组件。 Bookly 的付费扩展(Pro 以及各类 bookly-addon-* 包)是作为 拥有各自版本号的独立插件安装的,而它们资源文件的网址可能携带主插件的版本号而非自身版本。 对本通知而言,重要的是主插件 Bookly 的版本,通过上述两种方式之一获取,而不是从附加组件文件 上读到的数字。

如果您从外部看不到任何 Bookly 文件。 Bookly 有一个设置,用于控制它的脚本和样式是在每个页面 加载,还是仅在包含预约表单的页面加载。若您选择的是后者,从外部能看到的插件内容就少得多。该设置 只影响访问者能看到什么,与缺陷是否存在、是否可被触及无关。请在后台确认您的版本。

如何升级

最稳妥的做法是通过 WordPress 自身升级,并事先备份:

  1. 在做任何更改前备份您的网站(文件与数据库)。多数主机商提供一键备份,也可以使用备份插件。
  2. 在 WordPress 后台,进入仪表盘然后更新,或进入插件然后已安装的插件。如果列出 了 Bookly 的更新,请从这里安装。
  3. 如果您更习惯命令行,WP-CLI 效果相同: wp plugin update bookly-responsive-appointment-booking-tool
  4. 如果没有出现更新,您可以直接从 WordPress.org 目录中的插件页面获取最新版本, Bookly, 然后通过插件安装插件上传插件进行更新。
  5. 升级后,用上述步骤确认新的版本号(27.8 或更高),并检查您的预约表单和已有预约是否正常。

如果您使用 Bookly 的付费附加组件,请与主插件一并升级,它们的发布通常是配套的。

顺便也值得确认 WordPress 核心和其他插件是否为最新版本,同样的道理适用于所有组件。

升级之后

升级到 27.8 或更高版本即可关闭该问题;没有迹象表明该缺陷在任何地方被利用过,因此并不意味着需要 应急响应:您无需将网站视为已被入侵,也不必让它下线。

但有一件后续事项值得真正去做,它直接来自该缺陷能够触及的范围。由于 WordPress 密码哈希属于该 查询可能返回的数据,而先前被取走的哈希在您升级之后依然对攻击者有用,因此合理的预防措施是在 升级完成后重置管理员账号的密码。另有两个较小的步骤与之相配:

  • 查看您的管理员和编辑账号,确认没有您不认识的账号,就像您平时检查网站访问权限那样。
  • wp-config.php 中重新生成 WordPress 的安全密钥与 salt(新值可在官方 密钥生成器一键获取; 更换后所有用户会被登出一次)。

请把这当作日常安全维护,而不是事件响应。

我做了什么、没做什么

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

尤其是,我从未向您的预约表单或本问题所涉及的请求路径发送过任何内容。没有提交、没有测试、 也没有利用任何东西。这一点在此比在这些页面中的大多数都更重要:该缺陷本身就是对该路径的一次 未经身份验证的请求,因此”我没有碰它”正是披露与入侵之间的全部区别。

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

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

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

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

联系方式

Evan Harris,安全研究员

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

参考

官方公告与追踪

开发者 / 插件