Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Network-reachable Web endpoint requires low-privilege authentication; integrity impact is high due to persistent financial data corruption, with no confidentiality or availability impact.
Primary rating from Vendor (https://github.com/kimai/kimai).
CVSS VectorVendor: https://github.com/kimai/kimai
Lifecycle Timeline
3DescriptionCVE.org
Summary
Kimai 2.56.0 contains an authenticated improper authorization vulnerability in the Web rate editing flows for projects, customers, and activities. A user who can edit one authorized parent object can combine that authorized parent ID with the rate ID of a different, unauthorized parent object and thereby modify the unauthorized rate record.
This affects ProjectRate, CustomerRate, and ActivityRate editing. The issue is caused by missing parent-child consistency validation and allows cross-project, cross-customer, or cross-activity tampering of billing-related configuration.
Details
The issue affects the following Web routes:
GET/POST /en/admin/project/{id}/rate/{rate}GET/POST /en/admin/customer/{id}/rate/{rate}GET/POST /en/admin/activity/{id}/rate/{rate}
In both cases, the parent object and the rate object are resolved independently from user-controlled route parameters. The controller only checks whether the current user may edit the parent object referenced by {id}, but it does not verify that the child rate object referenced by {rate} actually belongs to that same parent.
In these controllers, there is no validation such as:
$rate->getProject() === $project$rate->getCustomer() === $customer$rate->getActivity() === $activity
This missing binding check is especially notable because the API delete endpoints already enforce the expected parent-child relationship.
This shows that parent-child consistency is already a recognized invariant in the application design, but the Web edit endpoints fail to enforce it for projects, customers, and activities.
*A PoC was provided, but removed for security reasons.*
Impact
This vulnerability allows authenticated users to tamper with billing-related rate configuration outside their authorized project, customer, or activity scope. An attacker can modify rate values belonging to other teams or business domains, which can affect time-based settlement, inherited pricing, cost calculations, budget reporting, revenue reporting, and downstream invoice generation.
Because the issue directly persists changes into kimai2_projects_rates, kimai2_customers_rates, and kimai2_activities_rates, it is a real cross-scope integrity vulnerability rather than a UI-only flaw. The attack breaks team-based isolation boundaries for high-value financial configuration.
Solution
The rate edit forms for customers, projects and activities now verify that the rate belongs to the parent referenced in the URL and reject the request otherwise.
See https://www.kimai.org/en/security/ghsa-2xgg-2x8h-8xw4 for more information.
AnalysisAI
Cross-scope billing rate manipulation in Kimai 2.56.0 allows authenticated users with edit access to any single project, customer, or activity to tamper with rate configurations belonging to entirely different organizational units they are not authorized to access. The root cause is missing parent-child consistency validation in three Web admin rate-editing endpoints, where the controller validates the authenticated user's access to the parent object but never verifies that the child rate record actually belongs to that same parent. A PoC was privately submitted and subsequently removed from the advisory before public disclosure; no public exploit code is circulating and no CISA KEV active-exploitation listing exists at time of analysis.
Technical ContextAI
Kimai is an open-source time-tracking application built on the Symfony PHP framework. Billing rate configuration is stored across three database tables - kimai2_projects_rates, kimai2_customers_rates, and kimai2_activities_rates - and is managed through Web routes parameterized as {id} (parent object) and {rate} (child rate record). The vulnerability is classified as CWE-285 (Improper Authorization), manifesting as an Insecure Direct Object Reference: both route parameters are resolved independently from attacker-controlled URL segments, and no binding assertion such as $rate->getProject() === $project is performed in the edit controllers. The CPE identifier is pkg:composer/kimai/kimai. The flaw is architecturally inconsistent because the API delete endpoints for the same resources already enforce the parent-child invariant, confirming the application's design recognizes this requirement - the Web edit controllers simply omit the check.
RemediationAI
Upgrade to Kimai 2.57.0, which introduces parent-child consistency validation in the rate edit forms for customers, projects, and activities, rejecting any request where the rate record does not belong to the parent object referenced in the URL path. Release and advisory details are at https://www.kimai.org/en/security/ghsa-2xgg-2x8h-8xw4. If an immediate upgrade is not possible, restrict the rate-editing permission to the smallest feasible set of fully trusted administrative accounts, reducing the pool of authenticated users who can reach the affected endpoints; note this compensating control narrows the attack surface but does not eliminate the vulnerability, and it introduces an operational trade-off by reducing delegation of billing configuration tasks. Rate ID enumeration should also be treated as a concern given that Symfony/Doctrine typically assigns sequential integer IDs, making cross-scope targeting straightforward for any authenticated user.
Same weakness CWE-285 – Improper Authorization
View allSame technique Authentication Bypass
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-78405
GHSA-2xgg-2x8h-8xw4