OWASP kategorisi: MASVS-PLATFORM: Platform Etkileşimi
Genel Bakış
Dolaylı intent ele geçirme güvenlik açığı, bir uygulama intent ç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 amaçlanan uygulama yerine intent'i yakalamak için bir intent filtresi kaydetmesine olanak tanır.
Saldırganlar, niyet içeriğine bağlı olarak hassas bilgileri okuyabilir veya değiştirebilir ya da değiştirilebilir PendingIntent veya Binder gibi değiştirilebilir nesnelerle etkileşim kurabilir.
Dolaylı intent'i ele geçirmek, saldırganın saldırgan tarafından kontrol edilen bileşenleri başlatmak gibi rastgele işlemler gerçekleştirmesine de olanak tanıyabilir.
Etki
Hassas verileri işleyen dolaylı bir intent, WebView'u açmak için fazladan bir URL dizesinde oturum jetonu geçirirse uygun intent filtrelerini belirten tüm uygulamalar bu jetonu okuyabilir. Bu durum, cihazdaki düzgün şekilde yapılandırılmış herhangi bir uygulamanın amacı engellemesine ve içindeki hassas verileri okumasına olanak tanıyabilir. Böylece saldırganlar, kimliği tanımlayabilecek bilgiler veya oturum jetonları gibi verileri sızdırabilir.
Çözümler
Uygulama gerektirmediği sürece setPackage() işlevini çağırarak amaçları açık hale getirin. Bu, amacın yalnızca belirli bir bileşen (uygulama içi veya diğer uygulamalardan) tarafından yorumlanmasına olanak tanır ve güvenilmeyen uygulamaların amaçla birlikte gönderilen verileri engellemesini önler. Aşağıdaki snippet'te, bir amaçın 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ülü amaçları kullanmanız gerekiyorsa hassas bilgileri veya ifşa etmek istemediğiniz değiştirilebilir nesneleri atlayın. Bir uygulama, işlemi hangi uygulamanın çözeceği hakkında kesin bilgiye sahip olmadığında (ör. e-posta oluşturma, fotoğraf çekme vb.) örtülü amaçlar kullanılması gerekebilir.
Kaynaklar
- Manifest intent-filter öğesi
- Ayrıcalıklı İzinler İçin İzin Verilenler Listesi
- Niyetler ve niyet filtreleri
- Örtülü amaçlar için seçiciyi zorunlu kılma
- Sık karşılaşılan örtülü amaçlar