안전하지 않은 콘텐츠 프로바이더 접근
컨텐츠 프로바이더란?
안드로이드에서 프로바이더는 애플리케이션 사이의 데이터 교환 연결 통로이다.
각종 설정 값 및 DB에 접근하는 식으로 사용된다.
컨텐츠 프로바이더에 접근하기 위해선 프로바이더의 주소인 URI와 리졸버가 필요하다.
컨텐츠 프로바이더 주소는 content://authority/path와 같은 형식으로 되어있다.
프로바이더의 authority는 고유 주소이고, path는 데이터 위치 정보이다.
취약점 진단
AndroidManifest.xml을 살펴보면 <provider>가 존재하는데 android:exported 값이 true로 설정되어 있기 때문에 외부에서 insecurebankv2의 어플의 내부 저장소로 접근이 가능하다.
com.android.insecurebankv2.TrackUserContentProvider의 코드를 살펴보면 URI를 얻을 수 있다.
URI :
content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers
따라서 컨텐츠 프로바이더에 접근을 통해 내부 컨텐츠를 볼 수 있다.
ADB를 통한 접근
ADB의 content query를 사용하면 데이터를 열람 가능하다.
adb shell su content query --uri content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers
출력 된 데이터에는 로그인한 유저들의 이름이 저장되는 것을 볼 수 있다.
Drozer를 통한 접근
Drozer는 컨텐츠 프로바이더 uri 탐지 기능을 제공한다.
해당 명령어를 통해 URI 탐지 결과 Accessible content URIs가 나오는 것을 볼 수 있다.
run scanner.provider.finduris -a com.android.insecurebankv2
해당 명령어를 통해 URI를 조회 할 수 있다.
run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers/
대응방안
브로드캐스트 리시버, 액티비티와 같이 프로바이더 또한 android:exported의 값을 false로 변경하여 외부 접근을 보안 할 수 있다.