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

CVE-2026-29905: Persistent Denial of Service via Malformed Image Upload in Kirby CMS

Amit Schendel
Amit Schendel
Senior Security Researcher

Mar 28, 2026·7 min read·33 visits

Executive Summary (TL;DR)

Authenticated DoS in Kirby CMS <= 5.1.4 due to unchecked getimagesize() return values on malformed uploads, causing fatal PHP TypeErrors.

Kirby CMS through version 5.1.4 contains a persistent Denial of Service (DoS) vulnerability triggered by malformed image uploads. The application fails to validate the return value of the PHP getimagesize() function, resulting in a fatal TypeError that renders affected administrative or frontend pages permanently inaccessible until the malformed file is manually removed.

Vulnerability Overview

Kirby CMS through version 5.1.4 suffers from a persistent Denial of Service (DoS) vulnerability located in its media processing subsystem. The flaw requires an attacker to possess valid credentials with at least "Editor" privileges, which grants the capability to upload files to the system via the Kirby Panel interface. The core issue revolves around improper input validation (CWE-20) combined with an unchecked return value (CWE-252) during the processing of image metadata.

The vulnerability manifests when the application attempts to process a file that possesses a valid image extension (such as .jpg or .png) but lacks valid internal image structures. Modern Content Management Systems process uploaded media to extract dimensions, generate thumbnails, and populate metadata attributes. Kirby performs these operations synchronously during specific rendering routines, either immediately upon upload or when the media file is requested for display in the administrative panel.

When the processing routine encounters the malformed file, the underlying PHP thread crashes due to an unhandled exception. Because the file resides persistently on the filesystem, subsequent requests to the affected page or administrative route will re-trigger the rendering routine, resulting in a continuous loop of fatal errors. This persistence elevates the severity of the flaw, as it transforms a localized crash into a sustained Denial of Service for the affected application sections.

Root Cause Analysis

The root cause of CVE-2026-29905 lies in the strict type enforcement mechanisms introduced in modern PHP versions, specifically interacting with legacy function behaviors. The Kirby CMS codebase utilizes the built-in PHP function getimagesize() to extract the dimensions and file type of uploaded images. According to the PHP documentation, getimagesize() returns an array containing the image attributes upon successful parsing, but returns boolean false if the file is not a valid image or cannot be accessed.

The vulnerable media processing code in Kirby CMS assigns the return value of getimagesize() to a variable and subsequently treats that variable as an array without performing a prior boolean or type check. Specifically, the application attempts to access array offsets, such as $size[0] for width and $size[1] for height.

Prior to PHP 8.0, attempting to access an array offset on a boolean value would emit a non-fatal Warning and evaluate to null, allowing execution to proceed, albeit with invalid data. However, PHP 8.0 and later versions implement stricter type handling. Accessing an array offset on a boolean value now throws a fatal TypeError: Cannot access offset of type bool. This exception immediately halts the execution of the PHP script, returning a 500 Internal Server Error to the client.

Code Analysis

An analysis of the vulnerable code path reveals the absence of defensive programming practices when handling the output of getimagesize(). The CMS invokes the function directly on the path of the user-supplied file.

// Vulnerable Implementation Pattern
$filePath = $file->root();
$size = getimagesize($filePath);
 
// The code incorrectly assumes $size is always an array
$width  = $size[0]; // Fatal TypeError thrown here if $size is false
$height = $size[1];

The patched version of Kirby CMS (5.2.0-rc.1) introduces a standard conditional check to verify the return type before attempting to access the array elements. By verifying that the result is an array, the application safely handles malformed files by either assigning default values, skipping the thumbnail generation, or emitting a gracefully handled application-level exception rather than a fatal PHP error.

// Patched Implementation Pattern
$filePath = $file->root();
$size = getimagesize($filePath);
 
// Verify the return type before array access
if (is_array($size)) {
    $width  = $size[0];
    $height = $size[1];
} else {
    // Graceful error handling or default fallback
    $width  = 0;
    $height = 0;
    // Log warning or throw handled application exception
}

