Skip to main content

Kimai CVE-2026-52826

| EUVDEUVD-2026-78405 MEDIUM
Improper Authorization (CWE-285)
2026-07-14 https://github.com/kimai/kimai GHSA-2xgg-2x8h-8xw4
5.3
CVSS 4.0 · Vendor: https://github.com/kimai/kimai
Share

Severity by source

Vendor (https://github.com/kimai/kimai) PRIMARY
5.3 MEDIUM
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
vuln.today AI
6.5 MEDIUM

Network-reachable Web endpoint requires low-privilege authentication; integrity impact is high due to persistent financial data corruption, with no confidentiality or availability impact.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (https://github.com/kimai/kimai).

CVSS VectorVendor: https://github.com/kimai/kimai

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
X

Lifecycle Timeline

3
CVSS changed
Sep 15, 2026 - 11:22 NVD
5.3 (MEDIUM)
Source Code Evidence Fetched
Jul 14, 2026 - 00:32 vuln.today
Analysis Generated
Jul 14, 2026 - 00:32 vuln.today

DescriptionCVE.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.

Share

CVE-2026-52826 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy