Dolaylı intent saldırısı

OWASP kategorisi: MASVS-PLATFORM: Platform Etkileşimi

Genel Bakış

implicit intent saldırısı güvenlik açığı, bir uygulama niyeti çağırırken tam nitelikli bileşen sınıf adı veya paket belirtmediğinde ortaya çıkar. Bu, kötü amaçlı bir uygulamanın istenen uygulama yerine amacı yakalamak için bir intent filtresi kaydetmesine olanak tanır.

Saldırıcılar, intent içeriğine bağlı olarak hassas bilgileri okuyabilir veya değiştirebilir ya da değişken PendingIntents veya Binders gibi değişken nesnelerle etkileşim kurabilir.

Bir örtülü intent'in ele geçirilmesi, saldırganın saldırgan tarafından kontrol edilen bileşenleri başlatma gibi keyfi işlemler gerçekleştirmesine de olanak tanıyabilir.

Etki

Hassas verileri işleyen bir örtülü intent, WebView açmak için ek bir URL dizesi içinde oturum jetonu iletirse uygun intent filtrelerini belirten tüm uygulamalar bu jetonu okuyabilir. Bu durum, cihazdaki düzgün yapılandırılmış tüm uygulamaların intent'i durdurmasına ve içindeki hassas verileri okumasına olanak tanıyabilir. Bu da saldırganların kimliği tanımlayabilecek bilgiler (PII) veya oturum jetonları gibi verileri sızdırmasına olanak tanır.

Çözümler

Uygulama gerektirmediği sürece setPackage()'ü çağırarak amaçları açıkça belirtin. Bu, intent'in yalnızca belirli bir bileşen (uygulama içi veya diğer uygulamalardan) tarafından yorumlanmasına olanak tanır. Böylece, güvenilmeyen uygulamaların intent ile birlikte gönderilen verileri engellemesi önlenir. Aşağıdaki snippet'te, bir intent'in nasıl açık hale getirileceği gösterilmektedir:

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

Örtük intent'ler kullanmanız gerekiyorsa göstermek istemediğiniz hassas bilgileri veya değişken nesneleri çıkarın. Bir uygulama, işlemi (ör. e-posta oluşturma, fotoğraf çekme vb.) hangi uygulamanın çözeceği hakkında tam bilgiye sahip olmadığında, örtülü intent'lerin kullanılması gerekebilir.

Kaynaklar