如果您收到了我发来的指向此页面的电子邮件,是因为您的网站似乎正在运行 Welcart e-Commerce(由 Welcart / Collne 开发的免费 WordPress 电子商务插件,位于您的文件 /wp-content/plugins/usc-e-shop/ 中)的一个版本,该版本处于已知安全问题的受影响范围内。本页面解释了该问题是什么、它对您的网站有多大影响、如何正确读取您的版本而不被误导,以及如何更新。

该问题是 CVE-2026-19914,一个无需身份验证的存储型跨站脚本(XSS)漏洞。它影响 直到 2.12.1 为止(含)的所有版本,并在 2.12.2 版本中修复,该版本于 2026 年 8 月 31 日发布。如果您正在运行 2.12.1 或任何更旧的版本,请 将 Welcart 更新到 2.12.2 或更高版本。该问题的评分为 CVSS 7.2(高),此为 Wordfence 的评分。我不知道有任何针对它的公开利用代码。

没有任何更旧的版本是安全的。 这不是一个在插件历史进行到一半时才引入、后来才修复的缺陷。此问题背后那处未经转义的输出,在插件的整个历史中一直存在,我确认它早在 1.7.0 版本中就已存在,因此“我的安装版本太旧,不会受影响”在这里并不是一条出路。唯一不受影响的版本是 2.12.2 及更新版本。

在其他一切之前,先说明一下这个问题是什么、又是如何被触发的,因为我宁愿把它讲清楚,也不愿让这份通知听起来比实际情况更严重。这是一个 存储型 跨站脚本漏洞,它能够运行的脚本是在 商店管理员 的浏览器中运行的,而不是在访客的浏览器中。要发生这种情况,必须同时发生两件独立的事:一个以访客身份下单的人必须在结账时向 自定义订单字段 提交一个精心构造的值,然后管理员必须在您 WordPress 后台的订单编辑界面打开那笔订单。提交的值会随订单一起存储,并在该界面上未经转义地呈现,因此当订单被查看时它就会运行。

我可以从一个公共文件读取您的 Welcart 版本,但我看不到您的订单,看不到是否有哪笔订单携带了精心构造的值,也看不到是否真的有人对您的网站这样做过。因此这份通知是一种基于您版本号的 预防性提醒,而不是针对您网站的确认性发现。

同样值得精确说明的是,这个问题是什么、不是什么。在管理员会话中触发的跨站脚本是一个值得修复的真实问题:在管理员登录期间运行的脚本,只要该页面处于打开状态,就能以该管理员的权限行事。但它本身并不是对网站的完全接管。它不是在您服务器上的远程代码执行,也不是让一个未经身份验证的陌生人直接给自己授予一个管理员账号的方法。它比我在其他地方写到的那些完全沦陷类问题范围要窄,并且它既取决于有一笔订单被提交,也取决于有一位管理员将其打开,所以我宁愿如实说明其规模,也不愿让您留下比事实更可怕的印象。

这是一个 插件 漏洞,而不是 WordPress 核心漏洞。即使 WordPress 完全保持最新,只要 Welcart 插件本身处于受影响版本,也 不会 保护您。

这封邮件是真实的吗?

是的。这是独立安全研究人员发出的善意、负责任披露通知。我 不会 向您索要金钱、密码或网站访问权限,我也 没有 尝试破解它、在其上下单,或利用任何东西。

我所做的只是查看您的网站向每位访客公开提供的页面和文件(与您的主页公开的方式相同),并记录插件发布的版本号。我特意 没有 下任何订单,没有 通过您的结账提交任何内容,没有 登录,也 没有 向受影响的功能发送任何内容。此检查的任何部分都不会触及您的数据、您的后台、您的订单,或您网站的任何私有部分(更多详情见下方的 我做了什么、没做什么)。

如果您想验证我的身份,请参阅此页面底部的联系方式和 关于 页面。

