10 KiB
iOS Universal Links
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the ЁЯТм Discord group or the telegram group or follow us on Twitter ЁЯРж @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Introduction
рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рд▓рд┐рдВрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рд╣рдЬ рд░реАрдбрд╛рдпрд░реЗрдХреНрд╢рди рдЕрдиреБрднрд╡ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╕реАрдзреЗ рдРрдк рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдЦреЛрд▓рддреЗ рд╣реИрдВ, рд╕рдлрд╛рд░реА рд░реАрдбрд╛рдпрд░реЗрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдпреЗ рд▓рд┐рдВрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрдиреНрд╣реЗрдВ рдЕрдиреНрдп рдРрдк рджреНрд╡рд╛рд░рд╛ рджрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреА рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ apple-app-site-association
JSON рдлрд╝рд╛рдЗрд▓ рд╣реЛ, рдЬреЛ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдФрд░ рдРрдк рдХреЗ рдмреАрдЪ рдПрдХ рд╕рддреНрдпрд╛рдкрд┐рдд рд▓рд┐рдВрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреА рд╣реИред рдпрджрд┐ рдРрдк рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕рдлрд╛рд░реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡реЗрдмрдкреЗрдЬ рдкрд░ рд▓реЗ рдЬрд╛рдПрдЧреА, рдРрдк рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдПред
рдкреЗрдирдЯреЗрд╕реНрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП, apple-app-site-association
рдлрд╝рд╛рдЗрд▓ рд╡рд┐рд╢реЗрд╖ рд░реБрдЪрд┐ рдХреА рд╣реЛрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдкрдереЛрдВ рдХреЛ рдкреНрд░рдХрдЯ рдХрд░ рд╕рдХрддреА рд╣реИ, рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЙрди рдкрдереЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реБрдП рдЬреЛ рдЕрдкреНрд░рдХрд╛рд╢рд┐рдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред
Associated Domains Entitlement рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛
рдбреЗрд╡рд▓рдкрд░реНрд╕ рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рд▓рд┐рдВрдХ рдХреЛ Xcode рдХреЗ Capabilities рдЯреИрдм рдореЗрдВ Associated Domains рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдХреЗ рдпрд╛ .entitlements
рдлрд╝рд╛рдЗрд▓ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдХреЗ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдбреЛрдореЗрди рдХреЗ рдЖрдЧреЗ applinks:
рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддреА рд╣реИ:
<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
рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рдЙрди рдбреЛрдореЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИрдВред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдлрд╝рд╛рдЗрд▓ HTTPS рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реАрдзреЗ https://<domain>/apple-app-site-association
рдкрд░ рд╕реБрд▓рдн рд╣реИред Apple App Site Association (AASA) Validator рдЬреИрд╕реЗ рдЙрдкрдХрд░рдг рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдРрдк рдореЗрдВ рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рд▓рд┐рдВрдХ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛
рдРрдк рдХреЛ рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рд▓рд┐рдВрдХ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХ рд╡рд┐рдзрд┐ application:continueUserActivity:restorationHandler:
рд╣реИред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╕рдВрднрд╛рд▓реЗ рдЧрдП URLs рдХрд╛ рд╕реНрдХреАрдо HTTP рдпрд╛ HTTPS рд╣реЛ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдп рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдбреЗрдЯрд╛ рд╣реИрдВрдбрд▓рд░ рд╡рд┐рдзрд┐ рдХрд╛ рдорд╛рдиреНрдпрдХрд░рдг
рдЬрдм рдПрдХ рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рд▓рд┐рдВрдХ рдПрдХ рдРрдк рдЦреЛрд▓рддрд╛ рд╣реИ, рддреЛ рдПрдХ NSUserActivity
рдСрдмреНрдЬреЗрдХреНрдЯ рдРрдк рдХреЛ URL рдХреЗ рд╕рд╛рде рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ URL рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕реЗ рдорд╛рдиреНрдп рдФрд░ рд╕рд╛рдл рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рд╕реБрд░рдХреНрд╖рд╛ рдЬреЛрдЦрд┐рдореЛрдВ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХреЗред рдпрд╣рд╛рдБ 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 рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
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.
Tools
- GetUniversal.link: рдЖрдкрдХреА рдРрдк рдХреЗ рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рд▓рд┐рдВрдХ рдФрд░ AASA рдлрд╝рд╛рдЗрд▓ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдкреНрд░рдмрдВрдзрди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред AASA рдлрд╝рд╛рдЗрд▓ рдХреА рдЕрдЦрдВрдбрддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЕрдкрдирд╛ рдбреЛрдореЗрди рджрд░реНрдЬ рдХрд░реЗрдВ рдпрд╛ рд▓рд┐рдВрдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рдбреИрд╢рдмреЛрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣ рдЙрдкрдХрд░рдг рдЖрдкрдХреЛ рдпрд╣ рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ Apple рдЕрдЧрд▓реА рдмрд╛рд░ рдЖрдкрдХреА AASA рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХрдм рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░реЗрдЧрд╛ред
References
- 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
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the ЁЯТм Discord group or the telegram group or follow us on Twitter ЁЯРж @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.