CVE-2026-34587
Published: 24 April 2026
Summary
CVE-2026-34587 is a high-severity Improper Neutralization of Special Elements Used in a Template Engine (CWE-1336) vulnerability in Getkirby Kirby. Its CVSS base score is 8.1 (High).
Operationally, exploitation aligns with the MITRE ATT&CK technique Exploit Public-Facing Application (T1190); ranked at the 8.4th percentile by exploit likelihood (below the median); it is not currently listed in the CISA KEV catalog.
The strongest mitigations our analysis identified are NIST 800-53 AC-3 (Access Enforcement) and AC-6 (Least Privilege).
Threat & Defense at a Glance
Threat & Defense Details
Mitigating Controls (NIST 800-53 r5)AI
Enforces approved authorizations for page creation actions via REST API, preventing bypass of changeStatus permission and unauthorized publication of pages.
Applies least privilege to restrict users with pages.create permission from overriding isDraft flag without explicit changeStatus authorization.
Enforces separation of duties between page creation and status change to maintain the intended draft-to-publish editorial workflow.
MITRE ATT&CK Enterprise TechniquesAI
Why these techniques?
Authorization bypass in public-facing CMS REST API directly enables exploitation of the web application.
NVD Description
Kirby is an open-source content management system. Prior to versions 4.9.0 and 5.4.0, Kirby's user permissions control which user role is allowed to perform specific actions to content models in the CMS. These permissions are defined for each role in…
more
the user blueprint (`site/blueprints/users/...`). It is also possible to customize the permissions for each target model in the model blueprints (such as in `site/blueprints/pages/...`) using the `options` feature. The permissions and options together control the authorization of user actions. For pages, Kirby provides the `pages.create` and `pages.changeStatus` permissions (among others). In affected releases, Kirby checked these permissions independently and only for the respective action. However the `changeStatus` permission didn't take effect on page creation. New pages are created as drafts by default and need to be published by changing the page status of an existing page draft. This is ensured when the page is created via the Kirby Panel. However the REST API allows to override the `isDraft` flag when creating a new page. This allowed authenticated attackers with the `pages.create` permission to immediately create published pages, bypassing the normal editorial workflow. The problem has been patched in Kirby 4.9.0 and Kirby 5.4.0. Kirby has updated the `Options` logic to no longer double-resolve queries in option values coming from `OptionsQuery` or `OptionsApi` sources. Kirby now only resolves queries that are directly configured in the blueprints.
Deeper analysisAI
CVE-2026-34587 is a high-severity authorization vulnerability (CVSS 3.1 score of 8.1; AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N) affecting Kirby, an open-source content management system. In versions prior to 4.9.0 and 5.4.0, Kirby's user permissions for actions like `pages.create` and `pages.changeStatus` are defined in user and model blueprints and checked independently. However, the `pages.changeStatus` permission does not apply during page creation via the REST API, which allows overriding the default `isDraft` flag.
Authenticated attackers with the `pages.create` permission can exploit this by creating new pages directly as published via the REST API, bypassing the standard editorial workflow that requires drafts to be published separately through the Kirby Panel. This enables unauthorized publication of content, potentially leading to high confidentiality and integrity impacts, such as exposing or altering sensitive pages without proper review. The issue is linked to CWE-1336 (incorrect authorization).
Mitigation is available in Kirby 4.9.0 and 5.4.0, where the permissions logic has been updated to enforce `changeStatus` checks during API-based page creation. The Kirby security advisory (GHSA-jcjw-58rv-c452) and release notes for versions 4.9.0 and 5.4.0 detail the patch, which also refines the `Options` logic to prevent double-resolving queries from `OptionsQuery` or `OptionsApi` sources, ensuring only directly configured blueprint queries are resolved. Administrators should upgrade immediately and review user roles with `pages.create` permissions.
Details
- CWE(s)