CVE-2026-33679Vikunja是一个开源的自托管任务管理平台。在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保护,但头像下载功能却绕过了这一层防御,使得攻击者可以利用服务器作为代理,探测内网端口或窃取云服务凭证。