SMS Alert 安全通知
如果您收到了我发来的指向此页面的电子邮件,是因为您的网站似乎正在运行 SMS Alert(在 WordPress 插件列表中显示为 “SMS Alert – SMS & OTP for WooCommerce, Order Notifications & Abandoned Cart Recovery”,由 Cozy Vision Technologies 开发,位于您的文件 /wp-content/plugins/sms-alert/ 中)的一个版本,该版本处于已知安全问题的受影响范围内。本页面解释了该问题是什么、如何判断它是否适用于您的网站,以及如何更新。从头到尾,这都是一个 WordPress 插件。
在其他一切之前,关于此通知最重要的事实是:处于受影响范围内的版本本身并不意味着您的网站已暴露。 下面的问题仅在以下两个条件同时成立时才会出现,而这两点都无法从网站外部看到:
- 您的网站在 SMS Alert 设置中已为 密码重置开启了 OTP 验证,并且
- 被攻击的账号 已存有电话号码。
如果您使用 SMS Alert 仅用于订单通知、弃单提醒,或结账、注册时的 OTP,而不是用于验证密码重置,那么即使版本受影响,此问题也极有可能不会波及您的网站。我可以从公共文件中读取您的插件版本,但我无法查看您的设置,因此此通知是一种预防性的提醒,而不是关于您网站的确认性发现。
该问题是 CVE-2026-11387,这是通过插件密码重置流程实现的未经身份验证的账号接管漏洞(CWE-640,弱密码恢复)。它影响 3.0.0 到 3.9.5 版本,并在 3.9.6 版本中修复。如果您正在运行受影响版本,请将 SMS Alert 更新到 3.9.6 或更高版本。3.9.7 和 3.9.8 版本随后发布,修复的是其他问题;就此问题而言,这两个版本都没有问题,目前的最新发布版本是 3.9.8。该漏洞的 CVSS 评分为 9.8,且概念验证代码已公开,这就是为什么即使上述配置问题很可能对您有利,我仍然要发出此通知的原因。
关于紧迫性,说明一点:这是一条有条件的通知。如果您不将 SMS Alert 用于密码重置验证,更新只是普通的插件维护。如果您确实使用它,请将此更新视为优先事项:在这种配置下,该漏洞可能让一个完全没有账号的远程访客,为任何存有电话号码的用户设置新密码,包括管理员,从而导致网站被完全控制。
这是一个 插件 漏洞,而不是 WordPress 或 WooCommerce 核心漏洞。即使 WordPress 完全保持最新,只要 SMS Alert 插件本身处于受影响版本,也 不会 保护您。
这封邮件是真实的吗?
是的。这是独立安全研究人员发出的善意、负责任披露通知。我 不会 向您索要金钱、密码或网站访问权限,我也 没有 尝试破解它、向其提交任何内容或利用任何漏洞。
我所做的只是查看您的网站向每位访客公开可见的文件(与您的主页公开的方式相同),并记录插件在其公共 readme.txt 文件中发布的版本号。我特意 没有 触碰密码重置流程,此检查的任何部分都不会触及您的数据、您的后台或您网站的任何私有部分(更多详情见下方的 我做了什么、没做什么)。
如果您想验证我的身份,请参阅此页面底部的联系方式和 关于 页面。
为什么这很重要
SMS Alert 为 WooCommerce 商店发送短信和 WhatsApp 通知,它还可以在某些用户操作之前设置一次性验证码。它能以这种方式保护的流程之一是”忘记密码?”重置:访客申请重置后,插件会向账号绑定的电话号码发送一次性验证码,而新密码本应只有在该验证码被正确输入之后才能被设置。
在受影响版本中,设置新密码的步骤并没有检查一次性验证码是否真的已经完成验证。因此,一个未登录、也没有自己账号的人,可以在从未输入验证码的情况下,将整个重置流程执行到底。3.9.6 版本增加了缺失的检查,因此设置密码的步骤现在会拒绝执行,除非验证码挑战已先被通过。
有两点决定了这对特定网站的影响程度。第一,入口在于那项特定配置:只有当管理员为密码重置启用了 OTP 验证时,插件才会运行其自身的重置流程,并且它只对存有电话号码的账号才有验证码可发送。从未开启该功能的网站,即使版本受影响,也极有可能完全不暴露。第二,当该配置 确实 存在时,影响是严重的,而非轻微的,因为没有任何限制将其局限于低权限账号:任何存有电话号码的账号都可能成为目标,管理员也不例外。
如果我的电子邮件引用了此问题,这意味着您的网站报告的版本处于受影响范围内。我没有测试您的特定网站是否可利用,也无法查看您的 OTP 设置是如何配置的;我所观察到的只是该网站报告了一个受影响版本。
我受影响吗?
两个问题按顺序决定这一点。
第一:您是否使用 SMS Alert 来验证密码重置? 这是决定性的问题,只有您能回答它。检查您自己的设置是完全安全的,也是本页面的全部目的。
- 在 WordPress 后台,打开 SMS Alert 菜单并进入其设置,然后进入控制 OTP 验证 的部分。该部分列出了您可以设置一次性验证码的各个流程。查看 密码重置(有时显示为”lost password”或”forgot password”)是否在您已启用的流程之中。
- 如果它 未 启用,即使版本受影响,此问题也极有可能不会波及您的网站。仍建议进行更新,作为普通维护。
- 如果它 已 启用,此问题就适用于您,您应立即更新。
请不要尝试在自己的网站或他人的网站上重现该问题,而且您也不需要这样做就能回答上述问题:查看您的设置就足以告诉您所需了解的信息。
第二:您正在运行哪个版本? 您不必相信我的话,但对于此插件,有一种显而易见的检查方式会产生误导,因此值得仔细阅读这部分。
从 WordPress 后台查看(权威来源):
- 登录您的 WordPress 仪表盘(通常位于
yourdomain.com/wp-admin)。 - 进入 插件,然后是 已安装的插件。
- 找到列为 “SMS Alert – SMS & OTP for WooCommerce …“(其文件夹为
sms-alert)的条目,并记下其名称下方显示的版本。这才是真正安装的版本。
从公共清单查看(无需登录): 在浏览器中打开 yourdomain.com/wp-content/plugins/sms-alert/readme.txt。靠近顶部的 Stable tag: 行就是您安装的版本所报告的版本号,这也正是我读取的同一份公共文件。
有一样东西不要相信: 您页面源代码中插件前端脚本和样式表所附带的 ?ver= 数字。SMS Alert 是根据一个内部常量为这些资产打上版本戳的,而该常量至少有一次落后于实际发布版本:3.5.0 版本发布时,其资产被打上的版本戳是 3.4.9。因此,用这种方式读取版本,可能会向您显示一个 比您实际运行的版本更旧 的版本号,在临界点上,这会让一个已打补丁的 3.9.6 安装看起来像是 3.9.5。这正是我没有用它来决定联系对象的原因,也是您应改用后台界面或 readme.txt 行来判断版本的原因。
然后应用此规则,并注意版本比较是 数值上 的,而不是字母上的,因此 3.9.10 会比 3.9.9 更新:
- 3.0.0 到 3.9.5: 可能受影响(取决于上述 OTP 配置问题),请立即更新。
- 3.9.6 或更新: 已经修复。这包括 3.9.7 和 3.9.8,它们是随后发布的版本,解决的是不相关的问题;目前的最新发布版本是 3.9.8。
- 早于 3.0.0: 超出了我愿意做出断言的范围。开发者目前仍发布的最旧版本是 3.0.0,因此我没有办法检查低于该版本的任何内容,与其指控一个我无法核实的版本,我宁愿什么都不说。实际上,这种情况只是假设:我在任何地方见过的最旧安装是 3.4.x 版本。
如何升级
最安全的做法是通过 WordPress 本身进行更新,并先进行备份:
- 在做出更改之前备份您的网站(文件和数据库)。大多数主机提供商提供一键备份功能,或者您可以使用 WordPress 备份插件。
- 在 WordPress 后台,转到 仪表盘 然后 更新,或 插件 然后 已安装的插件。如果列出了 SMS Alert 的更新,请从此处安装。
- 如果您更喜欢使用命令行,WP-CLI 也可以完成同样的操作:
wp plugin update sms-alert(该命令使用文件夹名称sms-alert)。 - 如果没有出现更新,您可以直接从 WordPress.org 目录中的插件页面获取最新版本, SMS Alert,然后通过 插件 然后 安装插件 然后 上传插件 进行更新。
- 更新后,使用上述步骤确认新版本号(3.9.6 或更高版本),并检查您的订单通知以及您使用的任何 OTP 流程是否仍正常工作。
趁着在后台,也值得确认 WordPress 核心、WooCommerce 以及您的其他插件是否都已是最新版本,因为同样的原则适用于它们全部。
更新之后
更新到 3.9.6 或更高版本即可解决该问题,对于大多数网站来说,这就是全部任务。此页面是一份预防性通知,而非事故报告:我无法得知您的网站上是否发生了任何事情,我也没有查看。
值得考虑的一个后续步骤是有条件的,取决于相同的配置问题。如果您的网站在运行受影响版本时已为密码重置启用了 OTP 验证,那么理论上至少存在这样的可能性:有人为存有电话号码的账号设置了新密码。更新可以关闭漏洞,但它不能撤销已经发生的访问,因此在这种情况下,采取两项常规预防措施是明智的:
- 审查您的管理员账号,以及其他重要账号,查找您不认识的条目或您未曾做出的角色变更。
- 查看最近的密码更改和最近的登录记录,针对存有电话号码的账号,并重置任何看起来在账号所有者未曾申请的情况下就发生更改的密码。
如果您发现令您担忧的内容,将其视为任何其他疑似未经授权的访问进行处理是正确的回应:轮换管理员密码,并考虑在 wp-config.php 中重新生成密钥和盐值,这会使所有现有会话退出登录。如果您的网站从未启用过密码重置 OTP,仅更新就足够了。
我做了什么、没做什么
为了完全透明地说明我邮件背后的检查过程:我只读取了您网站已经向每位访问者提供的两份公共文件,具体来说是插件的公共 readme.txt 文件和您的主页。我 没有 访问您的 WordPress 后台、数据库或网站的任何私有部分。特别是,我 没有 触碰密码重置流程,没有向您的网站提交任何内容,也没有测试或利用任何东西。
我还故意不发布那些会帮助他人利用此问题的细节:上面的页面仅在网站所有者需要的程度上描述了该漏洞,不再深入,并且我没有链接公开的概念验证代码。
这是一项 基于版本的观察:您的网站报告了一个处于受影响范围内的版本。因为该问题取决于具体配置,处于该范围内的网站可能根本没有暴露(如果它没有为密码重置使用 OTP 验证),也可能已经通过其他方式(例如 Web 应用防火墙)得到缓解。此通知并不是在说您的网站在我检查时是可被利用的。
我没有网站管理员 / 我卡住了
如果您不是负责维护网站的人,请将此页面转发给负责的人(您的网站开发人员、机构或主机提供商)。他们会很快识别出上述步骤。
如果您自己维护网站并遇到困难,我很乐意免费帮助您指明正确的方向。请使用下面的联系方式联系我。
联系方式
Evan Harris,安全研究员
- 邮箱:security@mail.mcpsec.dev
- X:@Evan__Harris
- GitHub:eharris128
- LinkedIn:Evan Harris
我就此类问题主动联系,纯粹是为了帮助运营者保护自己的网站。如果您不希望再次收到联系,请告诉我,我会遵从。
参考
官方公告与追踪
开发者 / 插件