iOS Custom URI Handlers / Deeplinks / Custom Schemes

Reading time: 5 minutes

tip

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

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

Basic Information

कस्टम URL स्कीम ऐप्स को एक कस्टम प्रोटोकॉल का उपयोग करके संवाद करने की अनुमति देती हैं, जैसा कि Apple Developer Documentation में विस्तृत किया गया है। इन स्कीमों को ऐप द्वारा घोषित किया जाना चाहिए, जो फिर उन स्कीमों के अनुसार आने वाले URLs को संभालता है। सभी URL पैरामीटर को मान्य करना और कोई भी गलत URL को खारिज करना महत्वपूर्ण है ताकि इस वेक्टर के माध्यम से हमलों को रोका जा सके।

एक उदाहरण दिया गया है जहां URI myapp://hostname?data=123876123 एक विशिष्ट एप्लिकेशन क्रिया को सक्रिय करता है। एक ज्ञात भेद्यता Skype Mobile ऐप में थी, जिसने skype:// प्रोटोकॉल के माध्यम से अनधिकृत कॉल क्रियाओं की अनुमति दी। पंजीकृत स्कीमों को ऐप के Info.plist में CFBundleURLTypes के तहत पाया जा सकता है। दुर्भावनापूर्ण ऐप्स इसको संवेदनशील जानकारी को इंटरसेप्ट करने के लिए URIs को फिर से पंजीकृत करके भुनाने का प्रयास कर सकते हैं।

Application Query Schemes Registration

iOS 9.0 से, यह जांचने के लिए कि क्या एक ऐप उपलब्ध है, canOpenURL: को Info.plist में LSApplicationQueriesSchemes के तहत URL स्कीमों की घोषणा करने की आवश्यकता होती है। यह एक ऐप द्वारा क्वेरी की जा सकने वाली स्कीमों को 50 तक सीमित करता है, जिससे ऐप enumeration को रोककर गोपनीयता बढ़ती है।

xml
<key>LSApplicationQueriesSchemes</key>
<array>
<string>url_scheme1</string>
<string>url_scheme2</string>
</array>

Testing URL Handling and Validation

डेवलपर्स को URL पथ निर्माण और मान्यता को समझने के लिए स्रोत कोड में विशिष्ट विधियों का निरीक्षण करना चाहिए, जैसे application:didFinishLaunchingWithOptions: और application:openURL:options:। उदाहरण के लिए, Telegram URLs खोलने के लिए विभिन्न विधियों का उपयोग करता है:

swift
func application(_ application: UIApplication, open url: URL, sourceApplication: String?) -> Bool {
self.openUrl(url: url)
return true
}

func application(_ application: UIApplication, open url: URL, sourceApplication: String?,
annotation: Any) -> Bool {
self.openUrl(url: url)
return true
}

func application(_ app: UIApplication, open url: URL,
options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
self.openUrl(url: url)
return true
}

func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
self.openUrl(url: url)
return true
}

अन्य ऐप्स के लिए URL अनुरोधों का परीक्षण

openURL:options:completionHandler: जैसे तरीके अन्य ऐप्स के साथ बातचीत करने के लिए URL खोलने के लिए महत्वपूर्ण हैं। ऐप के स्रोत कोड में ऐसे तरीकों का उपयोग पहचानना बाहरी संचार को समझने के लिए कुंजी है।

अप्रचलित तरीकों के लिए परीक्षण

URL खोलने को संभालने वाले अप्रचलित तरीके, जैसे application:handleOpenURL: और openURL:, की पहचान की जानी चाहिए और सुरक्षा निहितार्थों के लिए समीक्षा की जानी चाहिए।

URL स्कीमों का फज़िंग

URL स्कीमों का फज़िंग मेमोरी भ्रष्टाचार बग की पहचान कर सकता है। Frida जैसे उपकरण इस प्रक्रिया को स्वचालित कर सकते हैं, विभिन्न पेलोड के साथ URL खोलकर क्रैश की निगरानी करने के लिए, जिसे iGoat-Swift ऐप में URL के हेरफेर द्वारा प्रदर्शित किया गया है:

bash
$ frida -U SpringBoard -l ios-url-scheme-fuzzing.js
[iPhone::SpringBoard]-> fuzz("iGoat", "iGoat://?contactNumber={0}&message={0}")
Watching for crashes from iGoat...
No logs were moved.
Opened URL: iGoat://?contactNumber=0&message=0

कस्टम URL स्कीम हाइजैकिंग

इस पोस्ट के अनुसार, दुर्भावनापूर्ण ऐप्स अन्य ऐप्स के कस्टम स्कीम्स को रजिस्टर कर सकते हैं, फिर दुर्भावनापूर्ण ऐप एक ब्राउज़र खोल सकता है जिसमें Safari ऐप के सभी कुकीज़ होते हैं ASWebAuthenticationSession के साथ।

ब्राउज़र के साथ, दुर्भावनापूर्ण ऐप एक हमलावर द्वारा नियंत्रित वेब पृष्ठ लोड कर सकता है और TCC मोबाइल उपयोगकर्ता से उस ऐप को खोलने के लिए अनुमतियाँ मांगेगा। फिर, दुर्भावनापूर्ण वेबपृष्ठ एक पीड़ित पृष्ठ पर रीडायरेक्ट कर सकता है, उदाहरण के लिए, एक OAuth प्रवाह जिसमें पैरामीटर prompt=none है। यदि उपयोगकर्ता पहले से ही OAuth प्रवाह में लॉग इन था, तो OAuth प्रवाह पीड़ित ऐप को कस्टम स्कीम का उपयोग करके सीक्रेट वापस भेज देगा।
हालांकि, क्योंकि दुर्भावनापूर्ण ऐप ने इसे भी रजिस्टर किया है और क्योंकि उपयोग किया गया ब्राउज़र दुर्भावनापूर्ण ऐप के अंदर है, इस मामले में कस्टम स्कीम को दुर्भावनापूर्ण ऐप द्वारा संभाला जाएगा, जो OAuth टोकन चुराने में सक्षम होगा।

संदर्भ

tip

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

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