Skip to main content

Kimai CVE-2026-52821

| EUVDEUVD-2026-78400 MEDIUM
Authorization Bypass Through User-Controlled Key (CWE-639)
2026-07-14 https://github.com/kimai/kimai GHSA-3q6q-26vg-v97x
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
4.3 MEDIUM

Network-reachable web route (AV:N), trivial project ID enumeration (AC:L), requires authenticated low-privilege session (PR:L), integrity-only impact limited to data injection (I:L), no confidentiality or availability impact.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/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:31 vuln.today
Analysis Generated
Jul 14, 2026 - 00:31 vuln.today

DescriptionCVE.org

Summary

Kimai 2.56.0 contains an authenticated improper authorization vulnerability in the preset-project activity creation flow. A user with the generic create_activity permission, but without access to a target project, can still create a new Activity under that unauthorized project by visiting the preset project creation route directly.

This is a persistent cross-project business-object creation issue. The attacker does not need permission to view or edit the target project and only needs to know a valid project.id.

Details

The issue affects the activity creation entry point that accepts a preset project identifier:

  • GET/POST /en/admin/activity/create/{project}
  • GET/POST /en/admin/project/create/{customer}

In src/Controller/ActivityController.php, the controller checks only the global capability to create activities and does not verify whether the current user is allowed to create an activity under the supplied Project object.

The form and repository path also preserve the preset project instead of rejecting it when the user lacks access. Because the preset project is merged into the candidate set, the final save operation can persist a new Activity under a project that is outside the attacker's authorized project scope.

The same logic applies to the src/Controller/ProjectController.php.

*A PoC was provided, but removed for security reasons.*

Impact

This vulnerability allows an authenticated user to inject new child business objects into projects outside their authorized scope. An attacker can pollute another team's project configuration, influence later timesheet selection and rate inheritance, and create conditions for downstream business abuse if other users start using the injected activity.

Solution

  • In ActivityController we now validate if the project can be edited with [IsGranted('edit', 'project')]
  • In ProjectController we now validate if if the customer can be edited with [IsGranted('edit', 'customer')]

See https://www.kimai.org/en/security/ghsa-3q6q-26vg-v97x

AnalysisAI

Improper object-level authorization in Kimai 2.56.0 allows any authenticated user holding the generic create_activity permission to inject Activity records into projects outside their authorized scope by directly invoking the preset-project creation routes with an arbitrary project ID. The controllers in ActivityController.php and ProjectController.php validate only the global capability (can the user create activities at all?) without performing a secondary check that the user also has edit rights on the specific target project. No public exploit exists at time of analysis, though a PoC was privately shared with the vendor and subsequently removed; the vendor has released a fix in version 2.57.0.

Technical ContextAI

Kimai is an open-source PHP time-tracking web application distributed via Composer (composer/kimai/kimai). The vulnerability is rooted in CWE-639 (Authorization Bypass Through User-Controlled Key): the {project} and {customer} path parameters in routes /en/admin/activity/create/{project} and /en/admin/project/create/{customer} are user-supplied identifiers that the application resolves to ORM entities without verifying the requesting user's object-level access. The Symfony-based authorization layer uses attribute-based IsGranted checks, but the original code omitted the per-object [IsGranted('edit', 'project')] guard, leaving only the global create_activity capability check. Because the resolved project entity is merged into the candidate set before the final save, the persistence layer writes the new Activity to the unauthorized project without further gating. The same structural flaw existed in the ProjectController path, allowing unauthorized customer-scoped project creation.

RemediationAI

Upgrade Kimai to version 2.57.0 or later, which introduces [IsGranted('edit', 'project')] in ActivityController and [IsGranted('edit', 'customer')] in ProjectController to enforce object-level authorization checks on the preset path parameters. Full advisory details are at https://www.kimai.org/en/security/ghsa-3q6q-26vg-v97x. If an immediate upgrade is not possible, restrict access to the affected routes (/en/admin/activity/create/* and /en/admin/project/create/*) at the web server or reverse-proxy level to only users who have verified admin roles, accepting the trade-off of blocking legitimate low-privilege activity creation. Alternatively, revoke the create_activity permission from any user who should not have cross-project write access until the patch is applied; this limits legitimate functionality but eliminates the attack surface.

More in PHP

View all
CVE-2019-11043 CRITICAL POC
9.8 Oct 28

In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it

CVE-2012-1823 CRITICAL POC
9.8 May 11

sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not

CVE-2016-1555 CRITICAL POC
9.8 Apr 21

(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear

CVE-2018-11138 CRITICAL POC
9.8 May 31

The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by

CVE-2024-11680 CRITICAL POC
9.8 Nov 26

ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C

CVE-2025-49113 CRITICAL POC
9.9 Jun 02

Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au

CVE-2017-9841 CRITICAL POC
9.8 Jun 27

Util/PHP/eval-stdin.php in PHPUnit before 4.8.28 and 5.x before 5.6.3 allows remote attackers to execute arbitrary PHP c

CVE-2025-0108 HIGH POC
8.8 Feb 12

Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers

CVE-2021-25298 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2021-25296 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2013-4983 CRITICAL POC
10.0 Sep 10

The get_referers function in /opt/ws/bin/sblistpack in Sophos Web Appliance before 3.7.9.1 and 3.8 before 3.8.1.1 allows

CVE-2023-6553 CRITICAL POC
9.8 Dec 15

The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1

Share

CVE-2026-52821 vulnerability details – vuln.today

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