mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/mobile-pentesting/ios-pentesting/ios-universal-links.md
This commit is contained in:
parent
0b07c226ad
commit
599a32102c
@ -2,15 +2,15 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Giriş
|
||||
## 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, potansiyel olarak yayımlanmamış özelliklerle ilgili olanları da içerebilir.
|
||||
Penetrasyon test uzmanları için `apple-app-site-association` dosyası, **hassas yolları** ortaya çıkarabileceği için özellikle ilgi çekicidir; bu yollar, yayımlanmamış özelliklerle ilgili olanları da içerebilir.
|
||||
|
||||
### **İlişkili Alanlar Yetkisini Analiz Etme**
|
||||
### **Associated Domains 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:
|
||||
Geliştiriciler, Xcode'un Yetenekler sekmesinde **Associated Domains**'i 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:
|
||||
```xml
|
||||
<key>com.apple.developer.associated-domains</key>
|
||||
<array>
|
||||
@ -24,15 +24,27 @@ Derlenmiş bir uygulama ile çalışıyorsanız, haklar [bu kılavuzda](extracti
|
||||
|
||||
### **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` adresinden HTTPS üzerinden erişilebilir olduğundan emin olun. [Apple Uygulama Site İlişkilendirme (AASA) Doğrulayıcı](https://branch.io/resources/aasa-validator/) gibi araçlar bu süreçte yardımcı olabilir.
|
||||
`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ı](https://branch.io/resources/aasa-validator/) gibi araçlar bu süreçte yardımcı olabilir.
|
||||
|
||||
### **Uygulamada Evrensel Bağlantıları Yönetme**
|
||||
> **macOS/Linux kabuğundan hızlı numaralandırma**
|
||||
>
|
||||
> ```bash
|
||||
> # 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
|
||||
> ```
|
||||
|
||||
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:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application) yöntemidir. İşlenen URL'lerin şemasının HTTP veya HTTPS olması kritik öneme sahiptir, diğerleri desteklenmeyecektir.
|
||||
### **Uygulamada Universal Links Yönetimi**
|
||||
|
||||
Uygulama, universal linkleri doğru bir şekilde yönetmek için belirli yöntemleri uygulamalıdır. Bakılması gereken ana yöntem [`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application) 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:
|
||||
Bir universal link 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:
|
||||
```swift
|
||||
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
|
||||
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
|
||||
@ -44,7 +56,7 @@ application.open(url, options: [:], completionHandler: nil)
|
||||
return true
|
||||
}
|
||||
```
|
||||
URL'ler dikkatlice ayrıştırılmalı ve doğrulanmalıdır, özellikle parametreler içeriyorsa, potansiyel sahtecilik veya hatalı verilerden korunmak için. Bu amaçla `NSURLComponents` API'si faydalıdır, aşağıda gösterildiği gibi:
|
||||
URL'ler dikkatlice ayrıştırılmalı ve doğrulanmalıdır, özellikle parametreler içeriyorlarsa, potansiyel sahtecilik veya hatalı verilerden korunmak için. Aşağıda gösterildiği gibi, `NSURLComponents` API'si bu amaç için faydalıdır:
|
||||
```swift
|
||||
func application(_ application: UIApplication,
|
||||
continue userActivity: NSUserActivity,
|
||||
@ -70,15 +82,36 @@ 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ğlayabilirler.
|
||||
**Titiz yapılandırma ve doğrulama** sayesinde, geliştiriciler evrensel bağlantıların kullanıcı deneyimini artırmasını sağlarken güvenlik ve gizlilik standartlarını koruyabilirler.
|
||||
|
||||
## 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 dosyasını inceleyin ve `*`, sonlandırıcı eğik çizgiler veya `{"?": …}` kurallarını arayın.<br>• 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 kimlik avı 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 kimlik avı veya oturum belirteci çalma başarı oranını artırabilir. |
|
||||
| 3 | **Şema/host beyaz listelemesi olmadan 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 atlayarak `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 dosyasını 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 hostlar/şemaların işlendiğini onaylayın.
|
||||
* [ ] Uygulama daha yeni `components` sözdizimini kullanıyorsa (iOS 11+), sorgu parametre kurallarını test edin (`{"?":{…}}`).
|
||||
|
||||
## Araçlar
|
||||
|
||||
- [GetUniversal.link](https://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 yalnızca 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 alacağını belirlemenize de yardımcı olur.
|
||||
- [GetUniversal.link](https://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](https://github.com/ethanhuang13/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ı bir iOS aracıdır.
|
||||
- [universal-link-validator](https://github.com/urbangems/universal-link-validator): Sıkı AASA uyumluluk kontrolleri gerçekleştiren ve tehlikeli joker karakterleri vurgulayan CLI / web doğrulayıcıdır.
|
||||
|
||||
## Referanslar
|
||||
|
||||
- [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0070/#static-analysis](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://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://medium.com/@m.habibgpi/universal-link-hijacking-via-misconfigured-aasa-file-on-temu-com-eadfcb745e4e)
|
||||
- [https://nvd.nist.gov/vuln/detail/CVE-2024-10474](https://nvd.nist.gov/vuln/detail/CVE-2024-10474)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user