CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-41325
7.10.03%

CVE-2026-41325: Authorization Bypass via Blueprint Injection in Kirby CMS

Amit Schendel
Amit Schendel
Senior Security Researcher

Apr 25, 2026·5 min read·6 visits

PoC Available

Executive Summary (TL;DR)

Authenticated users can bypass creation privileges in Kirby CMS by injecting a custom blueprint configuration into API requests.

Kirby CMS versions prior to 4.9.0 and 5.4.0 suffer from an incorrect authorization vulnerability (CWE-863) allowing authenticated users to bypass resource creation restrictions. By injecting a malicious blueprint payload during model creation, attackers can override access controls and provision unauthorized pages, files, or users.

Vulnerability Overview

Kirby CMS utilizes blueprints to define content structures and enforce user permissions. The application relies on these YAML and PHP configuration files to dictate which roles can perform specific actions, including resource creation. This mechanism forms the core of the CMS's authorization boundary for administrative and editorial tasks.

An incorrect authorization vulnerability exists in the model instantiation logic for pages, files, and users. The application fails to properly sanitize user-supplied properties during the creation flow. This omission permits authenticated actors to supply their own blueprint definitions at runtime via the API.

By defining a custom blueprint within the creation request, the final authorization check evaluates the attacker-supplied configuration rather than the server-defined rules. This architectural flaw nullifies the intended access controls and allows low-privileged users to provision restricted resources.

Root Cause Analysis

The root cause is insecure data normalization within the create methods of the Page, File, and User models. When the application receives a request to instantiate a new model, it passes the input payload through the normalizeProps function. This function is responsible for preparing the data array before applying it to the new object instance.

In vulnerable versions, normalizeProps accepts the blueprint key from the user-provided JSON payload without stripping it. The application subsequently uses this attacker-controlled key to populate the object's internal blueprint configuration. This configuration strictly dictates the effective permissions, termed "options," for the newly created resource.

The system performs a final authorization check using the model's derived options. Because the injected blueprint data overrides the default template settings, the system evaluates the attacker's options.create boolean instead of the developer's intended policy. The system inherently trusts the manipulated model state, resulting in a successful security bypass.

Code Analysis

The vulnerability resides in the property normalization pipeline prior to model instantiation. The flawed implementation directly maps input keys to model properties without explicitly stripping administrative or internal configuration keys. This allows an external caller to inject values into the $props array that modify the core logic of the resulting object.

The patch introduced to mitigate this vector strictly filters the blueprint key. The modification occurs within the normalizeProps method across src/Cms/FileActions.php, src/Cms/PageActions.php, and src/Cms/UserActions.php.

protected static function normalizeProps(array $props): array
{
    // Prevent injecting blueprint as this always must be derived from
    // the template/model name and blueprint object in the app,
    // never directly be supplied by the caller
    unset($props['blueprint']);
    // ... rest of method
}

By explicitly unsetting the blueprint array key, the application enforces that the blueprint is exclusively derived from the server-side template name and internal blueprint object. This structural change ensures the caller cannot influence the authorization options of the resulting model.

Exploitation

Exploitation requires the attacker to possess authenticated access to the Kirby Panel or API. The specific privilege level is irrelevant as long as the user possesses valid session credentials. The attacker interacts directly with the resource creation API endpoints, such as /api/pages, to trigger the vulnerability.

The attacker constructs a POST request containing a malicious JSON payload. The payload includes standard resource attributes alongside a nested blueprint object. This nested object explicitly sets the create permission to true, overriding any restrictions bound to the targeted template.

{
  "slug": "unauthorized-page",
  "template": "default",
  "blueprint": {
    "options": {
      "create": true
    }
  }
}

The application processes the request, merges the malicious blueprint into the model, and evaluates the create option. The check resolves to true, and the system provisions the requested resource. The attacker successfully bypasses the server-side restrictions and generates content or user accounts they are otherwise prohibited from creating.

Impact Assessment

The primary impact is a severe integrity violation within the CMS environment. Attackers can provision unauthorized pages, modify content structures, and potentially escalate privileges by creating administrative user accounts. The vulnerability completely undermines the role-based access control mechanisms defined by the site developers.

The CVSS 4.0 vector (CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N) yields a base score of 7.1. This reflects the low attack complexity and the complete loss of integrity for the affected resources. The confidentiality and availability metrics remain unaffected in the primary exploitation scenario.

Secondary vulnerabilities addressed alongside this issue amplify the overall risk. The presence of CDATA smuggling and double resolution of queries indicates that authenticated attackers could chain these issues to extract sensitive information. These chained vectors permit the exposure of administrator password hashes and facilitate deeper data enumeration.

Remediation

The vendor addressed the vulnerability in Kirby CMS releases 4.9.0 and 5.4.0. Organizations operating vulnerable versions must upgrade immediately to restore the integrity of the authorization model. The patches enforce strict property filtering and prevent user-controlled data from influencing internal model states.

Alongside the primary fix, the updates introduce multiple defense-in-depth measures. The PageRules::create method now evaluates changeStatus permissions if a page originates in a non-draft state. Additionally, Options and Option classes default to disabling query resolution, mitigating the related information disclosure flaws.

Standardized API visibility controls are now enforced using .filter('isListable', true). This prevents unauthorized resource enumeration through sibling, child, and parent endpoints. Developers should review their custom blueprint configurations to ensure proper permission definitions remain active post-upgrade.

Official Patches

getkirbyKirby 4.9.0 Release Notes
getkirbyKirby 5.4.0 Release Notes

Technical Appendix

CVSS Score
7.1/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N
EPSS Probability
0.03%
Top 91% most exploited

Affected Systems

Kirby CMS CoreKirby CMS PanelKirby CMS API

Affected Versions Detail

Product
Affected Versions
Fixed Version
getkirby/kirby
getkirby
< 4.9.04.9.0
getkirby/kirby
getkirby
>= 5.0.0, < 5.4.05.4.0
AttributeDetail
CWE IDCWE-863
Attack VectorNetwork
CVSS 4.0 Score7.1
EPSS Score0.03%
ImpactHigh Integrity Loss
Exploit StatusProof of Concept Available
AuthenticationRequired (Low Privilege)

MITRE ATT&CK Mapping

T1068Exploitation for Privilege Escalation
Privilege Escalation
CWE-863
Incorrect Authorization

The software performs an authorization check when an actor attempts to access a resource or perform an action, but it does not correctly perform the check.

Vulnerability Timeline

Fix for XML CDATA validation committed.
2026-03-16
Broad security hardening commits for access control and API permissions.
2026-03-30
Primary 'Blueprint Injection' fix committed.
2026-04-15
Official disclosure and publication of CVE-2026-41325 and GHSA-6gqr-mx34-wh8r.
2026-04-24

References & Sources

  • [1]GitHub Security Advisory GHSA-6gqr-mx34-wh8r
  • [2]CVE Record CVE-2026-41325
  • [3]NVD Entry CVE-2026-41325
  • [4]MITRE ATT&CK T1068

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.