iOS Custom URI Handlers / Deeplinks / Custom Schemes

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks को समर्थन करने के अन्य तरीके:

यह एक सारांश है जो संबंधित जानकारी से है https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/

मूल जानकारी

कस्टम URL स्कीम्स ऐप्स को एक कस्टम प्रोटोकॉल का उपयोग करके संचार करने की संभावना प्रदान करते हैं, जैसा कि एप्पल डेवलपर डॉक्यूमेंटेशन में विस्तार से वर्णित है। इन स्कीम्स को ऐप द्वारा घोषित किया जाना चाहिए, जो फिर उन स्कीम्स का पालन करते हुए आने वाले URL को संभालता है। इस वेक्टर के माध्यम से हमलों से बचने के लिए सभी URL पैरामीटरों की पुष्टि करना और किसी भी गलत URL को छोड़ देना महत्वपूर्ण है।

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

एप्लिकेशन क्वेरी स्कीम्स पंजीकरण

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

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

परीक्षण URL हैंडलिंग और मान्यता

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

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 खोलने के लिए महत्वपूर्ण हैं। ऐप के स्रोत कोड में इस प्रकार की विधियों की पहचान सुरक्षा संबंधित विचारों के लिए महत्वपूर्ण है।

पुरानी विध

$ 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

संदर्भ

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!

HackTricks का समर्थन करने के अन्य तरीके:

Last updated