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
- Manifest intent-filter öğesi
- Ayrıcalıklı İzin İzin Verilenler Listesi
- Niyetler ve niyet filtreleri
- Örtülü amaçlar için seçiciyi zorlama
- Yaygın gizli niyetler