버그바운티 리포트를 읽던 중에 deeplink
취약점이 나와서 이참에 정리해보고자 한다.
What is deeplink?
딥링크는 주소를 입력하면 앱이 실행되거나 특정 화면으로 이동시키는 기능을 의미한다.
딥링크는 총 3가지 방식을 가지고 있다.
- URI Scheme: 앱에 URI scheme을 등록하여 사용하는 방식
- App Link: 도메인 주소를 이용하는 방식(for Android)
- Universal Link: 도메인 주소를 이용하는 방식(for IOS)
아래와 같이 AndroidManifest.xml
파일에 intent-filter
안에 data
컴포넌트에서 host
, scheme
속성이 정의되어 있다면 딥링크를 이용할 수 있다.
1
2
3
4
5
6
7
8
9
10
...
<activity android:name="com.example.android.MainActivity">
<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="hoppi" android:scheme="example">
</intent-filter>
</activity>
URI Scheme 방식의 딥링크
일반적으로 사용하는 방식으로, scheme://path
로 이루어진다. scheme은 앱 이름, path는 앱 내 페이지로 이해하면 쉽다.
예를 들면, 트위터 앱의 로그인창을 실행하고 싶으면 twitter://signin
이라는 값을 사용한다.
하지만 이 방식의 문제점은 scheme이 앱마다 같을 수 있다는 점이다. 그렇기 때문에 폰에 같은 scheme을 사용하는 앱을 연결할 때, 어떤 앱을 실행할지 선택하는 화면을 종종 봤을 것이다. (예를 들면, 문서 viewer, 동영상 플레이어 등)
Universal Link & App Link 방식의 딥링크
naver.com
, google.com
처럼 각 사이트들은 고유의 도메인을 가지고 있다. 이 값을 이용하면 URI Scheme 방식처럼 겹칠일은 없지만 모든 앱에서 이 방식을 지원하지 않는다는 단점이 있다.
Example
이곳의 연습용 앱을 이용하여 좀 더 자세하게 들어가보자.
앱을 실행하면 아래와 같이 DeepLinkActivity
를 막아놨다고 적혀있다. 버튼을 눌러봐도 반응은 없었다.
AndroidManifest.xml
파일을 보면 위에서 DeepLinkActivity에 해당하는 부분에서 scheme이 noob으로 설정되어있다. noob://
와 같은 데이터를 보내주게되면 DeeplinkActivity를 실행할 수 있다.
am 명령어를 이용하여 데이터를 보내주면 DeepLinkActivity를 띄울 수 있다.
1
(adb shell) am start -W -a android.intent.action.VIEW -d "noob://"
Vulnerability scenario
취약한 시나리오를 생각해보면 다음과 같다.
딥링크를 통해서 어떤 url을 이용하여 아래와 같이 WebView
같은 것을 띄을 수 있다고 가정해보자.
- app://view?url=http://verify.com
만약 url
파라미터로 넘겨주는 값의 scheme
이나 domain
에 대한 검증이 충분하게 이루어지지 않는다면 공격자가 원하는 곳으로 이동을 시키거나 XSS, LFI 등이 발생할 수 있다.
- app://view?url=http://verify.com@evil
- app://view?url=http://evil.com
- app://view?url=javascript://evil.com/%0aalert(‘XSS’)
- app://view?url=file://data/user/0/
/databases/database
Reference
에 있는 링크에서 더 자세한 예시와 설명이 있으니 참고하면 좋을 것 같다.
Reference
- https://nmochea.medium.com/gcash-vulnerability-walkthrough-c7c938163dfb
- 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://ufo.stealien.com/2020-06-19/Deeplink
Comments powered by Disqus.