CVE-2026-32870
Getkirby Kirby ≤ 4.9.0
Raw vector
CVSS: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:XSummary
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
- 🇪🇺 ENISA EUVD: EUVD-2026-25368
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
CVEs Like This One
Affected Assets
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.
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.
Security testing catches XML injection during development but does not itself implement the fix.
Logging can record injection attempts for detection but does not prevent the weakness.
Monitoring can detect exploitation but provides no preventive control over XML handling.
Secure SDLC mandates input validation and output encoding that directly prevent XML injection.
Application security requirements explicitly call for defenses against injection flaws including XML.
Secure architecture principles reduce attack surface but do not prescribe XML-specific controls.