Description
Kimai before 2.56.0 does not enforce team-membership checks in TimesheetVoter::voteOnAttribute(), which maps permissions only to own_timesheet or other_timesheet. As a result, any authenticated user with ROLE_TEAMLEAD (or a role holding edit_other_timesheet/delete_other_timesheet) can read, modify, and permanently delete timesheets belonging to any user system-wide via the API, regardless of team membership. Timesheet IDs are sequential integers and trivially enumerable. ROLE_USER accounts are correctly restricted. (Note: the maintainers characterize this behavior as matching the documented permission model.)
Affected products
| Vendor | Product | Affected | Fixed |
|---|---|---|---|
| kimai | kimai | < 2.56.0 | 2.56.0 |
Affected packages
| Ecosystem | Package | Affected | Fixed | Record |
|---|---|---|---|---|
| Packagist | kimai/kimai | < 2.56.0 | 2.56.0 | GHSA-9g2q-w3w2-vf7q |
References
- GitHub Security Advisory (GHSA-9g2q-w3w2-vf7q) vendor-advisory
- VulnCheck Advisory: Kimai before 2.56.0 Authorization Bypass via TimesheetVoter third-party-advisory