为什么这很重要

Welcart 把一个 WordPress 网站变成一家网上商店,并且是日本使用最广泛的 WordPress 电子商务插件。它所做的一部分工作,是在结账时接收顾客的信息,包括商店为收集额外信息而添加的任何自定义订单字段,并将其与订单一起存储,以便工作人员日后查看。

在受影响的版本中,在访客结账期间提交到自定义订单字段中的值,会与订单一起存储,随后在您 WordPress 后台的订单编辑界面上 未经转义地 显示。转义就是把看起来像标记的文本重新变回纯文本以供显示的处理。没有它,一个被构造为包含活动内容的值就不会被作为文本显示,而是会被打开该订单的那位管理员的浏览器运行。由于访客无需登录即可下单,提供该值的人根本不需要在您的网站上拥有任何账号。

这个前提条件值得清楚地说一遍,因为它是最容易被朝任何一个方向误读的部分:这既需要 一笔精心构造的订单被提交, 需要一位管理员将其打开。它不会在您的店面上触发,也不会对普通访客造成任何影响。它触及的,是一位在 WordPress 后台查看订单的商店管理员的会话。

我以网站所有者需要采取行动的水平描述这一点,不再深入。我不会发布允许他人重现此问题的细节,也希望您不要尝试在自己的网站或他人的网站上进行尝试。按照下面的描述读取您的版本号,会告诉您决定采取什么行动所需的一切信息。

如果我的电子邮件引用了此问题,这意味着您网站报告的版本是 2.12.1 或更旧。我没有测试您的特定网站是否可利用,我也看不到您的订单。我所观察到的只是版本。

我受影响吗?

这归结为一个问题:您正在运行哪个版本的 Welcart?

从 WordPress 后台查看(权威来源):

  1. 登录您的 WordPress 仪表盘(通常在 yourdomain.com/wp-admin)。
  2. 进入 插件,然后是 已安装的插件
  3. 找到 Welcart e-Commerce,其文件夹为 usc-e-shop 的条目,并记下其名称下方显示的版本。

从公共清单查看(无需登录): 在浏览器中打开

yourdomain.com/wp-content/plugins/usc-e-shop/readme.txt

并阅读顶部附近的 Stable tag: 行。如果该地址返回“未找到”,请尝试大写的 README.txt,有些主机区分大小写,也有少数版本包以大写形式提供该文件。

从您的页面源代码查看(无需登录): 查看您主页的源代码,并查找插件自身的样式表,路径恰好为:

/wp-content/plugins/usc-e-shop/css/usces_default.css?ver=...

附加到 文件上的 ?ver= 数字就是插件自身的版本,也是我读取的公开来源。Welcart 会在它的商店页面上加载这个样式表,因此商店页或购物车页是查找它的可靠位置。只在 usces_default.css 上读取版本:写入您页面的其他文件带有各自的、完全无关的 ?ver= 数字,读取您遇到的第一个可能会让您得到另一款软件的版本。如果您完全无法从页面源代码中获得可读的数字,这很常见,也不说明任何问题,缓存和优化插件经常会剥离资产网址上的 ?ver= 值,在这种情况下,请改用 readme.txt 或后台界面。

然后应用此规则,并注意版本比较是 数值上 的,而不是字母上的,因此 2.12.1 比 2.9.1 更新,尽管“12”作为文本看起来比“9”小:

  • 2.12.1 或更旧: 受影响。请更新到 2.12.2 或更高版本。不存在某个更旧的版本以下就会重新变得安全的分界线。
  • 2.12.2 或更新: 就本问题而言已修复。采用最新的可用版本是最佳选择。

如何升级

