CVE-2026-33678
published 2026-03-24CVE-2026-33678: Vikunja is an open-source self-hosted task management platform. Prior to version 2.2.1, `TaskAttachment.ReadOne()` queries attachments by ID only (`WHERE id =…
PriorityP348high8.1CVSS 3.1
AVNACLPRLUINSUCHIHAN
EPSS
0.27%
17.8th percentile
Vikunja is an open-source self-hosted task management platform. Prior to version 2.2.1, `TaskAttachment.ReadOne()` queries attachments by ID only (`WHERE id = ?`), ignoring the task ID from the URL path. The permission check in `CanRead()` validates access to the task specified in the URL, but `ReadOne()` loads a different attachment that may belong to a task in another project. This allows any authenticated user to download or delete any attachment in the system by providing their own accessible task ID with a target attachment ID. Attachment IDs are sequential integers, making enumeration trivial. Version 2.2.1 patches the issue.
Affected
3 ranges
| Vendor | Product | Version range | Fixed in |
|---|---|---|---|
| code.vikunja.io | api | >= 0 < 2.2.1 | 2.2.1 |
| go-vikunja | vikunja | < 2.2.1 | 2.2.1 |
| vikunja | vikunja | < 2.2.1 | 2.2.1 |
Stop checking back — get the weekly exploitation signal.
Every Monday: what got weaponized or added to CISA KEV in the last seven days — each CVE cross-linked to its PoC, Nuclei template, and detection rule. Free, one email a week, unsubscribe in one click.
OSV
Vikjuna: IDOR in Task Attachment ReadOne Allows Cross-Project File Access and Deletion in code.vikunja.io/api
osv·2026-03-26
CVE-2026-33678 Vikjuna: IDOR in Task Attachment ReadOne Allows Cross-Project File Access and Deletion in code.vikunja.io/api
Vikjuna: IDOR in Task Attachment ReadOne Allows Cross-Project File Access and Deletion in code.vikunja.io/api
Vikjuna: IDOR in Task Attachment ReadOne Allows Cross-Project File Access and Deletion in code.vikunja.io/api.
NOTE: The source advisory for this report contains additional versions that could not be automatically mapped to standard Go module versions.
(If this is causing false-positive reports from vulnerability scanners, please suggest an edit to the report.)
The additional affected modules and versions are: code.vikunja.io/api before v2.2.1.
GHSA
Vikjuna: IDOR in Task Attachment ReadOne Allows Cross-Project File Access and Deletion
ghsa·2026-03-25
CVE-2026-33678 [HIGH] CWE-639 Vikjuna: IDOR in Task Attachment ReadOne Allows Cross-Project File Access and Deletion
Vikjuna: IDOR in Task Attachment ReadOne Allows Cross-Project File Access and Deletion
## Summary
`TaskAttachment.ReadOne()` queries attachments by ID only (`WHERE id = ?`), ignoring the task ID from the URL path. The permission check in `CanRead()` validates access to the task specified in the URL, but `ReadOne()` loads a different attachment that may belong to a task in another project. This allows any authenticated user to download or delete any attachment in the system by providing their own accessible task ID with a target attachment ID. Attachment IDs are sequential integers, making enumeration trivial.
## Details
The vulnerability is in `pkg/models/task_attachment.go` in the `ReadOne` method:
```go
// pkg/models/task_attachment.go:110-120
func (ta *TaskAttachment) ReadOne(s *xo
OSV
Vikjuna: IDOR in Task Attachment ReadOne Allows Cross-Project File Access and Deletion
osv·2026-03-25
CVE-2026-33678 [HIGH] Vikjuna: IDOR in Task Attachment ReadOne Allows Cross-Project File Access and Deletion
Vikjuna: IDOR in Task Attachment ReadOne Allows Cross-Project File Access and Deletion
## Summary
`TaskAttachment.ReadOne()` queries attachments by ID only (`WHERE id = ?`), ignoring the task ID from the URL path. The permission check in `CanRead()` validates access to the task specified in the URL, but `ReadOne()` loads a different attachment that may belong to a task in another project. This allows any authenticated user to download or delete any attachment in the system by providing their own accessible task ID with a target attachment ID. Attachment IDs are sequential integers, making enumeration trivial.
## Details
The vulnerability is in `pkg/models/task_attachment.go` in the `ReadOne` method:
```go
// pkg/models/task_attachment.go:110-120
func (ta *TaskAttachment) ReadOne(s *xo
No detection rules found.
No public exploits indexed.
2026-03-24
Published