Логотип exploitDog
Консоль
Логотип exploitDog

exploitDog

github логотип

GHSA-c43v-4cr8-6mvp

Опубликовано: 09 июл. 2026
Источник: github
Github: Прошло ревью
CVSS4: 2

Описание

Craft CMS has authenticated path traversal in assets/icon, allowing local .svg file read

Summary

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.

Details

The endpoint:

  • src/controllers/AssetsController.php:1115-1123
  • actionIcon(string $extension) calls Assets::iconPath($extension) and returns sendFile($path, ...).

In Assets::iconPath():

  • Path is built from user-controlled extension:
    • src/helpers/Assets.php:906-909
  • If file_exists($path) is true, path is returned immediately:
    • src/helpers/Assets.php:910-912

Validation exists in Assets::iconSvg():

  • preg_match('/^\w+$/', $extension)
  • src/helpers/Assets.php:927-931

However, 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().

Impact

  • Authenticated users can read local .svg files accessible to the application process.

References

Пакеты

Наименование

craftcms/cms

composer
Затронутые версииВерсия исправления

>= 4.0.0-RC1, <= 4.17.6

4.17.7

Наименование

craftcms/cms

composer
Затронутые версииВерсия исправления

>= 5.0.0-RC1, <= 5.9.12

5.9.13

EPSS

Процентиль: 41%
0.00493
Низкий

2 Low

CVSS4

Дефекты

CWE-22

Связанные уязвимости

CVSS3: 6.5
nvd
3 месяца назад

Craft CMS from 4.0.0-RC1 contains an authenticated path traversal vulnerability in the assets/icon endpoint where the extension parameter is not validated before file existence checks. Attackers can bypass extension validation by passing traversal sequences that resolve to existing SVG files, allowing local file read access.

EPSS

Процентиль: 41%
0.00493
Низкий

2 Low

CVSS4

Дефекты

CWE-22