
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/ 디렉터리에 직접 배치할 수 있고, 페이로드가 웹 브라우저를 통해 즉시 접근 가능해집니다.
성공적으로 악용될 경우, 공격자는 공개 저장 경로(/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