본문 바로가기

새빨간거짓말

[CVE-2014-6041] Android Browser Same Origin Policy Bypass 취약점




생각중 얼마전 발표된  안드로이드 관련 웹취약점입니다. 

머리랑 눈으로만 말고..

손으로 이해해봅니다.. ^^;; 




# 취약점 정보 : 


        • 요약 : \u0000 문자열을 이용해서 Same Origin 브라우저 보안정책 우회.





# 취약점 기반 정보 : 



대부분의 브라우저는 도메인 간의 무분별한 접근을 막는 Same Origin Policy” 보안기능 적용하고 있다. 




도메인의 구분은 아래와 같이 [스키마(프로토콜)] + [도메인] + [포트] 를 통해서 이루어진다. 

(단, IE는 Trust Zones”과 포트는 same origin 정책이 적용되지 않음.)


 [scheme]://[도메인]:[포트]/path?querystring   




Cross-origin script API access

. JavaScript APIs such as iframe.contentWindowwindow.parentwindow.open and window.opener allow documents to directly reference each other. When the two documents do not have the same origin, these references provide limited access to the Window and Location objects. ….


[출처 developer.mozilla.org




# 취약점 테스트 : 



  • 테스트 환경 :  Android 4.0.4 (Galaxy Nexus) 

  • 도메인 구조 :
    • Domain #01 : hacksum.net (Cross 접근 대상 도메인)
    • Domain #02 : test.dyndns.org (예제 html이 존재하는 도메인) 
  • 테스트 Case : 


Case #01. 동일한 도메인간의 접근허용 테스트

     http://test.dyndns.org ------->  http://test.dyndns.org


[그림] 동일한 도메인 접근(http://test.dyndns.org/same_origin.html)


동일한 도메인 간의 접근은 허용하기 때문에 해당 스크립트를 실행하면 iframe 으로 연결된 도메인 정보가 아래와 같이 올바르게 출력된다.





Case #02. 다른 도메인간의 접근불가 테스트

    http://test.dyndns.org -------> http://hacksum.net 


[그림] 다른 도메인간 접근(http://test.dyndns.org/before_bypass.html)


Same Original Policy에 의해서 다른 도메인(hacksum.net) 접근은 허용되지 않기 때문에, 도메인 정보가 출력되지 않는다. 




Case #03. 다른 도메인간의 접근불가 우회 테스트

http://test.dyndns.org -------> http://hacksum.net


[그림] 우회기법을 사용한 다른 도메인간 접근 (http://test.dyndns.org/CVE-2014-6041.html)


접근이 불가능한 도메인 간의 접근이 “\u0000”를 부가하는 방법으로 우회할 수 있다. 




다음과 같이 Android Version : 4.4.4 에서는 해당 우회방법이 허용되지 않는다. 

     

    




# 취약점을 활용한 실전(사용자 쿠키정보 훔치기): 



해당 취약점을 이용해서 실제 사용자의 hacksum.net 쿠키정보를 가로챌 수 있는 지 상상해킹을 시작해보자. 

다음과 같이 서버를 준비한다. 


  • 공격자 쿠키수집 서버 : http://attack.net/collect_cookie.php

  • 수집할 쿠키대상 : http://hacksum.net

  • 공격코드가 올려진 서버 : http://test.dyndns.org/cve-attack.html




  1. 일단 사용자가 Hacksum.net에 로그인할 수 있도록 흥미로운 사진을 준비한다. 
  2. 흥미로운 사진과 함께 아래와 같은 공격코드(cve-attack.html)를 같이 삽입해 놓는다.
  3. 사용자는 로그인된 상태에서 해당 페이지(cve-attack.html)를 로딩한다. 
  4. iframe을 통해 hacksum.net이 로딩되고, 로그인 상태의 쿠키정보를 포함한 URL(http://attack.net/collect_cookie.php?cookie=[쿠키정보])이 공격자 수집서버(attack.net)으로 전달된다.
  5.  



보다 다양한 테스트는 다음 Metasploit에 포함된 모듈을 통해서 TARGET_URL와 CUSTOM_JS를 변경하면서 테스트 가능하다. 

  • Name : 'Android Open Source Platform (AOSP) Browser UXSS'
  • Module : /modules/auxiliary/gather/android_stock_browser_uxss.rb




[그림] Metasploit 코드 일부


# 참고 : 


  1. http://www.rafayhackingarticles.net/2014/08/android-browser-same-origin-policy.html

  2. https://community.rapid7.com/community/metasploit/blog/2014/09/15/major-android-bug-is-a-privacy-disaster-cve-2014-6041

  3. https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/gather/android_stock_browser_uxss.rb

  4. http://www.cvedetails.com/cve/CVE-2014-6041/