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

CVE-2026-75594: Critical Path Traversal and Directory Containment Bypass in Kirby CMS

Alon Barad
Alon Barad
Software Engineer

Sep 1, 2026·6 min read·1 visit

Executive Summary (TL;DR)

Unauthenticated remote attackers can read and delete local JSON files or bypass directory sandbox containment via URL-encoded path traversal sequences in Kirby CMS.

A critical path traversal vulnerability was discovered in the Kirby CMS media component. Prior to versions 4.9.5 and 5.5.2, Kirby failed to validate path-traversal indicators in requested filenames, allowing attackers to check for the existence of local JSON files, delete them, or bypass directory prefix containment logic under certain web server configurations.

Vulnerability Overview

The media and asset management subsystems in Kirby CMS are designed to dynamically process, resize, and serve assets to web visitors. In versions of Kirby prior to 4.9.5 and 5.5.2, these components fail to sanitize user-supplied input parameters properly, creating a direct path traversal attack surface.

An attacker can supply URL-encoded directory traversal strings such as %2f or %5c to bypass routing filters. If the underlying server environment does not automatically decode and normalize these slashes prior to passing the request context to the PHP runtime, the filesystem API processes them as active relative directory indicators.

This vulnerability is tracked as CVE-2026-75594 and GHSA-9vx2-j98c-p72w. It introduces two distinct flaws: an unchecked filename concatenation inside the dynamic thumbnail generator and a prefix matching logical vulnerability within the realpath containment checks of the directory utility classes. The resulting security exposure allows unauthenticated directory scanning, local JSON file read, file deletion, and file existence confirmation.

Root Cause Analysis

The primary root cause lies in the core dynamic thumbnail endpoint helper situated within src/Cms/Media.php. When processing dynamic thumbnail generation requests, Kirby relies on a configuration job file to parse and save options. The resolution of the parent media storage root is safely handled using realpath lookups, but the actual requested filename parameter is appended directly to the base path.

Because the $filename variable is not subjected to strict local filename checks, it can contain relative traversal sequences. When the concatenation happens, the resolving path escapes the bounds of the validated parent directory. If a file is successfully processed or recognized as a completed job, the application also attempts a cleanup sequence which deletes the parsed configuration JSON file.

In addition to the filename validation gap, Kirby's internal security logic in Dir::realpath and F::realpath contains a prefix matching logic flaw. The containment check attempts to verify whether a canonicalized child path lies within a permitted parent directory using simple prefix validation. Because it lacks a trailing directory separator constraint, an attacker can target sibling folders sharing a partial string prefix, such as accessing /var/www/site-conf when authorized only for /var/www/site.

Code Analysis

To understand the vulnerabilities completely, we analyze the vulnerable execution paths and the corresponding fixes introduced by the maintainers.

// Vulnerable snippet in src/Cms/Media.php
$root = Dir::realpath($root, $media);
$thumb = $root . '/' . $filename;
$job   = $root . '/.jobs/' . $filename . '.json';

The code above illustrates the unsafe concatenation. The variable $filename is taken directly from the route context without any baseline check. The patch introduced a validation block utilizing the basename function to enforce that the filename is strictly flat:

// Patched snippet in src/Cms/Media.php
$root = Dir::realpath($root, $media);
if (
    $filename === '' ||
    $filename === '.' ||
    $filename === '..' ||
    basename($filename) !== $filename
) {
    throw new InvalidArgumentException();
}
$thumb = $root . '/' . $filename;

Additionally, the prefix matching checks inside the core containment functions were updated to prevent sibling directories from satisfying the validation logic. The fix appends the OS-specific directory separator to the parent path prior to executing prefix validation:

