CVE-2025-68147Open Source Point of Sale(opensourcepos)是一款基于PHP和CodeIgniter框架开发的Web应用程序,用于零售点销售管理。该应用在3.4.0至3.4.2版本中存在严重的存储型跨站脚本(Stored XSS)漏洞,漏洞位于"退货政策"(Return Policy)配置字段。攻击者通过利用该漏洞,可在退货政策字段中注入恶意JavaScript代码,这些代码会被永久存储在数据库中。当其他用户(如管理员、销售人员)在查看收据或完成交易时,恶意脚本会在其浏览器中自动执行。此漏洞可导致会话劫持、敏感数据泄露、凭据窃取等严重安全问题。由于该漏洞需要高权限用户(如管理员)操作,因此攻击者可能首先利用其他独立存在的CSRF漏洞获取管理员权限,进而实施XSS攻击。漏洞已于3.4.2版本中通过在收据模板中使用esc()函数进行输出转义得到修复。
该漏洞的根本原因在于Open Source Point of Sale应用在处理"退货政策"配置字段时未进行充分的输入验证和输出转义。应用程序直接将用户输入的退货政策内容保存到数据库,随后在收据模板中渲染显示时未调用适当的转义函数。具体技术细节如下:1)输入层面:Store Configuration模块中的退货政策字段接受用户输入,但后端控制器仅进行基础验证,未过滤或转义HTML/JavaScript特殊字符;2)存储层面:恶意Payload被直接存入数据库的configuration表中,以明文形式持久化存储;3)输出层面:收据视图模板在渲染退货政策内容时,直接输出未经转义的数据,导致嵌入的JavaScript代码被浏览器解析执行。攻击者可通过构造如<script>alert(document.cookie)</script>等Payload,在管理员或销售人员查看收据时触发恶意脚本。由于收据功能在日常交易流程中被频繁调用,攻击面广泛且影响持久。修复方案为在所有输出点使用CodeIgniter框架提供的esc()函数进行HTML实体转义。