Skip to main content

Kirby CMS EUVDEUVD-2026-25370

| CVE-2026-40099 MEDIUM
Incorrect Authorization (CWE-863)
2026-04-23 https://github.com/getkirby/kirby GHSA-w942-j9r6-hr6r
5.3
CVSS 4.0 · GitHub Advisory
Share

Severity by source

GitHub Advisory 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

Low-privilege authenticated access required via REST API; impact is solely limited integrity (unauthorized content publishing) with no confidentiality or availability effect and no scope change.

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 GitHub Advisory.

CVSS VectorGitHub Advisory

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

Lifecycle Timeline

6
Source Code Evidence Fetched
Jul 24, 2026 - 03:37 vuln.today
Analysis Generated
Jul 24, 2026 - 03:37 vuln.today
Patch released
Apr 24, 2026 - 02:30 nvd
Patch available
CVSS changed
Apr 24, 2026 - 01:22 NVD
5.3 (MEDIUM)
EUVD ID Assigned
Apr 23, 2026 - 21:45 euvd
EUVD-2026-25370
CVE Published
Apr 23, 2026 - 21:24 nvd
MEDIUM 5.3

DescriptionGitHub Advisory

TL;DR

This vulnerability affects all Kirby sites where users have the permission to create pages (pages.create permission is enabled) but not the permission to change the status of pages (pages.changeStatus permission is disabled). This can be due to configuration in the user blueprint(s), via options in the page blueprint(s) or via a combination of both settings.

Users' Kirby sites are *not* affected if their use case does not consider the creation of published pages a malicious action. The vulnerability can only be exploited by authenticated users.

----

Introduction

An authorization bypass allows authenticated users to perform actions they should not be allowed to perform based on their configured permissions, thereby causing a privilege escalation.

The effects of an authorization bypass can include unauthorized access to sensitive information as well as unauthorized changes to content or system information.

Impact

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

Patches

The problem has been patched in Kirby 4.9.0 and Kirby 5.4.0. Please update to one of these or a later version to fix the vulnerability.

In all of the mentioned releases, Kirby has added a check to the page creation rules that ensures that users without the pages.changeStatus permission cannot create published pages, only page drafts.

Credits

Kirby thanks @offset for responsibly reporting the identified issue.

AnalysisAI

Kirby CMS's REST API allows authenticated users with the pages.create permission to immediately publish pages by overriding the isDraft flag, bypassing the separate pages.changeStatus authorization check. This affects all 4.x releases before 4.9.0 and 5.x releases from 5.0.0 through 5.3.x, and is exploitable only by authenticated users in deployments where the two permissions are intentionally split. No public exploit code has been identified and EPSS sits at 0.03% (9th percentile), consistent with the SSVC assessment of no known active exploitation; the vulnerability is nevertheless a real workflow integrity bypass for editorial CMS environments.

Technical ContextAI

Kirby is a flat-file CMS distributed as the Composer package getkirby/cms. Its authorization model uses role-based user blueprints (site/blueprints/users/...) and per-model page blueprints (site/blueprints/pages/...) to define granular permissions including pages.create and pages.changeStatus. The root cause is CWE-863 (Incorrect Authorization): the page creation handler in Kirby's REST API evaluated the two permission gates independently rather than compositely. Because the Panel enforces the draft-first workflow at the UI layer, the isDraft parameter bypass was only reachable via direct API calls. Affected packages are pkg:composer/getkirby_cms versions < 4.9.0 and versions >= 5.0.0 < 5.4.0, as confirmed by EUVD-2026-25370 and the GitHub security advisory GHSA-w942-j9r6-hr6r.

RemediationAI

Upgrade to Kirby 4.9.0 (a dedicated security backport for the 4.x branch) or Kirby 5.4.0 (or any later release); both versions add a composite check to the page creation logic that prevents users without pages.changeStatus from creating published pages directly. Downloads and release notes are available at https://github.com/getkirby/kirby/releases/tag/4.9.0 and https://github.com/getkirby/kirby/releases/tag/5.4.0. The vendor explicitly recommends migrating to Kirby 5 where an upgrade is feasible. If immediate patching is not possible, a targeted compensating control is to restrict external access to the Kirby REST API at the web server or firewall level (e.g., block or require additional authentication on the /api/ path); the trade-off is loss of headless or programmatic API integrations. Alternatively, administrators can audit all user blueprints to ensure no role grants pages.create without also granting pages.changeStatus, which eliminates the vulnerable permission configuration without code changes but requires ongoing enforcement as roles are added.

Share

EUVD-2026-25370 vulnerability details – vuln.today

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