암시적 인텐트 도용

OWASP 카테고리: MASVS-PLATFORM: 플랫폼 상호작용

개요

암시적 인텐트 도용 취약점은 애플리케이션이 인텐트를 호출할 때 정규화된 구성요소 클래스 이름 또는 패키지를 지정하지 않으면 발생합니다. 이렇게 되면 악성 애플리케이션이 의도된 애플리케이션 대신 인텐트 필터를 등록하여 인텐트를 가로챌 수 있습니다.

인텐트 콘텐츠에 따라 공격자는 민감한 정보를 읽거나 변경 가능한 PendingIntents 또는 바인더와 같은 변경 가능한 객체와 상호작용할 수 있습니다.

영향

암시적 인텐트를 도용하면 공격자가 인텐트의 콘텐츠를 읽거나 수정할 수 있을 뿐만 아니라 인텐트를 가로채 작업을 실행할 수도 있습니다. 이로 인해 민감한 정보/데이터 유출 또는 공격자가 제어하는 구성요소 실행과 같은 결과가 발생할 수 있습니다.

완화 조치

다음 코드 스니펫과 같이 setPackage()를 호출하여 인텐트를 명시적으로 만듭니다.

Kotlin

val intent = Intent("android.intent.action.CREATE_DOCUMENT").apply {
    addCategory("android.intent.category.OPENABLE")
    setPackage("com.some.packagename")
    setType("*/*")
    putExtra("android.intent.extra.LOCAL_ONLY", true)
    putExtra("android.intent.extra.TITLE", "Some Title")
}

startActivity(intent)

Java

Intent intent = new Intent("android.intent.action.CREATE_DOCUMENT");
intent.addCategory("android.intent.category.OPENABLE");

intent.setPackage("com.some.packagename");

intent.setType("*/*");
intent.putExtra("android.intent.extra.LOCAL_ONLY", true);
intent.putExtra("android.intent.extra.TITLE", "Some Title");
startActivity(intent);

암시적 인텐트를 사용해야 하는 경우 노출하지 않으려는 민감한 정보나 변경 가능한 객체를 생략합니다. 앱이 작업(예: 이메일 작성, 사진 촬영 등)을 해결할 앱이 무엇인지 정확하게 알지 못하는 경우 암시적 인텐트를 사용해야 할 수 있습니다.

리소스