CVE-2026-33678Vikunja是一款开源的自托管任务管理平台。在2.2.1版本之前,其`TaskAttachment.ReadOne()`函数存在逻辑缺陷,导致访问控制失效。该函数仅通过ID查询附件,忽略了URL路径中的任务ID,使得权限检查流于形式。任何经过身份认证的攻击者均可利用此漏洞,通过提供自己有权限访问的任务ID配合目标附件ID,下载或删除系统内任意任务的附件。
该漏洞属于典型的不安全的直接对象引用(IDOR)问题。漏洞根源在于后端处理逻辑的不一致性:`CanRead()`函数验证的是用户对URL路径中`task_id`的访问权限,而随后的数据库查询`ReadOne()`却仅根据请求体或参数中的`attachment_id`获取数据,未验证该附件是否属于URL中指定的任务。由于附件ID为顺序整数,攻击者极易进行枚举。攻击者构造恶意请求,将URL中的任务ID替换为自己有权限操作的ID,而将附件ID设置为目标敏感文件的ID。服务器验证通过任务ID的权限后,直接返回了不同的附件数据,从而绕过了对附件本身所属项目的权限校验。