| 元数据 | 详细信息 |
|---|---|
| CVE ID | CVE-2025-68147 |
| 严重性 | 高危 CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:H/I:H/A:N |
| 漏洞类型 | 存储型跨站脚本(CWE-79) |
| 受影响版本 | OpenSourcePOS v3.4.0, v3.4.1 |
| 修复版本 | v3.4.2 |
| 受影响组件 | 店铺配置模块(退货政策字段) |
| 报告者 | Aditya Singh (Nixon-H) |
在 OpenSourcePOS 的店铺配置模块中发现了一个**存储型跨站脚本(XSS)**漏洞。该应用程序未能正确过滤用户在"退货政策"字段中提供的输入,便将其存储到 ospos_app_config 数据库表中。
此缺陷允许具有配置权限的认证攻击者(或利用独立 CSRF 链的攻击者)注入任意 JavaScript 载荷。由于"退货政策"会动态渲染到每张销售收据上,因此每当生成或查看收据时,注入的载荷会在任何用户(包括低权限收银员、其他管理员或顾客)的浏览器中自动执行。
漏洞位于收据视图模板中:app/Views/sales/receipt_default.php。
应用程序从全局配置数组($this->config['return_policy'])中获取"退货政策"字符串,并准备显示。
nl2br() 将换行符转换为 HTML 换行标签(<br>)。nl2br() 不会过滤 HTML 特殊字符。它会使 <script>、`` 和 onload 等标签完全保留。漏洞代码(修复前):
<div id="sale_return_policy">
<?php echo nl2br($this->config['return_policy']); ?>
</div>
当管理员保存配置时,载荷会原样存储到数据库中。
ospos_app_configreturn_policyPolicy Text... <script>alert('XSS')</script>由于控制器端(Config.php)没有进行输入过滤,视图端(receipt_default.php)也没有进行输出转义,因此该应用程序存在存储型 XSS 漏洞。
该攻击针对店铺配置面板,但影响的是销售/收据模块。
http://[TARGET]/config(用于保存配置的 POST 请求)http://[TARGET]/sales/receipt/[SALE_ID]步骤 1:注入 我们以管理员身份登录,导航至店铺配置 -> 常规。在"退货政策"文本区域中,我们注入了以下具体载荷:
Standard Return Policy: No Refunds.
<script>alert('XSS_BY_NIXON_SUCCESSFUL')</script>
步骤 2:持久化
点击"提交"后,应用程序向 /config/save 发送了一个 POST 请求。载荷成功写入数据库。
步骤 3:触发 为了验证对其他用户的影响:
http://localhost/sales/receipt/1)。浏览器解析包含 return_policy 的 div,遇到 <script> 标签,并立即执行 JavaScript。观察结果:
浏览器弹出一个提示框,显示消息:XSS_BY_NIXON_SUCCESSFUL。
截图 1:警报触发
截图 2:配置中的载荷
🎥 视频演示: 点击下载/观看 PoC 视频
这是一个**范围已变更(S:C)**漏洞,因为攻击被存储在服务器上,但在受害者的浏览器上下文中执行。
/sales/receipt/105)。脚本静默执行,将 document.cookie(包含 ospos_session ID)发送到攻击者的服务器。/employees/save 发送隐藏的 POST 请求。hacker / password123)。受害者只看到收据,而攻击者获得了一个永久的后门。该漏洞已在 OpenSourcePOS v3.4.2 中修复。
维护者应用了一个补丁,实现了上下文感知的输出编码。配置值现在在传递给 nl2br() 之前,先经过 CodeIgniter 的全局 esc() 辅助函数进行包装。
补丁(提交 22297a):
<div id="sale_return_policy">
<?php echo nl2br(esc($this->config['return_policy'])); ?>
</div>
验证: 升级到 v3.4.2 后,相同的载荷会被渲染为无害的文本:
Standard Return Policy: No Refunds. <script>alert('XSS_BY_NIXON_SUCCESSFUL')</script>
22297a),并由研究人员验证。