IPBUF安全漏洞报告
English
CVE-2026-34210 CVSS 8.1 高危

CVE-2026-34210 mppx支付重放漏洞

披露日期: 2026-03-31

漏洞信息

漏洞编号
CVE-2026-34210
漏洞类型
重放攻击
CVSS评分
8.1 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
mppx

相关标签

重放攻击支付漏洞mppxStripe逻辑缺陷CWE-294

漏洞概述

mppx是一个用于机器支付协议的TypeScript接口。在0.4.11版本之前,其stripe/charge支付方法在创建PaymentIntents时未正确检查Stripe的Idempotent-Replayed响应头。攻击者可以利用这一漏洞,将包含相同spt token的有效支付凭证重放到新的挑战中。由于服务器未能识别这是重放请求,它会错误地接受该凭证作为新的成功支付,而无需实际再次扣费。这导致攻击者只需支付一次即可通过重放凭证无限消耗服务器资源。该问题已在0.4.11版本中修复。

技术细节

该漏洞的核心原理在于mppx库在处理Stripe支付请求时,忽略了Stripe API的幂等性保护机制。Stripe使用幂等性密钥来防止重复操作,当服务器收到具有相同密钥的请求时,会返回带有`Idempotent-Replayed: true`头的响应,指示这是一个重放请求。然而,受影响版本的mppx在进行`stripe/charge`验证时,仅检查了支付状态是否成功,未对该响应头进行校验。攻击者只需捕获一次合法的支付交互凭证(包含spt token),即可在后续的交易流程中重放该凭证。服务端收到重放凭证后向Stripe验证,Stripe返回成功但标记为重放(不扣款),但mppx验证逻辑缺陷导致其仍视为有效支付。这种逻辑错误破坏了交易的完整性,允许未授权的资源占用。

攻击链分析

STEP 1
步骤1:凭证获取
攻击者进行一次合法的支付操作,并截获或记录下服务器返回的有效支付凭证(包含spt token)。
STEP 2
步骤2:发起请求
攻击者向目标服务器发起新的资源请求或服务访问,服务器返回一个新的支付挑战。
STEP 3
步骤3:重放攻击
攻击者不创建新的支付,而是直接将步骤1中获取的旧凭证数据发送给服务器,以响应新的挑战。
STEP 4
步骤4:验证绕过
存在漏洞的mppx服务器(<0.4.11)向Stripe验证凭证。Stripe返回成功但标记为Idempotent-Replayed,但服务器未检查此标记。
STEP 5
步骤5:资源消耗
服务器误认为支付成功,授权攻击者访问资源。攻击者未支付新费用即可无限重复此过程。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# Conceptual Proof of Concept for CVE-2026-34210 # This script demonstrates the replay logic of a valid spt token. import requests # The attacker captures a valid spt token from a previous successful payment # In a real attack, this is obtained by intercepting the client's traffic. replay_spt_token = "spt_valid_token_abc123" # The target endpoint that requires payment verification target_api = "https://victim-api.com/mppx/verify" # New challenge ID for a resource the attacker wants to access new_challenge = "resource_challenge_xyz" # Construct the payload using the OLD token for the NEW challenge # Vulnerable versions of mppx (< 0.4.11) will not check Stripe's Idempotent-Replayed header payload = { "challenge": new_challenge, "method": "stripe", "credential": replay_spt_token } print("[*] Attempting to replay payment credential...") response = requests.post(target_api, json=payload) if response.status_code == 200: print("[+] Success! Server accepted the replayed credential.") print("[+] Resource granted without charging the account again.") else: print("[-] Replay failed.")

影响范围

mppx < 0.4.11

防御指南

临时缓解措施
建议立即将mppx组件升级到0.4.11版本以彻底修复此漏洞。如果暂时无法升级,应在业务应用层面对支付凭证进行额外的去重验证,确保不仅检查支付状态,还要确认该支付请求未被Stripe标记为重放,从而防止恶意用户利用旧凭证骗取服务。

参考链接

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