This simple validation ensures that the strict typing engine in PHP 8.x does not encounter the conditions required to throw the TypeError, thereby neutralizing the Denial of Service vector.

Exploitation Methodology

Exploitation of CVE-2026-29905 requires the attacker to possess an account with sufficient privileges to upload files, typically the "Editor" or "Administrator" role in a standard Kirby CMS deployment. The attacker begins by crafting a payload file. The contents of the file are irrelevant as long as they do not constitute valid image data. A standard text file containing arbitrary string data is sufficient.

The attacker then renames this text file to include a valid, application-accepted image extension, such as poc.jpg or exploit.png. Using the authenticated session, the attacker navigates to a content page or media library section within the Kirby Panel and uploads the malformed file. The upload mechanism itself succeeds because the initial validation relies primarily on the file extension rather than deep content inspection.

The DoS condition is triggered immediately upon the application attempting to render a view that includes the uploaded file. If the attacker uploads the file to the site's main index page, the entire public-facing website will crash for all visitors. If uploaded to a specific administrative subsection, only that section is incapacitated. The attack is highly reproducible and requires no specialized exploitation tools beyond a standard web browser.

Impact Assessment

The primary impact of CVE-2026-29905 is a severe reduction in system availability, mapping to the High availability metric in the CVSS v3.1 vector (A:H). While the vulnerability does not permit unauthorized code execution, data exfiltration, or privilege escalation, the resulting Denial of Service is persistent and requires administrative access to the underlying server infrastructure to remediate.

Because the malformed file is written to the physical filesystem within the content/ directory, standard application users (even Administrators) cannot utilize the Kirby Panel to delete the offending file. The Panel itself crashes before it can render the media management interface. This creates a functional lock-out scenario for content managers.

The scope of the outage depends entirely on where the attacker places the file. Placement in globally shared assets (such as site-wide headers or footers) will result in a total site outage. Placement in obscure sub-pages will result in localized outages. The vulnerability is highly effective for internal sabotage or disruption by disgruntled privileged users.

Remediation and Mitigation

The definitive remediation for CVE-2026-29905 is upgrading the Kirby CMS installation to version 5.2.0-rc.1 or later. The patch implements proper type checking on the output of image processing functions, eliminating the fatal TypeError condition. Administrators should review the official Kirby release notes and apply the update via Composer or manual package replacement.

In scenarios where immediate patching is not feasible, organizations must employ manual intervention to restore service. System administrators must connect to the hosting server via SSH or FTP, navigate to the content/ directory, and identify the malformed file. Deleting the file directly from the filesystem will resolve the unhandled exception and restore access to the application.

As a defense-in-depth measure, administrators should audit user permissions to ensure that only trusted individuals possess file upload capabilities. While Web Application Firewalls (WAFs) can theoretically inspect file uploads for mismatched headers and extensions, implementing robust WAF rules for this specific vector is complex and often bypassable. Therefore, relying on the vendor patch is the only comprehensive solution.

Official Patches

getkirbyOfficial GitHub Release containing the fix

Technical Appendix

CVSS Score
6.5/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
EPSS Probability
0.03%
Top 90% most exploited

Affected Systems

Kirby CMS PanelKirby CMS Frontend Rendering EnginePHP 8.0+ Environments hosting vulnerable Kirby versions

Affected Versions Detail

Product
Affected Versions
Fixed Version
Kirby CMS
getkirby
<= 5.1.45.2.0-rc.1
AttributeDetail
CWE IDCWE-252 (Unchecked Return Value)
Attack VectorNetwork (Authenticated File Upload)
CVSS v3.1 Score6.5 (Medium)
EPSS Score0.00034 (0.03%)
ImpactPersistent Denial of Service (High Availability Loss)
Exploit StatusProof of Concept Available
CISA KEVNot Listed

MITRE ATT&CK Mapping

