在 vaahcms 中发现了一个存储型跨站脚本(XSS)漏洞,具体存在于 MediaController.php 中的文件上传逻辑与 UserBase.php 中的 storeAvatar() 方法之间的交互中,允许低权限的注册用户上传包含嵌入式 JavaScript 的恶意 SVG 文件。该漏洞源于文件存储发生在内容或 MIME 类型验证之前,导致恶意文件留在服务器上可预测且可公开访问的路径中。
该漏洞源于 MediaController.php 中的 upload() 方法
$path = $request->file($input_file_name) ->storeAs($request->folder_path, $upload_file_name); 允许攻击者指定目录路径,从而将恶意文件(如携带 XSS 的 SVG)直接放入 public/ 目录,使载荷可通过 Web 浏览器立即访问。
成功利用该漏洞后,攻击者可以控制写入公共存储路径(/storage/media/YYYY/MM/<controlled-filename>.svg)的文件内容和文件名。如果该可公开访问的 SVG 随后被用户浏览器通过 ``、<object> 或构造的链接渲染,其中嵌入的脚本将执行,从而导致持久性 XSS。
POST /backend/vaah/manage/media/upload
/storage/media/YYYY/MM/<controlled-filename>.svg。{"success": false, "errors": ["Unable to decode input"]}),文件仍然保留。POC.svg)。xss.svg)。/storage/media/2025/08/xss.svg。
enshrined/svg-sanitize)研究人员: Thaw Phone Nyo
披露日期: 2025/10/8