iOS Universal Links

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

Introduction

यूनिवर्सल लिंक उपयोगकर्ताओं को सहज रीडायरेक्शन अनुभव प्रदान करते हैं, जो सीधे ऐप में सामग्री खोलते हैं, सफारी रीडायरेक्शन की आवश्यकता को बायपास करते हैं। ये लिंक विशिष्ट और सुरक्षित होते हैं, क्योंकि इन्हें अन्य ऐप्स द्वारा दावा नहीं किया जा सकता। यह सुनिश्चित किया जाता है कि वेबसाइट की रूट डायरेक्टरी में apple-app-site-association JSON फ़ाइल हो, जो वेबसाइट और ऐप के बीच एक सत्यापन योग्य लिंक स्थापित करती है। यदि ऐप स्थापित नहीं है, तो सफारी उपयोगकर्ता को वेबपेज पर ले जाएगी, ऐप की उपस्थिति बनाए रखते हुए।

पेनिट्रेशन टेस्टर्स के लिए, apple-app-site-association फ़ाइल विशेष रुचि की होती है क्योंकि यह संवेदनशील पथों को प्रकट कर सकती है, जिनमें संभावित रूप से अप्रकाशित सुविधाओं से संबंधित पथ शामिल हो सकते हैं।

Analyzing the Associated Domains Entitlement

डेवलपर्स यूनिवर्सल लिंक को सक्षम करते हैं द्वारा Associated Domains को Xcode के Capabilities टैब में कॉन्फ़िगर करके या .entitlements फ़ाइल की जांच करके। प्रत्येक डोमेन applinks: के साथ प्रारंभ होता है। उदाहरण के लिए, टेलीग्राम की कॉन्फ़िगरेशन इस प्रकार हो सकती है:

xml
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:telegram.me</string>
<string>applinks:t.me</string>
</array>

For more comprehensive insights, refer to the archived Apple Developer Documentation.

If working with a compiled application, entitlements can be extracted as outlined in this guide.

Apple App Site Association फ़ाइल प्राप्त करना

apple-app-site-association फ़ाइल को सर्वर से उन डोमेन का उपयोग करके प्राप्त किया जाना चाहिए जो अधिकारों में निर्दिष्ट हैं। सुनिश्चित करें कि फ़ाइल HTTPS के माध्यम से सीधे https://<domain>/apple-app-site-association (या /.well-known/apple-app-site-association) पर सुलभ है। Apple App Site Association (AASA) Validator जैसे उपकरण इस प्रक्रिया में मदद कर सकते हैं।

macOS/Linux शेल से त्वरित गणना

# मान लेते हैं कि आपने अधिकारों को 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 "[+] $d के लिए AASA प्राप्त कर रहा है";
  curl -sk "https://$d/.well-known/apple-app-site-association" | jq '.'
done

ऐप में यूनिवर्सल लिंक को संभालना

ऐप को यूनिवर्सल लिंक को सही तरीके से संभालने के लिए विशिष्ट विधियों को लागू करना चाहिए। देखने के लिए प्राथमिक विधि application:continueUserActivity:restorationHandler: है। यह महत्वपूर्ण है कि संभाले गए URLs का स्कीम HTTP या HTTPS हो, क्योंकि अन्य का समर्थन नहीं किया जाएगा।

डेटा हैंडलर विधि का मान्यकरण

जब एक यूनिवर्सल लिंक एक ऐप खोलता है, तो एक NSUserActivity ऑब्जेक्ट ऐप को URL के साथ पास किया जाता है। इस URL को संसाधित करने से पहले, इसे मान्य और साफ करना आवश्यक है ताकि सुरक्षा जोखिमों से बचा जा सके। यहाँ Swift में प्रक्रिया का एक उदाहरण है:

swift
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
}

URLs को सावधानीपूर्वक पार्स और मान्य किया जाना चाहिए, विशेष रूप से यदि उनमें पैरामीटर शामिल हैं, संभावित स्पूफिंग या गलत डेटा के खिलाफ सुरक्षा के लिए। NSURLComponents API इस उद्देश्य के लिए उपयोगी है, जैसा कि नीचे दिखाया गया है:

swift
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
}
}

Through diligent configuration and validation, developers can ensure that universal links enhance user experience while maintaining security and privacy standards.

सामान्य कमजोरियाँ और Pentesting जांचें

#कमजोरीपरीक्षण कैसे करेंशोषण / प्रभाव
1AASA फ़ाइल में अत्यधिक व्यापक paths / components (जैसे "/": "*" या वाइल्डकार्ड जैसे "/a/*")।• डाउनलोड की गई AASA की जांच करें और *, ट्रेलिंग स्लैश, या {"?": …} नियमों की तलाश करें।
• उन अज्ञात संसाधनों को अनुरोध करने का प्रयास करें जो अभी भी नियम से मेल खाते हैं (https://domain.com/a/evil?_p_dp=1)।
Universal-link hijacking: एक दुर्भावनापूर्ण 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 बकेट के माध्यम से), तो हमलावर स्वचालित रूप से Universal Link बाइंडिंग प्राप्त कर लेता है।

त्वरित चेकलिस्ट

  • अधिकार निकालें और हर applinks: प्रविष्टि की गणना करें।
  • प्रत्येक प्रविष्टि के लिए AASA डाउनलोड करें और वाइल्डकार्ड के लिए ऑडिट करें।
  • सत्यापित करें कि वेब सर्वर अनिर्धारित पथों के लिए 404 लौटाता है।
  • बाइनरी में, पुष्टि करें कि केवल विश्वसनीय होस्ट/स्कीम को संभाला जाता है।
  • यदि ऐप नए components सिंटैक्स (iOS 11+) का उपयोग करता है, तो क्वेरी-पैरामीटर नियमों ({"?":{…}}) को फज़ करें।

उपकरण

  • GetUniversal.link: आपके ऐप के Universal Links और AASA फ़ाइल के परीक्षण और प्रबंधन को सरल बनाने में मदद करता है। AASA फ़ाइल की अखंडता को सत्यापित करने के लिए बस अपना डोमेन दर्ज करें या लिंक व्यवहार का आसानी से परीक्षण करने के लिए कस्टम डैशबोर्ड का उपयोग करें। यह उपकरण आपको यह निर्धारित करने में भी मदद करता है कि Apple आपकी AASA फ़ाइल को अगली बार कब अनुक्रमित करेगा।
  • Knil: ओपन-सोर्स iOS उपयोगिता जो हर Universal Link को सीधे डिवाइस पर लाने, पार्स करने और टैप-टेस्ट करने देती है।
  • universal-link-validator: CLI / वेब वेलिडेटर जो सख्त AASA अनुपालन जांच करता है और खतरनाक वाइल्डकार्ड को उजागर करता है।

संदर्भ

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें