iOS Universal Links
Reading time: 6 minutes
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Introduction
Evrensel bağlantılar, kullanıcılar için kesintisiz bir yönlendirme deneyimi sunarak içeriği doğrudan uygulamada açar ve Safari yönlendirmesi gereksinimini ortadan kaldırır. Bu bağlantılar benzersiz ve güvenlidir, çünkü diğer uygulamalar tarafından talep edilemezler. Bu, web sitesinin kök dizininde bir apple-app-site-association
JSON dosyası barındırarak sağlanır ve web sitesi ile uygulama arasında doğrulanabilir bir bağlantı kurar. Uygulama yüklü değilse, Safari devralır ve kullanıcıyı web sayfasına yönlendirir, uygulamanın varlığını korur.
Penetrasyon test uzmanları için apple-app-site-association
dosyası özellikle ilgi çekicidir çünkü hassas yolları açığa çıkarabilir, bu yollar henüz yayımlanmamış özelliklerle ilgili olabilir.
İlişkili Alanlar Yetkisini Analiz Etme
Geliştiriciler, Xcode'un Yetenekler sekmesinde İlişkili Alanlar'ı yapılandırarak veya .entitlements
dosyasını inceleyerek Evrensel Bağlantıları etkinleştirir. Her alan applinks:
ile başlar. Örneğin, Telegram'ın yapılandırması şu şekilde görünebilir:
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:telegram.me</string>
<string>applinks:t.me</string>
</array>
Daha kapsamlı bilgiler için arşivlenmiş Apple Geliştirici Dokümantasyonu sayfasına başvurun.
Derlenmiş bir uygulama ile çalışıyorsanız, haklar bu kılavuzda açıklandığı gibi çıkarılabilir.
Apple Uygulama Site İlişkilendirme Dosyasını Alma
apple-app-site-association
dosyası, haklarda belirtilen alan adları kullanılarak sunucudan alınmalıdır. Dosyanın https://<domain>/apple-app-site-association
(veya /.well-known/apple-app-site-association
) üzerinden HTTPS ile doğrudan erişilebilir olduğundan emin olun. Apple Uygulama Site İlişkilendirme (AASA) Doğrulayıcı gibi araçlar bu süreçte yardımcı olabilir.
macOS/Linux kabuğundan hızlı numaralandırma
# hakları ent.xml dosyasına çıkardığınızı varsayıyoruz doms=$(plutil -extract com.apple.developer.associated-domains xml1 -o - ent.xml | \ grep -oE 'applinks:[^<]+' | cut -d':' -f2) for d in $doms; do echo "[+] $d için AASA alınıyor"; curl -sk "https://$d/.well-known/apple-app-site-association" | jq '.' done
Uygulamada Evrensel Bağlantıları Yönetme
Uygulama, evrensel bağlantıları doğru bir şekilde yönetmek için belirli yöntemleri uygulamalıdır. Bakılması gereken ana yöntem application:continueUserActivity:restorationHandler:
yöntemidir. İşlenen URL'lerin şemasının HTTP veya HTTPS olması kritik öneme sahiptir, diğerleri desteklenmeyecektir.
Veri İşleyici Yöntemini Doğrulama
Bir evrensel bağlantı bir uygulamayı açtığında, uygulamaya URL ile birlikte bir NSUserActivity
nesnesi iletilir. Bu URL'yi işlemeye başlamadan önce, güvenlik risklerini önlemek için doğrulamak ve temizlemek önemlidir. İşte süreci gösteren bir Swift örneği:
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
// Check for web browsing activity and valid URL
if userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL {
application.open(url, options: [:], completionHandler: nil)
}
return true
}
URL'ler dikkatlice ayrıştırılmalı ve doğrulanmalıdır, özellikle parametreler içeriyorlarsa, potansiyel sahtecilik veya hatalı verilerden korunmak için. Bu amaçla NSURLComponents
API'si aşağıda gösterildiği gibi faydalıdır:
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let incomingURL = userActivity.webpageURL,
let components = NSURLComponents(url: incomingURL, resolvingAgainstBaseURL: true),
let path = components.path,
let params = components.queryItems else {
return false
}
if let albumName = params.first(where: { $0.name == "albumname" })?.value,
let photoIndex = params.first(where: { $0.name == "index" })?.value {
// Process the URL with album name and photo index
return true
} else {
// Handle invalid or missing parameters
return false
}
}
Titiz yapılandırma ve doğrulama sayesinde, geliştiriciler evrensel bağlantıların kullanıcı deneyimini artırırken güvenlik ve gizlilik standartlarını korumasını sağlayabilir.
Yaygın Zayıflıklar & Pentesting Kontrolleri
# | Zayıflık | Nasıl test edilir | Sömürü / Etki |
---|---|---|---|
1 | AASA dosyasında çok geniş paths / components (örneğin "/": "*" veya "/a/* gibi joker karakterler). | • İndirilen AASA'yı inceleyin ve * , son eğik çizgiler veya {"?": …} kurallarını arayın.• Hala kuralı karşılayan bilinmeyen kaynakları talep etmeyi deneyin ( https://domain.com/a/evil?_p_dp=1 ). | Evrensel bağlantı kaçırma: aynı alan adını kaydeden kötü niyetli bir iOS uygulaması, bu bağlantıların hepsini talep edebilir ve oltalama arayüzü sunabilir. Gerçek bir örnek, Mayıs 2025'teki Temu.com hata ödül raporudur; burada bir saldırgan herhangi bir /a/* yolunu kendi uygulamasına yönlendirebilmiştir. |
2 | Derin bağlantı yollarının sunucu tarafında doğrulanmaması. | İzin verilen yolları belirledikten sonra, var olmayan kaynaklara curl /Burp istekleri gönderin ve HTTP durum kodlarını gözlemleyin. 404 dışındaki herhangi bir şey (örneğin 200/302) şüphelidir. | Bir saldırgan, izin verilen bir yolun arkasında keyfi içerik barındırabilir ve bunu meşru alan adı aracılığıyla sunarak oltalama veya oturum belirteci çalma başarı oranını artırabilir. |
3 | Şema/host beyaz listesiz uygulama tarafı URL işleme (CVE-2024-10474 – Mozilla Focus < 132). | Doğrudan openURL: /open(_:options:) çağrılarını veya keyfi URL'leri ileten JavaScript köprülerini arayın. | Dahili sayfalar, tarayıcının URL çubuğu güvenlik kontrollerini atlatan myapp:// veya https:// URL'lerini gizleyebilir, bu da sahtecilik veya istenmeyen ayrıcalıklı eylemlere yol açabilir. |
4 | Yetkilendirmede joker alt alanların kullanımı (*.example.com ). | Yetkilendirmelerde *. için grep yapın. | Herhangi bir alt alan ele geçirilirse (örneğin kullanılmayan bir S3 kovası aracılığıyla), saldırgan otomatik olarak Evrensel Bağlantı bağlamasını kazanır. |
Hızlı Kontrol Listesi
-
Yetkilendirmeleri çıkarın ve her
applinks:
girişini sıralayın. - Her giriş için AASA'yı indirin ve joker karakterler için denetleyin.
- Web sunucusunun tanımsız yollar için 404 döndürdüğünü doğrulayın.
- İkili dosyada, yalnızca güvenilir ana bilgisayarların/şemaların işlendiğini onaylayın.
-
Uygulama daha yeni
components
sözdizimini kullanıyorsa (iOS 11+), sorgu parametre kurallarını karıştırın ({"?":{…}}
).
Araçlar
- GetUniversal.link: Uygulamanızın Evrensel Bağlantılarını ve AASA dosyasını test etmeyi ve yönetmeyi basitleştirmeye yardımcı olur. AASA dosyası bütünlüğünü doğrulamak için alan adınızı girin veya bağlantı davranışını kolayca test etmek için özel kontrol panelini kullanın. Bu araç ayrıca Apple'ın AASA dosyanızı bir sonraki ne zaman dizine ekleyeceğini belirlemenize yardımcı olur.
- Knil: Bir alan adı tarafından bildirilen her Evrensel Bağlantıyı doğrudan cihazda tap-test yapmanıza olanak tanıyan açık kaynaklı iOS aracı.
- universal-link-validator: Sıkı AASA uyumluluk kontrolleri gerçekleştiren ve tehlikeli joker karakterleri vurgulayan CLI / web doğrulayıcı.
Referanslar
- https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0070/#static-analysis
- https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8
- https://medium.com/@m.habibgpi/universal-link-hijacking-via-misconfigured-aasa-file-on-temu-com-eadfcb745e4e
- https://nvd.nist.gov/vuln/detail/CVE-2024-10474
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.