[Android] Open redirect vulnerability Using Deeplink

silver35·2023년 2월 17일
0

Android

목록 보기
2/3

Deeplink란?

딥링크란 특정 페이지에 도달할 수 있는 링크를 의미한다. 즉, 모바일 웹상에 있는 링크나 그림을 클릭할 경우 기기 내 관련 앱이나 사전에 정의된 특정 페이지가 실행되는 모바일 기술이다. 웹에서 사용되는 http://, https:// 와는 다르게 모바일 어플리케이션마다 각자 생성한 프로토콜을 사용하고 있어 검증이 미흡한 경우 취약점이 발생 가능하다.

Deeplink의 방식

딥링크는 3가지 방식으로 구분된다.

  1. URL 스킴 방식 : 앱에 URl 스킴(scheme) 값을 등록하여 딥링크 사용
  2. 앱링크(App Link) : Android 제공 - 도메인 주소를 이용한 딥링크 사용
  3. 유니버셜 링크(Universal Link) : iOS 제공 - 도메인 주소를 이용한 딥링크 사용

가장 많이 사용되는 딥링크 방식은 URl Scheme 방식이다. URL 스킴방식은 Scheme://Path라는 두개의 요소로 구성된다. 즉, Scheme은 앱을 특정하며 Path는 앱 내 페이지를 특정한다. 예를들어, 트위터 앱의 회원가입 페이지를 오픈한다고 하면 twitter://signup 이라는 값을 사용한다.

앱링크와 유니버셜 링크는 인증된 웹사이트 URL을 기반으로 하는 딥링크이다. 예를 들면, 스마트폰 브라우저 앱 주소창에 http://naver.com 을 입력하면 네이버 앱이 바로 오픈되어 사용할 수 있다.

안드로이드에서 URL Scheme 방식의 딥링크를 사용하기 위해 AndroidManifest.xml 파일에서 data 태그에 host, scheme을 정의해야한다.

<activity android:name="com.silver35.example">
    <intent-filter>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>
        <data android:host="velog.io/silver35" android:scheme="http"/>
    </intent-filter>
</activity>

Deeplink를 이용한 공격

공격자는 딥링크를 이용하여 민감한 데이터 노출, 세션 하이재킹, Open redirect, Account takeovers, LFI, XSS using WebView implementation of a Deep Link 등의 공격을 진행 할 수 있다.

실습

아래 github에서 InsecureShop.apk 파일을 다운받아 진행하였다.
GitHub - optiv/InsecureShop: An Intentionally designed Vulnerable Android Application built in Kotlin.

InsecureShop.apk 파일을 디컴파일 해보면 AndroidManifest.xml 파일에서 data 태그에 host가 com.insecureshop, scheme이 insecureshop으로 정의된 것을 알 수 있다.

com.insecureshop.WebViewActivity로 가서 코드를 살펴보자. onCreate 함수에 intent0을 선언한 뒤 intent.getData()로 uri를 가져오고 uri0 변수가 null인지 확인한다.

만약 uri0이 null이 아니면 경로에 /web이 있는지 확인하고 있으면 url 파라미터 값을 data 변수에 저장한다. 그렇지 않으면 /webview가 있는지 확인하고 url 파라미터 값을 data 값에 저장한다. /web과 /webview를 모두 포함하지 않으면 앱을 종료하고 포함하고 있으면 webview.loadUrl(data)를 통해 웹 페이지가 로드 된다.

따라서, 위의 앱에서 임의의 웹페이지를 로드하기 위해 아래와 같이 URL를 완성시킬 수 있다.

insecureshop://com.insecureshop/web?url=https://velog.io/@silver35
insecureshop://com.insecureshop/webview?url=https://velog.io/@silver35

앱을 실행해 로그인을 하면 여러개의 제품들이 나타난다.

adb에 am 명령어를 이용해 임의의 url로 리다이렉션을 하도록 실행

adb shell am start -W -a android.intent.action.VIEW -d "insecureshop://com.insecureshop/web?url=https://velog.io/@silver35"


https://velog.io/@silver35 블로그로 이동되는 것을 확인할 수 있다.

실습을 마치며

딥링크에 대한 개념과 이로 인해 발생하는 취약점에 대해 이해를 했다. 자료를 더 찾아보니 https://github.com/harshitrajpal/Vulnerable-DeepLinkActivity 에서 제공하는 딥링크 실습을 할 수 있는 apk 파일이 있어 다음번 글에서는 이를 가지고 한번 더 실습을 진행해 볼 생각이다.

참고자료)
https://help.dfinery.io/hc/ko/articles/360039757433-%EB%94%A5%EB%A7%81%ED%81%AC-Deeplink-URI%EC%8A%A4%ED%82%B4-%EC%9C%A0%EB%8B%88%EB%B2%84%EC%85%9C-%EB%A7%81%ED%81%AC-%EC%95%B1%EB%A7%81%ED%81%AC-%EA%B5%AC%EB%B6%84%EA%B3%BC-%EC%9D%B4%ED%95%B4
https://medium.com/mobis3c/deep-link-exploitation-introduction-open-unvalidated-redirection-b8344f00b17b
https://www.vaadata.com/blog/what-are-deep-links-vulnerabilities-attacks-and-security-best-practices/
https://www.hackingarticles.in/android-pentest-deep-link-exploitation/

0개의 댓글