
VaahCMS의 안전하지 않은 SVG 파일 업로드 처리를 통한 저장형 XSS 취약점에 대한 상세 공개로, 공격 흐름, 영향을 받는 엔드포인트, 그리고 보안 연구자를 위한 완화 전략을 포함합니다.
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가 이후 사용자의 브라우저에서 ``, 또는 조작된 링크를 통해 렌더링되면 포함된 스크립트가 실행되어 지속형 XSS가 발생합니다.
<object>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