Executive brief
Vikunja, an open-source to-do list application, is vulnerable to a denial-of-service attack. An authenticated user can create a specific type of repeating task that forces the server to perform billions of unnecessary calculations. This can crash the service or make it unresponsive for all users by exhausting server processing power and database connections.
Technical details
The vulnerability exists in the `addRepeatIntervalToTime` function within `pkg/models/tasks.go`. The function uses an O(n) loop to calculate the next occurrence of a repeating task by incrementing the time by the `RepeatAfter` duration until it exceeds the current time. An attacker can provide a `RepeatAfter` value of 1 second and a `DueDate` from many decades ago, forcing the loop to run billions of times. This consumes significant CPU time and holds a database connection open for the duration of the request. Approximately 100 concurrent requests can exhaust the default database connection pool, leading to a complete denial of service. The issue is fixed in version 2.3.0 by replacing the loop with O(1) arithmetic.
Affected products
- go-vikunja Vikunja <= 2.2.2
Timeline
- 2026-04-09: disclosed
- 2026-04-10: advisory
- 2026-04-10: patched