본문 바로가기

Security Study/Android

[InsecureBankv2] 안전하지 않은 콘텐츠 프로바이더 접근

취약점 개요

취약점 설명

콘텐츠 프로바이더는 다른 애플리케이션의 데이터베이스, 파일 등에 접근할 수 있도록 도와주며, 접근하기 위해서는 uri가 필요하다. 안전하지 않은 콘텐츠 프로바이더는 uri에 접근할 수 있는 취약점을 말한다.

보안 위협

취약한 콘텐츠 프로바이더를 통해서 데이터가 노출될 수 있다.

발생 위치

AndroidManifest.xml

 

취약점 진단 과정

adb

Step 1) AndroidManifest.xml 확인

프로바이더의 exported 속성이 “true”로 설정되어 있는 것을 확인할 수 있다. 또한, 취약한 프로바이더가 TrackUserContentProvider임을 알 수 있다.

<provider
    android:name=".TrackUserContentProvider"
    android:authorities="com.android.insecurebankv2.TrackUserContentProvider"
    android:exported="true" >
</provider>

Step 2) 데이터 확인

로그인 했던 결과가 출력되는 것으로 추측할 수 있고, 이를 통해 데이터를 조회할 수 있는 취약점이 존재하는 것을 알 수 있다.

# content query --uri [접근 가능 uri 주소]
content query --uri content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers

drozer

Step 1) 애플리케이션 취약점 확인

1개의 콘텐츠 프로바이더 취약점을 발견하였다.

Step 2) uri 확인

scanner.provider.finduris 모듈을 통해 접근 가능한 uri 목록을 확인하였다. 접근 가능한 항목이 2개 있지만 동일함을 알 수 있다.

run scanner.provider.finduris -a com.android.insecurebankv2

Step 3) 데이터 조회

jack 계정으로 로그인한 기록이 출력되는 것을 확인할 수 있다.

# run app.provider.query [접근 가능 uri 주소]
run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers

Step 4) SQL Injection 확인

projection 옵션은 컨텐츠 프로바이더에서 SQL Injection 공격에 사용되는 연산자로, 쿼리를 이용하여 데이터를 조회하였을 때 데이터 컬럼명이 반환된다. projection 옵션을 이용하여 싱글 쿼터(’)를 입력하였을 때, SQL 에러가 발생하였으므로, 해당 콘텐츠 프로바이더가 SQL Injection에 취약함을 알 수 있다

run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers --projection " ' "

Step 5) table 확인

안드로이드는 기본적으로 SQL Lite를 사용하므로 SQLITE_MASTER를 이용하여 table을 조회할 수 있다.

# run app.provider.query [접근 가능 uri 주소] --projection "[SQL 구문]"
run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers --projection "* from SQLITE_MASTER where type='table';--"

 

대응 방안

  • AndroidManifest.xml 프로바이더 항목의 exported=”true” 속성을 “false”로 변경한다.
반응형