Translated ['src/mobile-pentesting/ios-pentesting/ios-universal-links.md

This commit is contained in:
Translator 2025-07-17 14:10:14 +00:00
parent 580c5c0576
commit 85e1cc0d2b

View File

@ -4,13 +4,13 @@
## Introduction
यूनिवर्सल लिंक उपयोगकर्ताओं को **सहज रीडायरेक्शन** अनुभव प्रदान करते हैं, जो सीधे ऐप में सामग्री खोलते हैं, सफारी रीडायरेक्शन की आवश्यकता को बायपास करते हैं। ये लिंक **विशिष्ट** और सुरक्षित होते हैं, क्योंकि इन्हें अन्य ऐप्स द्वारा दावा नहीं किया जा सकता। यह सुनिश्चित करने के लिए, वेबसाइट की रूट डायरेक्टरी में `apple-app-site-association` JSON फ़ाइल होस्ट की जाती है, जो वेबसाइट और ऐप के बीच एक सत्यापित लिंक स्थापित करती है। यदि ऐप स्थापित नहीं है, तो सफारी उपयोगकर्ता को वेबपेज पर निर्देशित करेगी, ऐप की उपस्थिति बनाए रखते हुए।
यूनिवर्सल लिंक उपयोगकर्ताओं को **सहज रीडायरेक्शन** अनुभव प्रदान करते हैं, जो सीधे ऐप में सामग्री खोलते हैं, सफारी रीडायरेक्शन की आवश्यकता को बायपास करते हैं। ये लिंक **विशिष्ट** और सुरक्षित होते हैं, क्योंकि इन्हें अन्य ऐप्स द्वारा दावा नहीं किया जा सकता। यह सुनिश्चित किया जाता है कि वेबसाइट की रूट डायरेक्टरी में `apple-app-site-association` JSON फ़ाइल हो, जो वेबसाइट और ऐप के बीच एक सत्यापन योग्य लिंक स्थापित करती है। यदि ऐप स्थापित नहीं है, तो सफारी उपयोगकर्ता को वेबपेज पर ले जाएगी, ऐप की उपस्थिति बनाए रखते हुए।
पेनट्रेशन टेस्टर्स के लिए, `apple-app-site-association` फ़ाइल विशेष रुचि की होती है क्योंकि यह **संवेदनशील पथों** को प्रकट कर सकती है, संभावित रूप से उन पथों को शामिल करते हुए जो अप्रकाशित सुविधाओं से संबंधित हैं।
पेनिट्रेशन टेस्टर्स के लिए, `apple-app-site-association` फ़ाइल विशेष रुचि की होती है क्योंकि यह **संवेदनशील पथों** को प्रकट कर सकती है, संभावित रूप से उन पथों को शामिल करते हुए जो अप्रकाशित सुविधाओं से संबंधित हैं।
### **Analyzing the Associated Domains Entitlement**
डेवलपर्स यूनिवर्सल लिंक को सक्षम करते हैं **Associated Domains** को Xcode के Capabilities टैब में कॉन्फ़िगर करके या `.entitlements` फ़ाइल का निरीक्षण करके। प्रत्येक डोमेन `applinks:` के साथ प्रारंभ होता है। उदाहरण के लिए, टेलीग्राम की कॉन्फ़िगरेशन इस प्रकार दिखाई दे सकती है:
डेवलपर्स यूनिवर्सल लिंक को सक्षम करते हैं **Associated Domains** को Xcode के Capabilities टैब में कॉन्फ़िगर करके या `.entitlements` फ़ाइल की जांच करके। प्रत्येक डोमेन `applinks:` के साथ प्रारंभ होता है। उदाहरण के लिए, टेलीग्राम की कॉन्फ़िगरेशन इस प्रकार हो सकती है:
```xml
<key>com.apple.developer.associated-domains</key>
<array>
@ -18,21 +18,33 @@
<string>applinks:t.me</string>
</array>
```
अधिक व्यापक अंतर्दृष्टि के लिए, [संरक्षित Apple Developer Documentation](https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW2) को देखें।
For more comprehensive insights, refer to the [archived Apple Developer Documentation](https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW2).
यदि संकलित एप्लिकेशन के साथ काम कर रहे हैं, तो [इस गाइड](extracting-entitlements-from-compiled-application.md) में वर्णित अनुसार अधिकार निकाले जा सकते हैं।
If working with a compiled application, entitlements can be extracted as outlined in [this guide](extracting-entitlements-from-compiled-application.md).
### **Apple App Site Association फ़ाइल प्राप्त करना**
`apple-app-site-association` फ़ाइल को अधिकारों में निर्दिष्ट डोमेन का उपयोग करके सर्वर से प्राप्त किया जाना चाहिए। सुनिश्चित करें कि फ़ाइल `https://<domain>/apple-app-site-association` पर सीधे HTTPS के माध्यम से सुलभ है। [Apple App Site Association (AASA) Validator](https://branch.io/resources/aasa-validator/) जैसे उपकरण इस प्रक्रिया में मदद कर सकते हैं।
`apple-app-site-association` फ़ाइल को सर्वर से उन डोमेन का उपयोग करके प्राप्त किया जाना चाहिए जो अधिकारों में निर्दिष्ट हैं। सुनिश्चित करें कि फ़ाइल HTTPS के माध्यम से सीधे `https://<domain>/apple-app-site-association` (या `/.well-known/apple-app-site-association`) पर सुलभ है। [Apple App Site Association (AASA) Validator](https://branch.io/resources/aasa-validator/) जैसे उपकरण इस प्रक्रिया में मदद कर सकते हैं।
> **macOS/Linux शेल से त्वरित गणना**
>
> ```bash
> # मान लेते हैं कि आपने अधिकारों को 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
> ```
### **ऐप में यूनिवर्सल लिंक को संभालना**
ऐप को यूनिवर्सल लिंक को सही ढंग से संभालने के लिए विशिष्ट विधियों को लागू करना चाहिए। देखने के लिए प्राथमिक विधि [`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application) है। यह महत्वपूर्ण है कि संभाले गए URLs का स्कीम HTTP या HTTPS हो, क्योंकि अन्य समर्थित नहीं होंगे।
ऐप को यूनिवर्सल लिंक को सही तरीके से संभालने के लिए विशिष्ट विधियों को लागू करना चाहिए। देखने के लिए प्राथमिक विधि [`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application) है। यह महत्वपूर्ण है कि संभाले गए URLs का स्कीम HTTP या HTTPS हो, क्योंकि अन्य का समर्थन नहीं किया जाएगा
#### **डेटा हैंडलर विधि का मान्यकरण**
जब एक यूनिवर्सल लिंक एक ऐप खोलता है, तो एक `NSUserActivity` ऑब्जेक्ट ऐप को URL के साथ पास किया जाता है। इस URL को संसाधित करने से पहले, इसे मान्य और स्वच्छ करना आवश्यक है ताकि सुरक्षा जोखिमों से बचा जा सके। यहाँ Swift में प्रक्रिया का एक उदाहरण है:
जब एक यूनिवर्सल लिंक एक ऐप खोलता है, तो एक `NSUserActivity` ऑब्जेक्ट ऐप को URL के साथ पास किया जाता है। इस URL को संसाधित करने से पहले, इसे मान्य और साफ करना आवश्यक है ताकि सुरक्षा जोखिमों से बचा जा सके। यहाँ Swift में प्रक्रिया का एक उदाहरण है:
```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 को सावधानी से पार्स और मान्य किया जाना चाहिए, विशेष रूप से यदि वे पैरामीटर शामिल करते हैं, संभावित स्पूफिंग या गलत डेटा के खिलाफ सुरक्षा के लिए। `NSURLComponents` API इस उद्देश्य के लिए उपयोगी है, जैसा कि नीचे दिखाया गया है:
URLs को सावधानीपूर्वक पार्स और मान्य किया जाना चाहिए, विशेष रूप से यदि उनमें पैरामीटर शामिल हैं, संभावित स्पूफिंग या गलत डेटा के खिलाफ सुरक्षा के लिए। `NSURLComponents` API इस उद्देश्य के लिए उपयोगी है, जैसा कि नीचे दिखाया गया है:
```swift
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
@ -70,15 +82,36 @@ return false
}
}
```
**परिश्रमी कॉन्फ़िगरेशन और मान्यता** के माध्यम से, डेवलपर्स यह सुनिश्चित कर सकते हैं कि यूनिवर्सल लिंक उपयोगकर्ता अनुभव को बढ़ाते हैं जबकि सुरक्षा और गोपनीयता मानकों को बनाए रखते हैं।
Through **diligent configuration and validation**, developers can ensure that universal links enhance user experience while maintaining security and privacy standards.
## सामान्य कमजोरियाँ और पेंटेस्टिंग जांचें
| # | कमजोरी | परीक्षण कैसे करें | शोषण / प्रभाव |
|---|----------|------------|-----------------------|
| 1 | **AASA फ़ाइल में अत्यधिक व्यापक `paths` / `components`** (जैसे `"/": "*"` या वाइल्डकार्ड जैसे `"/a/*"`)। | • डाउनलोड की गई AASA की जांच करें और `*`, ट्रेलिंग स्लैश, या `{"?": …}` नियमों की तलाश करें।<br>• उन अज्ञात संसाधनों को अनुरोध करने का प्रयास करें जो अभी भी नियम से मेल खाते हैं (`https://domain.com/a/evil?_p_dp=1`)। | यूनिवर्सल-लिंक हाईजैकिंग: एक दुर्भावनापूर्ण iOS ऐप जो उसी डोमेन को पंजीकृत करता है, उन सभी लिंक का दावा कर सकता है और फ़िशिंग UI प्रस्तुत कर सकता है। एक वास्तविक उदाहरण मई 2025 का Temu.com बग-बाउंटी रिपोर्ट है जहां एक हमलावर किसी भी `/a/*` पथ को अपने ऐप पर पुनर्निर्देशित कर सकता था। |
| 2 | **डीप-लिंक पथों की सर्वर-साइड मान्यता का अभाव।** | अनुमत पथों की पहचान करने के बाद, गैर-मौजूद संसाधनों के लिए `curl`/Burp अनुरोध जारी करें और HTTP स्थिति कोड देखें। `404` (जैसे 200/302) के अलावा कुछ भी संदिग्ध है। | एक हमलावर एक अनुमत पथ के पीछे मनमाना सामग्री होस्ट कर सकता है और इसे वैध डोमेन के माध्यम से सेवा कर सकता है, फ़िशिंग या सत्र-टोकन चोरी की सफलता दर बढ़ा सकता है। |
| 3 | **स्कीम/होस्ट व्हाइटलिस्टिंग के बिना ऐप-साइड URL हैंडलिंग** (CVE-2024-10474 Mozilla Focus < 132)। | धे `openURL:`/`open(_:options:)` स्क्रिप्ट ब्रि तल करें मनमने URLs अग्रेषि करते हैं | आंतरि पृष्ठ `myapp://` `https://` URLs स्मगल कर सकते हैं ब्रउज़र के URL-ब सुरक्ष ंच यप करते हैं, िससे धड़ अनपेक्षि िशेषि प्रप्त क्रिएँ हैं |
| 4 | **अधिकार में वाइल्डकार्ड उप-डोमेन का उपयोग** (`*.example.com`)। | अधिकारों में `*.` के लिए `grep` करें। | यदि कोई उप-डोमेन अधिग्रहित किया जाता है (जैसे कि एक अप्रयुक्त S3 बकेट के माध्यम से), तो हमलावर स्वचालित रूप से यूनिवर्सल लिंक बाइंडिंग प्राप्त कर लेता है। |
### त्वरित चेकलिस्ट
* [ ] अधिकार निकालें और हर `applinks:` प्रविष्टि को सूचीबद्ध करें।
* [ ] प्रत्येक प्रविष्टि के लिए AASA डाउनलोड करें और वाइल्डकार्ड के लिए ऑडिट करें।
* [ ] सुनिश्चित करें कि वेब सर्वर अनिर्धारित पथों के लिए **404** लौटाता है।
* [ ] बाइनरी में, पुष्टि करें कि **केवल** विश्वसनीय होस्ट/स्कीम को संभाला जाता है।
* [ ] यदि ऐप नए `components` सिंटैक्स (iOS 11+) का उपयोग करता है, तो क्वेरी-पैरामीटर नियमों (`{"?":{…}}`) को फज़ करें।
## उपकरण
- [GetUniversal.link](https://getuniversal.link/): आपके ऐप के यूनिवर्सल लिंक और AASA फ़ाइल के परीक्षण और प्रबंधन को सरल बनाने में मदद करता है। AASA फ़ाइल की अखंडता को सत्यापित करने के लिए बस अपने डोमेन को दर्ज करें या लिंक व्यवहार का आसानी से परीक्षण करने के लिए कस्टम डैशबोर्ड का उपयोग करें। यह उपकरण यह भी मदद करता है कि Apple आपकी AASA फ़ाइल को अगली बार कब अनुक्रमित करेगा।
- [GetUniversal.link](https://getuniversal.link/): आपके ऐप के यूनिवर्सल लिंक और AASA फ़ाइल के परीक्षण और प्रबंधन को सरल बनाने में मदद करता है। AASA फ़ाइल की अखंडता को सत्यापित करने के लिए बस अपना डोमेन दर्ज करें या लिंक व्यवहार का आसानी से परीक्षण करने के लिए कस्टम डैशबोर्ड का उपयोग करें। यह उपकरण आपको यह निर्धारित करने में भी मदद करता है कि Apple आपकी AASA फ़ाइल को अगली बार कब अनुक्रमित करेगा।
- [Knil](https://github.com/ethanhuang13/knil): ओपन-सोर्स iOS उपयोगिता जो हर यूनिवर्सल लिंक को सीधे डिवाइस पर लाने, पार्स करने और **टैप-टेस्ट** करने की अनुमति देती है।
- [universal-link-validator](https://github.com/urbangems/universal-link-validator): CLI / वेब वेलिडेटर जो सख्त AASA अनुपालन जांच करता है और खतरनाक वाइल्डकार्ड को उजागर करता है।
## संदर्भ
- [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}}