// Patched containment logic in src/Filesystem/Dir.php
$parent = rtrim($parent, '/\');
if (
    $realpath !== $parent &&
    str_starts_with($realpath, $parent . DIRECTORY_SEPARATOR) === false
) {
    throw new Exception('The directory is not within the parent directory');
}

Exploitation Methodology

The exploitation of CVE-2026-75594 depends on the deployment environment and the server's handling of encoded slashes. In a standard Nginx environment where path normalization is turned off, or in Apache setups where AllowEncodedSlashes On is active, encoded characters pass to the PHP-FPM gateway intact.

An attacker crafts a request targeting the media directory and injects encoded traversal sequences to point to sensitive JSON files. For example, a target path of ../../site/accounts/user.json can be encoded. When processed, if the targeted file exists, the dynamic router reacts with a distinct error signature, allowing file discovery.

Furthermore, if the target JSON file contains valid keys structured like a thumbnail generation configuration, the clean-up logic inside Kirby will automatically execute a file delete routine on the path. This allows remote attackers to delete arbitrary JSON metadata on the filesystem. The flowchart below outlines the execution flow of the directory containment bypass:

Impact Assessment

The impact of CVE-2026-75594 is assessed as High, with a CVSS v4.0 score of 8.2. Unauthenticated remote attackers can leverage the directory traversal and containment bypass to perform reconnaissance on target environments by identifying critical configuration structures.

While direct remote code execution is not achievable solely via the path traversal, the ability to disclose the existence of JSON files can leak sensitive data such as application metadata, configuration details, list of accounts, or backend transaction records. The secondary risk of file deletion introduces an availability risk where key system states can be disrupted by removing operational files.

Security teams should note that this vulnerability does not require prior privileges or authentication. It can be triggered over the network directly against any publicly accessible Kirby CMS installation running on a vulnerable web server setup.

Remediation and Mitigations

The primary remediation strategy is upgrading Kirby core to the patched releases. Deployments running the Kirby 4 release line must update to version 4.9.5 or higher. Deployments running the Kirby 5 release line must update to 5.5.2 or higher.

When immediate patching is not possible, security teams must enforce path normalization at the web server level. For Nginx, ensure that rewrite rules or location handlers filter out encoded slash sequences before forwarding requests to PHP. For Apache, configure rewrite rules to deny requests containing encoded slashes entirely.

Furthermore, system administrators should ensure that the web service runs under a low-privileged OS user account with strict write and delete permissions restricted only to the necessary media and cache directories. This containment limits the damage an attacker can inflict if they attempt to trigger file deletions.

Fix Analysis (4)

Technical Appendix

CVSS Score
8.2/ 10
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N

Affected Systems

Kirby CMS Core < 4.9.5Kirby CMS Core >= 5.0.0, < 5.5.2

Affected Versions Detail

Product
Affected Versions
Fixed Version
kirby
getkirby
< 4.9.54.9.5
kirby
getkirby
>= 5.0.0, < 5.5.25.5.2
AttributeDetail
CWE IDCWE-22
Attack VectorNetwork
CVSS Score8.2 (High)
EPSS ScoreN/A
Exploit Statuspoc
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1083File and Directory Discovery
Discovery
T1005Data from Local System
Collection
CWE-22
Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')

References & Sources

  • [1]GitHub Advisory GHSA-9vx2-j98c-p72w
  • [2]CVE-2026-75594 Record

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 2 hours ago•CVE-2026-81889
8.6

CVE-2026-81889: Server-Side Request Forgery via DNS Rebinding in elFinder

An in-depth analysis of CVE-2026-81889, a critical Server-Side Request Forgery (SSRF) vulnerability in the remote URL upload component of elFinder web file manager before version 2.1.70. The flaw leverages DNS rebinding due to insecure socket fallbacks when the PHP cURL extension is missing, resulting in access to internal network resources and local loopback services.

Amit Schendel
Amit Schendel
1 views•8 min read
•about 3 hours ago•CVE-2026-45822
6.6

CVE-2026-45822: Algorithmic Complexity Denial of Service in decode-uri-component

A critical algorithmic complexity Denial of Service (DoS) vulnerability exists in the npm package decode-uri-component versions 0.1.0 through 0.4.1. The package employs an inefficient, high-complexity recursive mechanism when processing invalid percent-encoded sequences, such as isolated continuation bytes. An attacker can exploit this behavior by sending malformed strings, causing the Node.js event loop to block entirely and exhausting CPU resources. This vulnerability is resolved in version 0.5.0 by replacing the recursive parser with a single-pass, linear scanning algorithm.

Amit Schendel
Amit Schendel
0 views•6 min read
•about 5 hours ago•CVE-2026-71415
7.1

CVE-2026-71415: Missing Authorization in Kirby CMS REST API Chunked Upload Handler

A missing authorization vulnerability (CWE-862) in Kirby CMS (versions 5.0.0 through 5.5.1) allows low-privileged authenticated users with Panel access to write temporary chunk files to disk, leading to potential Denial of Service via storage exhaustion.

Amit Schendel
Amit Schendel
2 views•6 min read
•about 6 hours ago•CVE-2026-59724
7.5

CVE-2026-59724: Remote Unauthenticated Denial of Service in Engine.IO WebTransport Upgrade

An input validation vulnerability in the WebTransport upgrade handler of the Engine.IO server (the core engine driving Socket.IO) allows remote, unauthenticated attackers to trigger a denial of service via application crashes. By sending a crafted session identifier corresponding to a JavaScript prototype property (such as __proto__), an attacker forces the server to reference Object.prototype instead of a valid socket instance, causing a fatal TypeError in the asynchronous execution context.

Amit Schendel
Amit Schendel
0 views•9 min read
•about 7 hours ago•CVE-2026-81888
5.4

CVE-2026-81888: Missing State Verification in @hono/oauth-providers Leads to Login CSRF

An authentication bypass vulnerability in @hono/oauth-providers prior to version 0.8.6 allows unauthenticated remote attackers to perform login Cross-Site Request Forgery (CSRF) and forced account linking. Due to a logical 'fail-open' comparison flaw, the middleware validates OAuth callbacks when the state parameter is omitted from both the client cookie and the request query parameters, completely bypassing standard anti-CSRF protections.

Alon Barad
Alon Barad
5 views•6 min read
•about 8 hours ago•CVE-2026-15305
6.3

CVE-2026-15305: Server-Side Validation Bypass in TYPO3 CMS Form Framework File Upload Component

CVE-2026-15305 describes a critical security vulnerability within the TYPO3 CMS Form Framework (ext:form) extension. Due to a lifecycle timing mismatch, server-side MIME type validation was bypassed when processing files uploaded via FileUpload or ImageUpload form elements. This allowed remote, unauthenticated attackers to upload arbitrary file types (with the exception of blocked PHP extensions) to the web server's public storage directory.

Amit Schendel
Amit Schendel
3 views•8 min read