
Подробное описание уязвимости XSS с сохранением в VaahCMS через небезопасную обработку загрузки SVG-файлов, включая поток эксплуатации, затронутые конечные точки и стратегии смягчения для исследователей безопасности.
Уязвимость хранимого межсайтового скриптинга (Stored XSS) была выявлена в vaahcms, конкретно во взаимодействии между логикой загрузки файлов в MediaController.php и методом storeAvatar() в UserBase.php, что позволяет зарегистрированному пользователю с низким уровнем прав загрузить вредоносный SVG-файл, содержащий встроенный JavaScript. Уязвимость обусловлена тем, что файл сохраняется на диск до проверки содержимого или MIME-типа, оставляя вредоносные файлы на предсказуемом общедоступном пути на сервере.
Уязвимость возникает в методе upload() в MediaController.php
$path = $request->file($input_file_name) ->storeAs($request->folder_path, $upload_file_name); что позволяет атакующему указать путь к директории и таким образом разместить вредоносные файлы (например, SVG с XSS-нагрузкой) непосредственно в каталоге public/, делая полезную нагрузку немедленно доступной через веб-браузер.
Успешная эксплуатация позволяет атакующему контролировать содержимое и имя файла, записываемого в общедоступное хранилище (/storage/media/ГГГГ/ММ/<контролируемое-имя>.svg). Если этот общедоступный SVG впоследствии отображается в браузере пользователя через ``, <object> или специально созданную ссылку, встроенный скрипт выполнится, что приведёт к постоянному XSS.
POST /backend/vaah/manage/media/upload
/storage/media/ГГГГ/ММ/<контролируемое-имя>.svg.{"success": false, "errors": ["Unable to decode input"]}).POC.svg).xss.svg)./storage/media/2025/08/xss.svg.
enshrined/svg-sanitize для PHP)Исследователь: Thaw Phone Nyo
Дата раскрытия: 2025/10/8