CVE-2026-42267: Kimai/kimai Kimai Vulnerable To Formula Injection Vulnerability
MODERATECVE-2026-42267 is a MODERATE (CVSS 5.7) kimai vulnerable to formula injection vulnerability (CWE-1236: Improper Neutralization of Formula Elements in a CSV File) affecting Kimai/kimai libraries in the Packagist ecosystem. The issue involves kimai vulnerable to formula injection via tag names in xlsx export. Remediation is available by upgrading affected packages to version 2.54.0.
CVE-2026-42267 at a Glance
Security Impact
CVSS: 5.7
The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:N/I:H/A:N).
How to Fix CVE-2026-42267
To remediate this vulnerability, upgrade all affected Kimai/kimai dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
Upgrade kimai/kimai to 2.54.0
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
inspect dependencies for kimai/kimai
How to Check if You Are Affected
To determine whether your application is affected by CVE-2026-42267, inspect your project dependencies for Kimai/kimai:
inspect dependencies for kimai/kimai
Analyze the terminal output to locate any version of Kimai/kimai in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 2.54.0), your application is affected.
Note: Verify declared build manifests and deployed runtime container environments.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-1236: Improper Neutralization of Formula Elements in a CSV File, where the product saves user-provided information into a comma-separated value (csv) file, but it does not neutralize or incorrectly neutralizes special elements that could be interpreted as a command when the file is opened by a spreadsheet product. In Kimai/kimai, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2026-42267 Affected Kimai/kimai Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
kimai/kimai
|
Packagist |
≥ 2.27.0
< 2.54.0
|
2.54.0
|
References
Frequently Asked Questions
What is CVE-2026-42267?
Which Kimai/kimai versions are affected?
What version fixes CVE-2026-42267?
Is kimai/kimai affected?
What is the CVSS score of CVE-2026-42267?
What CWE is associated with CVE-2026-42267?
How can I check Packagist dependencies for CVE-2026-42267?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-3xc2-h5r3-wv3r",
"modified" : "2026-05-14T20:31:08Z",
"published" : "2026-05-05T20:53:38Z",
"aliases" : [ "CVE-2026-42267" ],
"summary" : "Kimai vulnerable to formula Injection via tag names in XLSX export",
"details" : "## Summary\n\nAny `ROLE_USER` can create a tag with a formula string as its name (e.g. `=SUM(54+51)`) via `POST /api/tags` and assign it to a timesheet. When an admin exports timesheets to XLSX, `ArrayFormatter.formatValue()` joins tag names with `implode()` and returns the result unchanged. OpenSpout promotes any `=`-prefixed string to a `FormulaCell`, writing `<f>SUM(54+51)</f>` into the XLSX archive. Excel evaluates the formula when the file is opened.\n\n## Details\n\n### 1. `ArrayFormatter` does not sanitize before returning\n\n`sanitizeDDE()` exists on `StringHelper` and is called by `TextFormatter`, but `ArrayFormatter` never calls it.\n```php\n// src/Export/Package/CellFormatter/ArrayFormatter.php:24\nreturn implode(', ', $value); // no sanitizeDDE() call\n```\n\n### 2. Tag name validation does not block formula trigger characters\n\nThe API blocks commas in tag names but permits `=`, `+`, `-`, and `@` - all valid formula prefixes in Excel and LibreOffice Calc.\n\n### 3. OpenSpout silently promotes strings to formula cells\n\n`Cell::fromValue(\"=SUM(54+51)\")` returns a `FormulaCell` with no warning.\n\n### PoC\n\n1. It logs in as normal user, creates tag `=SUM(54+51)`, assigns it to a timesheet.\n2. Admin has to export timesheets to Excel version via `/en/export/` endpoint.\n\n<img width=\"1339\" height=\"700\" alt=\"image\" src=\"https://github.com/user-attachments/assets/884c7943-5e3b-4647-8bcc-e264d6719d66\" />\n\n<img width=\"1304\" height=\"128\" alt=\"formula_injection_tags\" src=\"https://github.com/user-attachments/assets/ef28f2ad-7491-4a15-bb18-1fcd6ff5e55a\" />\n\n## Impact\n\n- Any `ROLE_USER` can plant a formula that executes on the workstation of any user who exports and opens timesheet data\n- A single malicious tag poisons all future exports across all users and date ranges until the tag is deleted\n\n## Fixes\n\n1. Prevent `=` being part of the tag name (and other fields as well)\n2. Use OpenSpout `TextCell` for everything that is a string",
"severity" : [ {
"type" : "CVSS_V3",
"score" : "CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:N/I:H/A:N"
}, {
"type" : "CVSS_V4",
"score" : "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:A/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N/E:P"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "Packagist",
"name" : "kimai/kimai"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "2.27.0"
}, {
"fixed" : "2.54.0"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 2.53.0"
}
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/kimai/kimai/security/advisories/GHSA-3xc2-h5r3-wv3r"
}, {
"type" : "ADVISORY",
"url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-42267"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/kimai/kimai"
}, {
"type" : "WEB",
"url" : "https://github.com/kimai/kimai/releases/tag/2.54.0"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-1236" ],
"severity" : "MODERATE",
"github_reviewed" : true,
"github_reviewed_at" : "2026-05-05T20:53:38Z",
"nvd_published_at" : "2026-05-08T04:16:20Z"
}
}