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
4bc44e43d0
commit
f273cd34d3
@ -4,13 +4,13 @@
|
||||
|
||||
## Introduction
|
||||
|
||||
Universal links hutoa **uzoefu wa uelekezaji usio na mshono** kwa watumiaji kwa kufungua moja kwa moja maudhui katika programu, bila ya kuhitaji uelekezaji wa Safari. Viungo hivi ni **vya kipekee** na salama, kwani haviwezi kudaiwa na programu nyingine. Hii inahakikishwa kwa kuhifadhi faili ya `apple-app-site-association` ya JSON katika saraka ya mizizi ya tovuti, ikianzisha kiungo kinachoweza kuthibitishwa kati ya tovuti na programu. Katika hali ambapo programu haijasanidiwa, Safari itachukua jukumu na kumwelekeza mtumiaji kwenye ukurasa wa wavuti, ikihifadhi uwepo wa programu.
|
||||
Universal links hutoa **mwelekeo usio na mshono** kwa watumiaji kwa kufungua moja kwa moja maudhui katika programu, bila ya kuhitaji mwelekeo wa Safari. Viungo hivi ni **vya kipekee** na salama, kwani haviwezi kudaiwa na programu nyingine. Hii inahakikishwa kwa kuhifadhi faili ya `apple-app-site-association` ya JSON katika saraka ya mizizi ya tovuti, ikianzisha kiungo kinachoweza kuthibitishwa kati ya tovuti na programu. Katika hali ambapo programu haijasanidiwa, Safari itachukua jukumu na kumwelekeza mtumiaji kwenye ukurasa wa wavuti, ikihifadhi uwepo wa programu.
|
||||
|
||||
Kwa wapimaji wa udukuzi, faili ya `apple-app-site-association` ni ya umuhimu maalum kwani inaweza kufichua **njia nyeti**, huenda ikijumuisha zile zinazohusiana na vipengele ambavyo havijachapishwa.
|
||||
Kwa wapimaji wa penetration, faili ya `apple-app-site-association` ni ya umuhimu maalum kwani inaweza kufichua **njia nyeti**, huenda ikijumuisha zile zinazohusiana na vipengele ambavyo havijachapishwa.
|
||||
|
||||
### **Kuchambua Haki za Domains Zinazohusishwa**
|
||||
|
||||
Wakuu wa programu wanawezesha Universal Links kwa kuunda **Domains Zinazohusishwa** katika tab ya Uwezo ya Xcode au kwa kukagua faili ya `.entitlements`. Kila domain inaanzishwa na `applinks:`. Kwa mfano, usanidi wa Telegram unaweza kuonekana kama ifuatavyo:
|
||||
Wakuu wa programu wanawezesha Universal Links kwa kusanidi **Domains Zinazohusishwa** katika tab ya Uwezo ya Xcode au kwa kukagua faili ya `.entitlements`. Kila domain ina anwani ya `applinks:`. Kwa mfano, usanidi wa Telegram unaweza kuonekana kama ifuatavyo:
|
||||
```xml
|
||||
<key>com.apple.developer.associated-domains</key>
|
||||
<array>
|
||||
@ -18,21 +18,33 @@ Wakuu wa programu wanawezesha Universal Links kwa kuunda **Domains Zinazohusishw
|
||||
<string>applinks:t.me</string>
|
||||
</array>
|
||||
```
|
||||
Kwa maelezo zaidi ya kina, rejelea [archived Apple Developer Documentation](https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW2).
|
||||
Kwa maelezo zaidi, rejelea [archived Apple Developer Documentation](https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW2).
|
||||
|
||||
Ikiwa unafanya kazi na programu iliyokusanywa, ruhusa zinaweza kutolewa kama ilivyoelezwa katika [hiki kiongozi](extracting-entitlements-from-compiled-application.md).
|
||||
|
||||
### **Kurejesha Faili la Apple App Site Association**
|
||||
### **Kurejesha Faili ya Muungano wa Tovuti ya Apple App**
|
||||
|
||||
Faili la `apple-app-site-association` linapaswa kurejeshwa kutoka kwa seva kwa kutumia maeneo yaliyoainishwa katika ruhusa. Hakikisha faili inapatikana kupitia HTTPS moja kwa moja kwenye `https://<domain>/apple-app-site-association`. Zana kama [Apple App Site Association (AASA) Validator](https://branch.io/resources/aasa-validator/) zinaweza kusaidia katika mchakato huu.
|
||||
Faili ya `apple-app-site-association` inapaswa kurejeshwa kutoka kwa seva kwa kutumia maeneo yaliyoainishwa katika ruhusa. Hakikisha faili inapatikana kupitia HTTPS moja kwa moja kwenye `https://<domain>/apple-app-site-association` (au `/.well-known/apple-app-site-association`). Zana kama [Apple App Site Association (AASA) Validator](https://branch.io/resources/aasa-validator/) zinaweza kusaidia katika mchakato huu.
|
||||
|
||||
### **Kushughulikia Universal Links katika Programu**
|
||||
> **Uhesabuji wa haraka kutoka kwa shell ya macOS/Linux**
|
||||
>
|
||||
> ```bash
|
||||
> # tukichukulia umepata ruhusa kwenye ent.xml
|
||||
> doms=$(plutil -extract com.apple.developer.associated-domains xml1 -o - ent.xml | \
|
||||
> grep -oE 'applinks:[^<]+' | cut -d':' -f2)
|
||||
> for d in $doms; do
|
||||
> echo "[+] Fetching AASA for $d";
|
||||
> curl -sk "https://$d/.well-known/apple-app-site-association" | jq '.'
|
||||
> done
|
||||
> ```
|
||||
|
||||
Programu lazima itekeleze mbinu maalum ili kushughulikia universal links kwa usahihi. Mbinu kuu ya kutafuta ni [`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application). Ni muhimu kwamba mpango wa URLs zinazoshughulikiwa ni HTTP au HTTPS, kwani zingine hazitasaidiwa.
|
||||
### **Kushughulikia Viungo vya Ulimwengu katika Programu**
|
||||
|
||||
Programu lazima itekeleze mbinu maalum ili kushughulikia viungo vya ulimwengu kwa usahihi. Mbinu kuu ya kutafuta ni [`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application). Ni muhimu kwamba mpango wa URLs zinazoshughulikiwa ni HTTP au HTTPS, kwani zingine hazitasaidiwa.
|
||||
|
||||
#### **Kuthibitisha Mbinu ya Kushughulikia Data**
|
||||
|
||||
Wakati link ya universal inafungua programu, kitu cha `NSUserActivity` kinapitishwa kwa programu na URL. Kabla ya kushughulikia URL hii, ni muhimu kuthibitisha na kusafisha ili kuzuia hatari za usalama. Hapa kuna mfano katika Swift unaoonyesha mchakato:
|
||||
Wakati kiungo cha ulimwengu kinapofungua programu, kitu cha `NSUserActivity` kinapitishwa kwa programu na URL. Kabla ya kushughulikia URL hii, ni muhimu kuthibitisha na kusafisha ili kuzuia hatari za usalama. Hapa kuna mfano katika Swift unaoonyesha mchakato:
|
||||
```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
|
||||
}
|
||||
```
|
||||
URLs zinapaswa kuchambuliwa na kuthibitishwa kwa makini, hasa ikiwa zinajumuisha vigezo, ili kujilinda dhidi ya uwezekano wa udanganyifu au data isiyo sahihi. API ya `NSURLComponents` ni muhimu kwa ajili hii, kama inavyoonyeshwa hapa chini:
|
||||
URLs zinapaswa kuchambuliwa na kuthibitishwa kwa makini, hasa ikiwa zinajumuisha vigezo, ili kujilinda dhidi ya uwezekano wa udanganyifu au data isiyo sahihi. API ya `NSURLComponents` ni ya manufaa kwa ajili hii, kama inavyoonyeshwa hapa chini:
|
||||
```swift
|
||||
func application(_ application: UIApplication,
|
||||
continue userActivity: NSUserActivity,
|
||||
@ -72,13 +84,34 @@ return false
|
||||
```
|
||||
Kupitia **mipangilio na uthibitisho wa makini**, waendelezaji wanaweza kuhakikisha kwamba viungo vya ulimwengu vinaboresha uzoefu wa mtumiaji huku wakihifadhi viwango vya usalama na faragha.
|
||||
|
||||
## Ukatili wa Kawaida & Ukaguzi wa Pentesting
|
||||
|
||||
| # | Ukatili | Jinsi ya kupima | Utekelezaji / Athari |
|
||||
|---|----------|------------|-----------------------|
|
||||
| 1 | **`paths` / `components` za kupita kiasi** katika faili la AASA (mfano `"/": "*"` au wildcards kama `"/a/*"`). | • Kagua AASA iliyopakuliwa na uangalie `*`, slashes za mwisho, au sheria za `{"?": …}`.<br>• Jaribu kuomba rasilimali zisizojulikana ambazo bado zinakidhi sheria hiyo (`https://domain.com/a/evil?_p_dp=1`). | Utekwaji wa kiungo cha ulimwengu: programu mbaya ya iOS inayosajili kikoa sawa inaweza kudai viungo vyote hivyo na kuwasilisha UI ya udukuzi. Mfano halisi ni ripoti ya bug-bounty ya Temu.com ya Mei 2025 ambapo mshambuliaji angeweza kuelekeza njia yoyote ya `/a/*` kwa programu yao. |
|
||||
| 2 | **Uthibitisho wa upande wa seva ulio missing** wa njia za deep-link. | Baada ya kubaini njia zinazoruhusiwa, tolea maombi ya `curl`/Burp kwa rasilimali zisizopo na uangalie misimbo ya hali ya HTTP. Kila kitu kingine isipokuwa `404` (mfano 200/302) ni cha kutia shaka. | Mshambuliaji anaweza kuhifadhi maudhui yasiyo na mipaka nyuma ya njia inayoruhusiwa na kuyatoa kupitia kikoa halali, kuongeza kiwango cha mafanikio cha udukuzi au wizi wa tokeni za kikao. |
|
||||
| 3 | **Kushughulikia URL upande wa programu bila orodha ya mikoa/jeshi** (CVE-2024-10474 – Mozilla Focus < 132). | Tafuta wito wa moja kwa moja wa `openURL:`/`open(_:options:)` au madaraja ya JavaScript yanayopitisha URL zisizokuwa na mipaka. | Kurasa za ndani zinaweza kupeleka `myapp://` au `https://` URLs ambazo zinapita ukaguzi wa usalama wa URL-bar wa kivinjari, na kusababisha udanganyifu au vitendo vya kibali visivyokusudiwa. |
|
||||
| 4 | **Matumizi ya sub-domains za wildcard** (`*.example.com`) katika haki. | `grep` kwa `*.` katika haki. | Ikiwa sub-domain yoyote itachukuliwa (mfano kupitia S3 bucket isiyotumika), mshambuliaji moja kwa moja anapata uhusiano wa Kiungo cha Ulimwengu. |
|
||||
|
||||
### Orodha ya Haraka
|
||||
|
||||
* [ ] Toa haki na uhesabu kila kipengee cha `applinks:`.
|
||||
* [ ] Pakua AASA kwa kila kipengee na ukaguzi wa wildcards.
|
||||
* [ ] Thibitisha kwamba seva ya wavuti inarudisha **404** kwa njia zisizofafanuliwa.
|
||||
* [ ] Katika binary, thibitisha kwamba **tu** mikoa/schemas zinazotambulika zinashughulikiwa.
|
||||
* [ ] Ikiwa programu inatumia sintaksia mpya ya `components` (iOS 11+), fuzz sheria za parameter za swali (`{"?":{…}}`).
|
||||
|
||||
## Zana
|
||||
|
||||
- [GetUniversal.link](https://getuniversal.link/): Inasaidia kurahisisha upimaji na usimamizi wa Viungo vya Ulimwengu wa programu yako na faili ya AASA. Ingiza tu kikoa chako ili kuthibitisha uhalali wa faili ya AASA au tumia dashibodi maalum ili kupima tabia ya kiungo kwa urahisi. Zana hii pia inakusaidia kubaini wakati Apple itakapofanya utafutaji wa faili yako ya AASA.
|
||||
- [GetUniversal.link](https://getuniversal.link/): Inasaidia kurahisisha upimaji na usimamizi wa Viungo vya Ulimwengu vya programu yako na faili la AASA. Ingiza tu kikoa chako ili kuthibitisha uhalali wa faili la AASA au tumia dashibodi maalum kupima tabia ya kiungo kwa urahisi. Zana hii pia inakusaidia kubaini wakati Apple itakapofanya index faili yako ya AASA.
|
||||
- [Knil](https://github.com/ethanhuang13/knil): Zana ya iOS ya chanzo wazi inayopata, inachambua na inakuwezesha **kupima** kila Kiungo cha Ulimwengu kilichotangazwa na kikoa moja kwa moja kwenye kifaa.
|
||||
- [universal-link-validator](https://github.com/urbangems/universal-link-validator): CLI / validator ya wavuti inayofanya ukaguzi mkali wa ufanano wa AASA na kuonyesha wildcards hatari.
|
||||
|
||||
## Marejeleo
|
||||
|
||||
- [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