GHSA-c43v-4cr8-6mvpLow▾ SunlitCraft CMS has authenticated path traversal in `assets/icon`, allowing local `.svg` file read
▾ Sunlit zone — Low / medium · no exploitation signal
impact 13.8 · likelihood 0 · exploitation 0
Need a working PoC? Pro members can cast a request and our team develops one — it lands right here.
An authenticated path traversal in assets/icon allows local SVG file read by passing traversal sequences in the extension parameter. The issue is caused by file existence checks happening before extension validation.
The endpoint:
src/controllers/AssetsController.php:1115-1123actionIcon(string $extension) calls Assets::iconPath($extension) and returns sendFile($path, ...).In Assets::iconPath():
extension:
src/helpers/Assets.php:906-909file_exists($path) is true, path is returned immediately:
src/helpers/Assets.php:910-912Validation exists in Assets::iconSvg():
preg_match('/^\w+$/', $extension)src/helpers/Assets.php:927-931However, that validation is only reached if iconPath() does not find a file.
So traversal payloads that resolve to existing .svg files bypass validation and are served by sendFile().
craftcms/cms >= 4.0.0-RC1, <= 4.17.6craftcms/cms >= 5.0.0-RC1, <= 5.9.12Upgrade to a patched release:
craftcms/cms 4.17.7craftcms/cms 5.9.13Connected by shared product, vendor, weakness, or advisory.
GHSA-7hxc-f267-h5q7LowCraft CMS: Incorrect path validation could potentially lead to path traversal
GHSA-xxpx-f366-4xpqMediumCraft CMS:Authorization bypass: view-only Categories user can modify category structure via structures/move-element
GHSA-wg23-69c2-gjc8CriticalCraft CMS: Passkey login accepts replayed WebAuthn assertions
GHSA-p8x7-9vfw-p7vcHighCraft CMS: Arbitrary user password reset leading to administrator account takeover
GHSA-2rp4-x2j7-qmccMediumCraft CMS: Stored XSS in the control panel via unescaped draft name
GHSA-rvmm-v933-jgxqMediumCraft CMS: Missing authorization check allows non-admin control panel users access to user registration metrics