T1499Endpoint Denial of Service
Impact
T1190Exploit Public-Facing Application
Initial Access
CWE-252
Unchecked Return Value

The software does not check the return value from a method or function, which can prevent it from detecting unexpected states and conditions.

Known Exploits & Detection

GitHubTechnical description and proof-of-concept for the vulnerability

Vulnerability Timeline

CVE Published by NVD
2026-03-26

References & Sources

  • [1]NVD Vulnerability Detail
  • [2]CVE.org Record
  • [3]PoC Repository
  • [4]Kirby CMS Release 5.2.0-rc.1
  • [5]GitLab Advisory
  • [6]Technical Report
  • [7]GitHub Advisory Database

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.

More Reports

•about 19 hours ago•CVE-2026-71556
7.1

CVE-2026-71556: Symbolic Link Directory Traversal in go-git

A symbolic link directory traversal vulnerability was identified in go-git, a pure Go implementation of the Git specification. This vulnerability allows an attacker to construct a repository that, when checked out or processed, bypasses directory boundaries to write or overwrite arbitrary files on the host filesystem.

Amit Schendel
Amit Schendel
5 views•5 min read
•about 20 hours ago•CVE-2026-71557
6.3

CVE-2026-71557: Path Traversal and Configuration Overwrite in go-git Filesystem Storage Engine

CVE-2026-71557 is a path traversal vulnerability in go-git, a pure-Go implementation of Git. In vulnerable versions, the filesystem-backed storage engine fails to validate reference names before mapping them to on-disk paths. An attacker hosting a malicious Git server can advertise references containing directory traversal sequences, such as 'refs/heads/../../config', to write or overwrite files outside the intended reference storage directory.

Amit Schendel
Amit Schendel
5 views•7 min read
•about 21 hours ago•GHSA-7C4V-FWGW-9RF7
5.3

GHSA-7c4v-fwgw-9rf7: Nuxt Dev Server Discloses Project Root and Workspace UUID via Chrome DevTools Endpoint

An information disclosure vulnerability in the Nuxt development server allows adjacent network attackers to retrieve the absolute project root directory and a persistent workspace UUID by querying the unprotected Chrome DevTools workspace endpoint. This occurs when the development server is bound to a network-reachable interface, allowing requests that bypass the header-based security verification checks.

Alon Barad
Alon Barad
5 views•7 min read
•about 22 hours ago•CVE-2026-66062
5.3

CVE-2026-66062: Regular Expression Denial of Service (ReDoS) in SvelteKit Content Negotiation

A Regular Expression Denial of Service (ReDoS) vulnerability exists in SvelteKit's content negotiation header parser prior to version 2.70.2. An unauthenticated remote attacker can exploit this vulnerability by sending a crafted Accept header with highly repetitive malformed values. This triggers catastrophic backtracking on the single-threaded Node.js/Bun event loop, leading to CPU exhaustion and full denial of service.

Alon Barad
Alon Barad
5 views•6 min read
•about 23 hours ago•CVE-2026-15895
8.4

CVE-2026-15895: OS Command Injection in AWS jsii-diff CLI

An OS command injection vulnerability exists in the npm package loading component of the jsii-diff CLI tool within the AWS jsii framework. Prior to version 1.131.0, when parsing package specifiers prefixed with `npm:`, the tool concatenated user-controlled inputs directly into a shell execution string via child_process.exec. This allows attackers to execute arbitrary shell commands under the context of the running Node.js process.

Amit Schendel
Amit Schendel
5 views•7 min read
•about 24 hours ago•CVE-2026-63220
4.8

CVE-2026-63220: Trust of Untrusted Reverse Proxy Headers in CodeIgniter4

CodeIgniter4 versions prior to v4.7.4 contain a protocol-spoofing vulnerability due to improper verification of upstream reverse proxy forwarding headers. Remote, unauthenticated attackers can inject headers like X-Forwarded-Proto to deceive the framework into identifying an insecure HTTP request as a secure HTTPS connection.

Alon Barad
Alon Barad
7 views•7 min read