Cyber Resilience

CVE-2026-32870

Getkirby Kirby ≤ 4.9.0

Published
24 April 2026
Modified
27 April 2026
Patch / advisory
CVSS Score v4 6.9
Click a component to see what it means
Raw vectorCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:N/SI:H/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
EPSS Score 0.0035 27th percentile
Risk Priority 41 floored blend · peak EPSS

Summary

CVE-2026-32870 is a medium-severity aka Blind XPath Injection (CWE-91) vulnerability in Getkirby Kirby. Its CVSS base score is 6.9 (Medium).

Operationally, exploitation aligns with the MITRE ATT&CK technique Content Injection (T1659); ranked at the 27th percentile by exploit likelihood (below the median); it is not currently listed in the CISA KEV catalog.

The strongest mitigations our analysis identified map to SI-10 (Information Input Validation) — see the control section below for these in your framework.

Deeper analysis AI-assisted summary

Synthesised by an AI model from the NVD description and linked references — a reading aid, not an authoritative source.

CVE-2026-32870 is a vulnerability in the open-source Kirby content management system, specifically in the `Xml::value()` method, which provides special handling for `<![CDATA[ ]]>` blocks. Prior to versions 4.9.0 and 5.4.0, the method could be tricked into allowing input that contains a valid CDATA block along with additional structured XML data outside of it. This bypasses the intended value protection, as the extra structured data passes through unescaped. The affected methods include `Xml::value()`, `Xml::tag()`, `Xml::create()`, and the `Xml` data handler (e.g., `Data::encode($string, 'xml')`), though these are not used in Kirby's core and only appear in custom site or plugin code that generates XML from input data.

The vulnerability can be exploited by remote attackers with no privileges or user interaction required, as indicated by its CVSS v3.1 base score of 7.5 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N) and association with CWE-91 (XML Injection). Exploitation requires a Kirby site or plugin that processes untrusted input through the vulnerable methods to generate XML files or strings. If those outputs are consumed by another system that interprets the specific XML schema, an attacker can inject malicious structured data to manipulate that system's behavior, potentially leading to high integrity impacts such as unauthorized data modification or control over XML processing logic. Sites not using XML generation in custom code remain unaffected.

Mitigation is available via patches in Kirby 4.9.0 and 5.4.0, which introduce additional checks to ensure passthrough of unchanged CDATA only occurs when the entire input string consists solely of valid CDATA blocks with no extraneous structured data. Official advisories, including the Kirby security advisory (GHSA-9wfj-c55w-j9qr) and release notes for versions 4.9.0 and 5.4.0 on GitHub, confirm these fixes protect all uses of the methods and recommend upgrading immediately for sites relying on XML handling in plugins or custom code.

OWASP Top 10 for Web (2025)

EU & UK References

Vulnerability Data

Kirby is an open-source content management system. Kirby's `Xml::value()` method has special handling for `<![CDATA[ ]]>` blocks. If the input value is already valid `CDATA`, it is not escaped a second time but allowed to pass through. However, prior to…

more

versions 4.9.0 and 5.4.0, it was possible to trick this check into allowing values that only contained a valid `CDATA` block but also contained other structured data outside of the `CDATA` block. This structured data would then also be allowed to pass through, circumventing the value protection. The `Xml::value()` method is used in `Xml::tag()`, `Xml::create()` and in the `Xml` data handler (e.g. `Data::encode($string, 'xml')`). Both the vulnerable methods and the data handler are not used in the Kirby core. However they may be used in site or plugin code, e.g. to create XML strings from input data. If those generated files are passed to another implementation that assigns specific meaning to the XML schema, manipulation of this system's behavior is possible. Kirby sites that don't use XML generation in site or plugin code are not affected. The problem has been patched in Kirby 4.9.0 and Kirby 5.4.0. In all of the mentioned releases, Kirby has added additional checks that only allow unchanged `CDATA` passthrough if the entire string is made up of valid `CDATA` blocks and no structured data. This protects all uses of the method against the described vulnerability.

CWE(s)

Related Threats

MITRE ATT&CK Enterprise Techniques

T1659 Content Injection Initial Access
Adversaries may gain access and continuously communicate with victims by injecting malicious content into systems through online network traffic.
T1190 Exploit Public-Facing Application Initial Access
Adversaries may attempt to exploit a weakness in an Internet-facing host or system to initially access a network.
Derived from this CVE’s CWE(s) via the direct CWE→ATT&CK cross-walk.

CVEs Like This One

CVE-2023-38491Same product: Getkirby Kirby
CVE-2025-65012Same product: Getkirby Kirby
CVE-2024-26481Same product: Getkirby Kirby
CVE-2024-26484Same product: Getkirby Kirby
CVE-2024-27087Same product: Getkirby Kirby
CVE-2025-30207Same product: Getkirby Kirby
CVE-2025-30159Same product: Getkirby Kirby
CVE-2025-31493Same product: Getkirby Kirby
CVE-2024-26482Same product: Getkirby Kirby
CVE-2023-38488Same product: Getkirby Kirby

Affected Assets

getkirby
kirby
≤ 4.9.0 · 5.0.0 — 5.4.0

Mitigating Controls

Mitigating Controls (NIST 800-53 r5) AI

Input validation directly stops unneutralized XML metacharacters from reaching the parser.

Mitigating Controls (NIST CSF 2.0) AI

Derived directly from the weakness types (CWEs) cited in the NVD entry via our AI-authored CWE→CSF cross-walk (authority under review) — links open the control.

PR.PS-06 mostly match
prevents

Secure SDLC directly requires input neutralization and validation that eliminates XML injection flaws.

Mitigating Controls (ISO/IEC 27001:2022 Annex A) AI

Derived directly from the weakness types (CWEs) cited in the NVD entry via our AI-authored CWE→ISO cross-walk (authority under review) — links open the control.

finds

Security testing catches XML injection during development but does not itself implement the fix.

A.8.15 Logging partial match
finds

Logging can record injection attempts for detection but does not prevent the weakness.

finds

Monitoring can detect exploitation but provides no preventive control over XML handling.

prevents

Secure SDLC mandates input validation and output encoding that directly prevent XML injection.

prevents

Application security requirements explicitly call for defenses against injection flaws including XML.

prevents

Secure architecture principles reduce attack surface but do not prescribe XML-specific controls.

References