该插件是免费的,仍在发布中,并得到积极维护,因此修复方法是一次常规更新。最安全的做法是通过 WordPress 本身进行更新,并先进行备份:

  1. 在做出更改之前备份您的网站(文件和数据库)。大多数主机提供商提供一键备份功能,或者您可以使用 WordPress 备份插件。
  2. 在 WordPress 后台,转到 仪表盘 然后 更新,或 插件 然后 已安装的插件。如果列出了 Welcart 的更新,请从此处安装。
  3. 如果您更喜欢使用命令行,WP-CLI 也可以完成同样的操作:wp plugin update usc-e-shop(该命令使用文件夹名称,而不是显示名称)。
  4. 如果没有出现更新,您可以直接从 WordPress.org 目录中的插件页面获取最新版本,Welcart e-Commerce,然后通过 插件 然后 安装插件 然后 上传插件 进行更新。
  5. 更新后,使用上述步骤确认新版本号(2.12.2 或更高版本),并在后台打开一笔近期订单,确保订单界面仍正常显示。

2.12.2 版本除了这个问题之外还修复了其他安全问题,因此无论如何更新都是值得的。趁着在后台,也值得确认 WordPress 核心 和您的其他插件是否都已是最新版本,因为同样的原则适用于它们全部。

更新之后

更新到 2.12.2 或更高版本即可解决该问题,对于大多数网站来说,这就是全部任务。此页面是一份预防性通知,而非事故报告:我无法得知您的网站上是否发生了任何事情,我也没有查看。

趁着更新还新鲜,有一件小事值得做:

  • 确认版本确实发生了变化,使用上述检查中最简便的一种,并在后台打开一笔订单,确保订单界面仍能正常显示。

您会注意到这个页面上没有“假设您已被入侵”的检查清单,这是刻意为之,而不是遗漏。这个问题带来的是一段在管理员浏览器中运行的脚本,并且仅当一笔精心构造的订单被提交、且随后有一位管理员将其打开时才会发生。它不会在您的服务器上运行代码,本身也不会为任何人创建管理员账号,因此我在被接管类缺陷之后建议的管理员审查和密码轮换流程,在这里并不相称。更新、确认,然后照常进行即可。如果您有具体理由相信这曾被用于攻击您的网站,而这份仅基于版本号的通知并不能为此给您任何证据,那么以通常的谨慎对待您的管理员登录是合理的,但仅凭版本本身并不要求这样做。

我做了什么、没做什么

为了完全透明地说明我邮件背后的检查过程:我只读取了您的网站已经向每位访客提供的文件,具体是您的主页以及写入其中的 Welcart 样式表地址,还有插件位于 wp-content/plugins/usc-e-shop/ 内的公开 readme.txt。我 没有 访问您的 WordPress 后台、您的数据库、您的订单,或网站的任何私有部分。

特别是,我 从未下单、从未通过您的结账提交任何内容、从未登录,也从未向受影响的功能发送任何内容。没有任何东西被提交、测试或利用。这一点在此很重要,因为在结账时提交一个精心构造的值,几乎正是这个问题所涉及的操作,所以“我没有碰它”就是一次披露与一次入侵之间的全部区别。

我还故意不发布那些会帮助他人利用此问题的细节。上面的描述仅停留在网站所有者需要的级别,并且我没有链接任何概念验证代码。

这是一项 基于版本的观察:您的网站报告的版本是 2.12.1 或更旧。这并不意味着在我检查时您的网站是可被利用的。因为这个问题既取决于是否提交了一笔精心构造的订单,也取决于是否有管理员将其打开,这些都是我看不到的,所以处于受影响范围内的网站可能根本没有暴露,并且处于该范围内的网站也可能已通过其他方式(如 Web 应用防火墙或回溯移植的修复)单独受到保护。如果您已经更新,或以其他方式修复了此问题,则无需采取任何行动,并为打扰致歉。

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

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

如果您自己维护网站并遇到困难,我很乐意免费帮助您指明正确的方向。请使用下面的联系方式联系我。

联系方式

Evan Harris,安全研究员

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

参考

官方公告与追踪

开发者 / 插件