iOS Custom URI Handlers / Deeplinks / Custom Schemes

AWS hackleme becerilerini sıfırdan ileri seviyeye öğrenmek için htARTE (HackTricks AWS Kırmızı Takım Uzmanı)'ı öğrenin!

HackTricks'ı desteklemenin diğer yolları:

Bu, https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/ adresindeki ilgili bilgilerin bir özetidir.

Temel Bilgiler

Özel URL şemaları, uygulamaların özel bir protokol kullanarak iletişim kurmasını sağlar ve ayrıntıları Apple Geliştirici Belgelerinde açıklanmıştır. Bu şemalar, uygulama tarafından bildirilmeli ve ardından bu şemalara uygun gelen URL'leri işlemlemelidir. Bu vektör aracılığıyla gerçekleşebilecek saldırıları önlemek için tüm URL parametrelerini doğrulamak ve hatalı URL'leri reddetmek önemlidir.

Örneğin, myapp://hostname?data=123876123 URI'si belirli bir uygulama eylemini çağırır. Skype Mobile uygulamasında bir zafiyet, skype:// protokolü aracılığıyla izin verilmeyen çağrı eylemlerine izin veriyordu. Kayıtlı şemalar, uygulamanın Info.plist dosyasının CFBundleURLTypes bölümünde bulunabilir. Kötü niyetli uygulamalar, hassas bilgileri ele geçirmek için URI'leri yeniden kaydederek bunu istismar edebilir.

Uygulama Sorgu Şemalarının Kaydedilmesi

iOS 9.0'dan itibaren bir uygulamanın mevcut olup olmadığını kontrol etmek için canOpenURL: işlevi, URL şemalarının Info.plist dosyasının LSApplicationQueriesSchemes bölümünde bildirilmesini gerektirir. Bu, bir uygulamanın sorgulayabileceği şemaları 50 ile sınırlayarak gizliliği artırır ve uygulama numaralandırmasını engeller.

<key>LSApplicationQueriesSchemes</key>
<array>
<string>url_scheme1</string>
<string>url_scheme2</string>
</array>

URL İşleme ve Doğrulama Testi

Geliştiriciler, URL yolunun oluşturulması ve doğrulanması hakkında bilgi edinmek için kaynak koddaki belirli yöntemleri incelemelidir, örneğin application:didFinishLaunchingWithOptions: ve application:openURL:options:. Örneğin, Telegram, URL'leri açmak için çeşitli yöntemler kullanır:

func application(_ application: UIApplication, open url: URL, sourceApplication: String?) -> Bool {
self.openUrl(url: url)
return true
}

func application(_ application: UIApplication, open url: URL, sourceApplication: String?,
annotation: Any) -> Bool {
self.openUrl(url: url)
return true
}

func application(_ app: UIApplication, open url: URL,
options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
self.openUrl(url: url)
return true
}

func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
self.openUrl(url: url)
return true
}

Diğer Uygulamalara Yönelik URL İsteklerini Test Etme

openURL:options:completionHandler: gibi yöntemler, diğer uygulamalarla etkileşim için URL'leri açmak için önemlidir. Bu tür yöntemlerin uygulamanın kaynak kodunda kullanımını belirlemek, harici iletişimi anlamak için önemlidir.

Kullanımdan Kaldırılan Yöntemleri Test Etme

application:handleOpenURL: ve openURL: gibi URL açma işlemlerini yöneten kullanımdan kaldırılan yöntemler, güvenlikle ilgili sonuçları değerlendirmek için belirlenmeli ve incelenmelidir.

URL Şemalarını Fuzzing Yapma

URL şemalarını fuzzing yapmak, bellek bozulma hatalarını belirleyebilir. Frida gibi araçlar, değişen yüklerle URL'leri açarak çökme durumlarını izlemek için bu süreci otomatikleştirebilir. Bu, iGoat-Swift uygulamasındaki URL'lerin manipülasyonuyla örneklenir:

$ frida -U SpringBoard -l ios-url-scheme-fuzzing.js
[iPhone::SpringBoard]-> fuzz("iGoat", "iGoat://?contactNumber={0}&message={0}")
Watching for crashes from iGoat...
No logs were moved.
Opened URL: iGoat://?contactNumber=0&message=0

Referanslar

AWS hacklemeyi sıfırdan kahraman olmaya kadar öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

HackTricks'i desteklemenin diğer yolları:

Last updated