IPBUF安全漏洞报告
English
CVE-2026-33679 CVSS 6.4 中危

CVE-2026-33679 Vikunja SSRF漏洞

披露日期: 2026-03-24

漏洞信息

漏洞编号
CVE-2026-33679
漏洞类型
服务端请求伪造 (SSRF)
CVSS评分
6.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Vikunja

相关标签

SSRFVikunjaOIDC服务端请求伪造中危

漏洞概述

Vikunja是一个开源的自托管任务管理平台。在2.2.1版本之前,该平台存在服务端请求伪造(SSRF)漏洞。具体而言,`pkg/utils/avatar.go`中的`DownloadImage`函数在从OpenID Connect的`picture`声明URL下载用户头像时,使用了未配置SSRF保护的裸`http.Client{}`。攻击者若能控制其OIDC个人资料图片URL,便可诱导Vikunja服务器向任意内部或云元数据端点发起HTTP GET请求,从而绕过正确应用于webhook系统的SSRF防护机制。

技术细节

该漏洞的根源在于Vikunja处理OIDC(OpenID Connect)头像下载逻辑时的安全疏忽。在`pkg/utils/avatar.go`文件的`DownloadImage`函数中,开发者直接使用了Go语言默认的`http.Client{}`来请求用户在OIDC信息中提供的`picture`字段URL。此客户端未实施任何SSRF防御措施,例如未对目标IP进行私有地址范围校验、未对DNS重绑定进行防护,也未限制HTTP跳转。

攻击者只需注册一个支持自定义头像URL的OIDC身份提供商,将头像URL设置为内部网络地址(如`http://127.0.0.1:8080`或云元数据服务`http://169.254.169.254/latest/meta-data/`)。当Vikunja服务器处理用户登录或信息更新时,会自动向该恶意URL发送HTTP GET请求。尽管Vikunja的webhook系统已经应用了正确的SSRF保护,但头像下载功能却绕过了这一层防御,使得攻击者可以利用服务器作为代理,探测内网端口或窃取云服务凭证。

攻击链分析

STEP 1
侦察
攻击者发现目标使用Vikunja平台,并启用了OpenID Connect (OIDC) 登录功能。
STEP 2
武器化
攻击者注册或配置一个OIDC身份提供商账户,并在其个人资料中将头像图片URL设置为内部敏感地址(如云元数据服务地址)。
STEP 3
投递
攻击者使用配置好的恶意OIDC账户登录Vikunja平台。
STEP 4
利用
Vikunja服务器在处理登录流程时,调用`DownloadImage`函数从攻击者提供的URL下载头像,由于缺少SSRF检查,服务器向内部地址发起请求。
STEP 5
影响
攻击者成功获取内部服务响应(如云凭证、内网页面源码),可能导致后续的内网横向移动或数据泄露。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# Proof of Concept for CVE-2026-33679 # This script demonstrates how the vulnerable DownloadImage function behaves. # An attacker sets their OIDC 'picture' claim to an internal URL. import requests # Target internal endpoint (e.g., AWS Cloud Metadata) internal_target = "http://169.254.169.254/latest/meta-data/iam/security-credentials/" # Concept of the vulnerable code in Vikunja (pkg/utils/avatar.go) def vulnerable_download_image(url): # Using a bare http.Client (represented here by requests.Session) # No SSRF checks (e.g., no IP blocklist for 127.0.0.1 or 169.254.169.254) client = requests.Session() try: response = client.get(url, timeout=5) print(f"Status: {response.status_code}") print(f"Response Length: {len(response.content)}") return response.text[:100] # Truncated output except Exception as e: return f"Error: {str(e)}" # Exploit Scenario: # 1. Attacker authenticates to Vikunja via OIDC. # 2. Attacker's OIDC profile 'picture' is set to 'internal_target'. # 3. Vikunja server calls vulnerable_download_image(internal_target). print(f"Simulating request to internal endpoint: {internal_target}") print(vulnerable_download_image(internal_target))

影响范围

Vikunja < 2.2.1

防御指南

临时缓解措施
建议立即升级Vikunja到v2.2.1或更高版本以修复此漏洞。如果暂时无法升级,应考虑在网络防火墙层面阻断服务器对RFC1918私有地址及链路本地地址(如169.254.169.254)的出站访问,或者暂时禁用OIDC登录集成功能。

参考链接

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