{"id":"CVE-2026-75592","aliases":["EUVD-2026-68811","GHSA-6j4c-mgqr-qv76"],"status":"published","title":"Kirby: Access to image files outside of the site root via path traversal in the media handling","description":"Kirby is an open-source content management system. Prior to 4.9.5 and 5.5.2, depending on the release line, Kirby's media handler used incomplete filesystem containment checks in src/Filesystem/Dir.php and src/Filesystem/F.php through Kirby\\Filesystem\\Dir::realpath() and Kirby\\Filesystem\\F::realpath(). The checks accepted a sibling directory whose path shared the intended root's string prefix, such as /var/www/site2 next to /var/www/site, because they did not require an exact match or a DIRECTORY_SEPARATOR boundary. A remote attacker could use Kirby\\Cms\\Media::thumb() to create and access thumbnails from image files in a PHP-readable sibling directory when that directory contained a valid .json thumbnail job file, potentially exposing staging sites, backups, or other internal sites and deleting the job file during processing. This issue is fixed in versions 4.9.5 and 5.5.2.","severity":{"version":"4.0","score":6.9,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/SI:N/SA:N","level":"medium","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-09","score":0.00676,"percentile":0.52514,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-22"],"published":"2026-08-31T20:49:41Z","modified":"2026-11-04T02:45:44Z","fixes":[{"ecosystem":"Packagist","package":"getkirby/cms","fixed_in":["4.9.5","5.5.2"],"sources":["ghsa","osv"]}],"affected":[{"source":"ghsa","ecosystem":"Packagist","package":"getkirby/cms","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.9.5"}]}]},{"source":"ghsa","ecosystem":"Packagist","package":"getkirby/cms","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"5.0.0"},{"fixed":"5.5.2"}]}]},{"source":"osv","ecosystem":"Packagist","package":"getkirby/cms","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.9.5"}]}],"versions":["3.0.0","3.0.1","3.0.1-rc.1","3.0.2","3.0.2-rc.1","3.0.3","3.0.3-rc.1","3.0.3-rc.2","3.0.3-rc.3","3.1.0","3.1.0-rc.1","3.1.1","3.1.2","3.1.2-rc.1","3.1.3","3.1.3-rc.1","3.1.4","3.1.4-rc.1","3.10.0","3.10.0.1","3.10.1","3.10.1.1","3.10.1.2","3.2.0","3.2.0-rc.1","3.2.0-rc.2","3.2.0-rc.3","3.2.0-rc.4","3.2.1","3.2.1-rc.1","3.2.2","3.2.3","3.2.3-rc.1","3.2.4","3.2.4-rc.1","3.2.5","3.2.5-rc.1","3.2.5-rc.2","3.3.0","3.3.0-rc.1","3.3.0-rc.2","3.3.0-rc.3","3.3.0-rc.4","3.3.0-rc.5","3.3.1","3.3.1-rc.1","3.3.2","3.3.2-rc.1","3.3.3","3.3.3-rc.1","3.3.4","3.3.4-rc.1","3.3.5","3.3.5-rc.1","3.3.6","3.4.0","3.4.0-rc.1","3.4.0-rc.2","3.4.0-rc.3","3.4.1","3.4.1-rc.1","3.4.2","3.4.3","3.4.3-rc.1","3.4.4","3.4.4-rc.1","3.4.5","3.5.0","3.5.0-rc.1","3.5.0-rc.2","3.5.0-rc.3","3.5.0-rc.4","3.5.0-rc.5","3.5.0-rc.6","3.5.0-rc.7","3.5.1","3.5.1-rc.1","3.5.2","3.5.2-rc.1","3.5.3","3.5.3.1","3.5.4","3.5.5","3.5.5-rc.1","3.5.6","3.5.6-rc.1","3.5.7","3.5.7-rc.1","3.5.7.1","3.5.8","3.5.8.1","3.5.8.2","3.5.8.3","3.5.8.4","3.6.0","3.6.0-alpha.1","3.6.0-alpha.2","3.6.0-alpha.3","3.6.0-alpha.4","3.6.0-beta.1","3.6.0-beta.2","3.6.0-beta.3","3.6.0-rc.1","3.6.0-rc.2","3.6.0-rc.3","3.6.0-rc.4","3.6.0-rc.5","3.6.1","3.6.1.1","3.6.2","3.6.2-rc.1","3.6.2-rc.2","3.6.2-rc.3","3.6.3","3.6.3-rc.1","3.6.3-rc.2","3.6.3.1","3.6.4","3.6.4-rc.1","3.6.5","3.6.5-rc.1","3.6.6","3.6.6-rc.1","3.6.6.1","3.6.6.2","3.6.6.3","3.6.6.4","3.6.6.5","3.6.6.6","3.7.0","3.7.0-rc.1","3.7.0-rc.2","3.7.0-rc.3","3.7.0.1","3.7.0.2","3.7.1","3.7.1-rc.1","3.7.2","3.7.2-rc.1","3.7.2.1","3.7.3","3.7.3-rc.1","3.7.4","3.7.4-rc.1","3.7.5","3.7.5.1","3.7.5.2","3.7.5.3","3.7.5.4","3.7.5.5","3.8.0","3.8.0-rc.1","3.8.0-rc.2","3.8.0-rc.3","3.8.1","3.8.1-rc.1","3.8.1.1","3.8.2","3.8.2-rc.1","3.8.3","3.8.3-rc.1","3.8.3-rc.2","3.8.4","3.8.4.1","3.8.4.2","3.8.4.3","3.8.4.4","3.9.0","3.9.0-rc.1","3.9.0-rc.2","3.9.1","3.9.1-rc.1","3.9.2","3.9.2-rc.1","3.9.3","3.9.3-rc.1","3.9.4","3.9.4-rc.1","3.9.5","3.9.5-rc.1","3.9.6","3.9.6-rc.1","3.9.6.1","3.9.7","3.9.7-rc.1","3.9.8","3.9.8-rc.1","3.9.8.1","3.9.8.2","3.9.8.3","4.0.0","4.0.0-alpha.1","4.0.0-alpha.2","4.0.0-alpha.3","4.0.0-alpha.4","4.0.0-alpha.5","4.0.0-alpha.6","4.0.0-alpha.7","4.0.0-beta.1","4.0.0-beta.2","4.0.0-beta.3","4.0.0-rc.1","4.0.0-rc.2","4.0.0-rc.3","4.0.0-rc.4","4.0.1","4.0.2","4.0.3","4.1.0","4.1.0-rc.1","4.1.0-rc.2","4.1.0-rc.3","4.1.1","4.1.2","4.2.0","4.2.0-rc.1","4.3.0","4.3.0-rc.1","4.3.1","4.4.0","4.4.0-rc.1","4.4.1","4.5.0","4.5.0-rc.1","4.6.0","4.6.0-rc.1","4.6.1","4.7.0","4.7.0-rc.1","4.7.1","4.7.2","4.8.0","4.8.0-rc.1","4.9.0","4.9.1","4.9.2","4.9.3","4.9.4"]},{"source":"osv","ecosystem":"Packagist","package":"getkirby/cms","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"5.0.0"},{"fixed":"5.5.2"}]}],"versions":["5.0.0","5.0.1","5.0.2","5.0.3","5.0.4","5.1.0","5.1.0-rc.1","5.1.1","5.1.2","5.1.3","5.1.4","5.2.0","5.2.0-rc.1","5.2.1","5.2.2","5.2.3","5.3.0","5.3.0-rc.1","5.3.1","5.3.2","5.3.3","5.4.0","5.4.1","5.4.2","5.4.3","5.4.4","5.5.0","5.5.1"]}],"products":[{"vendor":"getkirby","product":"kirby"}],"references":[{"url":"https://github.com/getkirby/kirby/security/advisories/GHSA-6j4c-mgqr-qv76","tags":["x_refsource_CONFIRM","advisory","web"]},{"url":"https://github.com/getkirby/kirby/commit/2b6fab950bc89d505ea89576bf71c8de614cc3b2","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/getkirby/kirby/commit/e0dca5f709adc21b36f5549df2c0619bc59da56c","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/getkirby/kirby/releases/tag/4.9.5","tags":["x_refsource_MISC","web"]},{"url":"https://github.com/getkirby/kirby/releases/tag/5.5.2","tags":["x_refsource_MISC","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-75592","tags":["advisory"]},{"url":"https://github.com/advisories/GHSA-6j4c-mgqr-qv76"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/75xxx/CVE-2026-75592.json","tags":["advisory"]},{"url":"https://github.com/getkirby/kirby","tags":["package"]}],"sources":{"cve":[{"id":"CVE-2026-75592","title":"Kirby: Access to image files outside of the site root via path traversal in the media handling","description":"Kirby is an open-source content management system. Prior to 4.9.5 and 5.5.2, depending on the release line, Kirby's media handler used incomplete filesystem containment checks in src/Filesystem/Dir.php and src/Filesystem/F.php through Kirby\\Filesystem\\Dir::realpath() and Kirby\\Filesystem\\F::realpath(). The checks accepted a sibling directory whose path shared the intended root's string prefix, such as /var/www/site2 next to /var/www/site, because they did not require an exact match or a DIRECTORY_SEPARATOR boundary. A remote attacker could use Kirby\\Cms\\Media::thumb() to create and access thumbnails from image files in a PHP-readable sibling directory when that directory contained a valid .json thumbnail job file, potentially exposing staging sites, backups, or other internal sites and deleting the job file during processing. This issue is fixed in versions 4.9.5 and 5.5.2.","status":"published","published":"2026-08-31T20:49:41.341Z","modified":"2026-09-01T13:41:40.5Z","cvss":[{"version":"4.0","score":6.9,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/SI:N/SA:N","level":"medium","assessor":"cna"}],"cwes":["CWE-22"],"updated_at":"2026-11-02T14:20:07.260654Z"}],"euvd":[{"id":"EUVD-2026-68811","description":"Kirby is an open-source content management system. Prior to 4.9.5 and 5.5.2, depending on the release line, Kirby's media handler used incomplete filesystem containment checks in src/Filesystem/Dir.php and src/Filesystem/F.php through Kirby\\Filesystem\\Dir::realpath() and Kirby\\Filesystem\\F::realpath(). The checks accepted a sibling directory whose path shared the intended root's string prefix, such as /var/www/site2 next to /var/www/site, because they did not require an exact match or a DIRECTORY_SEPARATOR boundary. A remote attacker could use Kirby\\Cms\\Media::thumb() to create and access thumbnails from image files in a PHP-readable sibling directory when that directory contained a valid .json thumbnail job file, potentially exposing staging sites, backups, or other internal sites and deleting the job file during processing. This issue is fixed in versions 4.9.5 and 5.5.2.","status":"published","published":"2026-08-31T20:49:41Z","modified":"2026-09-01T13:41:40Z","cvss":[{"version":"4.0","score":6.9,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/SI:N/SA:N","level":"medium"}],"updated_at":"2026-11-02T18:01:18.76029Z"}],"ghsa":[{"id":"GHSA-6j4c-mgqr-qv76","title":"Kirby: Access to image files outside of the site root via path traversal in the media handling","description":"### TL;DR\n\nThis vulnerability affects all Kirby sites that are deployed in a way that their `index` root on the server is next to a second directory that is read-accessible to PHP and shares the same name prefix (such as the site with the index root `/var/www/site` being next to `/var/www/site2`).\n\nIt was possible to create and access thumbnails from media files within such sibling directories that have a valid thumbnail configuration (JSON job file). This can affect staging sites, site backups or other internal sites.\n\n----\n\n### Introduction\n\nA path traversal (also known as directory traversal) vulnerability occurs when untrusted input is used to build a filesystem path without properly confining the result to an intended base directory. By injecting sequences such as `../`, an attacker can escape that directory and reach files elsewhere on the server.\n\n### Affected components\n\nKirby's media handler processes requests for files in the `media` directory that have not been generated yet. It parses the provided path and finds the correct file or asset to generate a thumbnail of. Each thumbnail needs to have a prepared job file (a metadata file with file extension `.json`) in order to allow the media handler to generate a thumbnail.\n\nThe media handler uses filesystem containment checks in several places that are supposed to prevent breakout of the `media` and `index` roots of the site.\n\n### Impact\n\nIn affected releases, the containment checks were incomplete and did not cover the case of a sibling directory next to the containment directory that starts with the same prefix. E.g. a directory `site2` passed the containment check of directory `site`. This allowed attackers to access media files with prepared job files that are stored within such sibling directories of the site's `index` root, opening the potential for information leaks from sensitive files stored within them, and deleting the job file in the process.\n\n### Patches\n\nThe problem has been patched in [Kirby 4.9.5](https://github.com/getkirby/kirby/releases/tag/4.9.5) and [Kirby 5.5.2](https://github.com/getkirby/kirby/releases/tag/5.5.2). Please update to one of these or a [later version](https://github.com/getkirby/kirby/releases) to fix the vulnerability.\n\nIn all of the mentioned releases, we have hardened the containment helpers `Kirby\\Filesystem\\Dir::realpath()` and `Kirby\\Filesystem\\F::realpath()` to require either an exact match or a `DIRECTORY_SEPARATOR` boundary, so that a sibling path sharing the same name prefix can no longer pass the check. This prevents access to files outside the `index` root of the active site. We have also hardened the `Asset` class to block paths that contain the `../` sequence.\n\n### Credits\n\nThanks to @0x1saac for responsibly reporting the identified issue.","status":"published","published":"2026-09-02T14:55:22Z","modified":"2026-09-02T14:55:23Z","cvss":[{"version":"4.0","score":6.9,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/SI:N/SA:N","level":"medium"}],"cwes":["CWE-22"],"updated_at":"2026-11-02T14:41:10.121131Z"}],"nvd":[{"id":"CVE-2026-75592","description":"Kirby is an open-source content management system. Prior to 4.9.5 and 5.5.2, depending on the release line, Kirby's media handler used incomplete filesystem containment checks in src/Filesystem/Dir.php and src/Filesystem/F.php through Kirby\\Filesystem\\Dir::realpath() and Kirby\\Filesystem\\F::realpath(). The checks accepted a sibling directory whose path shared the intended root's string prefix, such as /var/www/site2 next to /var/www/site, because they did not require an exact match or a DIRECTORY_SEPARATOR boundary. A remote attacker could use Kirby\\Cms\\Media::thumb() to create and access thumbnails from image files in a PHP-readable sibling directory when that directory contained a valid .json thumbnail job file, potentially exposing staging sites, backups, or other internal sites and deleting the job file during processing. This issue is fixed in versions 4.9.5 and 5.5.2.","status":"published","published":"2026-08-31T21:17:48.613Z","modified":"2026-09-08T21:11:31.703Z","cvss":[{"version":"4.0","score":6.9,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/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","level":"medium","assessor":"secondary"}],"cwes":["CWE-22"],"updated_at":"2026-11-02T14:12:42.691315Z"}],"osv":[{"id":"CVE-2026-75592","title":"Kirby: Access to image files outside of the site root via path traversal in the media handling","description":"Kirby is an open-source content management system. Prior to 4.9.5 and 5.5.2, depending on the release line, Kirby's media handler used incomplete filesystem containment checks in src/Filesystem/Dir.php and src/Filesystem/F.php through Kirby\\Filesystem\\Dir::realpath() and Kirby\\Filesystem\\F::realpath(). The checks accepted a sibling directory whose path shared the intended root's string prefix, such as /var/www/site2 next to /var/www/site, because they did not require an exact match or a DIRECTORY_SEPARATOR boundary. A remote attacker could use Kirby\\Cms\\Media::thumb() to create and access thumbnails from image files in a PHP-readable sibling directory when that directory contained a valid .json thumbnail job file, potentially exposing staging sites, backups, or other internal sites and deleting the job file during processing. This issue is fixed in versions 4.9.5 and 5.5.2.","status":"published","published":"2026-08-31T20:49:41.341Z","modified":"2026-11-08T02:47:43.269904962Z","cvss":[{"version":"4.0","score":6.9,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/SI:N/SA:N","level":"medium"}],"cwes":["CWE-22"],"updated_at":"2026-11-08T03:29:47.050206Z"},{"id":"GHSA-6j4c-mgqr-qv76","title":"Kirby: Access to image files outside of the site root via path traversal in the media handling","description":"### TL;DR\n\nThis vulnerability affects all Kirby sites that are deployed in a way that their `index` root on the server is next to a second directory that is read-accessible to PHP and shares the same name prefix (such as the site with the index root `/var/www/site` being next to `/var/www/site2`).\n\nIt was possible to create and access thumbnails from media files within such sibling directories that have a valid thumbnail configuration (JSON job file). This can affect staging sites, site backups or other internal sites.\n\n----\n\n### Introduction\n\nA path traversal (also known as directory traversal) vulnerability occurs when untrusted input is used to build a filesystem path without properly confining the result to an intended base directory. By injecting sequences such as `../`, an attacker can escape that directory and reach files elsewhere on the server.\n\n### Affected components\n\nKirby's media handler processes requests for files in the `media` directory that have not been generated yet. It parses the provided path and finds the correct file or asset to generate a thumbnail of. Each thumbnail needs to have a prepared job file (a metadata file with file extension `.json`) in order to allow the media handler to generate a thumbnail.\n\nThe media handler uses filesystem containment checks in several places that are supposed to prevent breakout of the `media` and `index` roots of the site.\n\n### Impact\n\nIn affected releases, the containment checks were incomplete and did not cover the case of a sibling directory next to the containment directory that starts with the same prefix. E.g. a directory `site2` passed the containment check of directory `site`. This allowed attackers to access media files with prepared job files that are stored within such sibling directories of the site's `index` root, opening the potential for information leaks from sensitive files stored within them, and deleting the job file in the process.\n\n### Patches\n\nThe problem has been patched in [Kirby 4.9.5](https://github.com/getkirby/kirby/releases/tag/4.9.5) and [Kirby 5.5.2](https://github.com/getkirby/kirby/releases/tag/5.5.2). Please update to one of these or a [later version](https://github.com/getkirby/kirby/releases) to fix the vulnerability.\n\nIn all of the mentioned releases, we have hardened the containment helpers `Kirby\\Filesystem\\Dir::realpath()` and `Kirby\\Filesystem\\F::realpath()` to require either an exact match or a `DIRECTORY_SEPARATOR` boundary, so that a sibling path sharing the same name prefix can no longer pass the check. This prevents access to files outside the `index` root of the active site. We have also hardened the `Asset` class to block paths that contain the `../` sequence.\n\n### Credits\n\nThanks to @0x1saac for responsibly reporting the identified issue.","status":"published","published":"2026-09-02T14:55:22Z","modified":"2026-09-02T15:15:09.279528945Z","cvss":[{"version":"4.0","score":6.9,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/SI:N/SA:N","level":"medium"}],"cwes":["CWE-22"],"updated_at":"2026-11-02T15:46:39.965326Z"}]}}
