隱含意圖盜用

OWASP 類別:MASVS-PLATFORM:平台互動

總覽

叫用意圖時,如果應用程式並未指定完整的元件類別名稱或套件,就會產生隱含意圖遭盜用的安全漏洞。這會讓惡意應用程式取代預期的應用程式,藉由註冊意圖篩選器的方式攔截意圖。

視意圖內容而定,攻擊者可能會讀取機密資訊,或是與可變動的物件互動,例如可變動PendingIntent 或 Binder。

影響

盜用隱含意圖後,攻擊者就能讀取或修改意圖內容,並且攔截要執行動作的意圖。這可能會導致像是機密資訊/資料外洩的後果,或啟動受攻擊者控制的元件。

因應措施

呼叫 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);

如果您需要使用隱含意圖,請刪除所有不應公開的機密資訊或可變動物件。如果應用程式無法確切瞭解將由哪個應用程式執行動作 (例如撰寫電子郵件、拍照等),就可能需要使用隱含意圖。

資源