Dolaylı intent saldırısı

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