iOS Custom URI Handlers / Deeplinks / Custom Schemes
tip
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.
Informaci贸n B谩sica
Los esquemas de URL personalizados permiten que las aplicaciones se comuniquen utilizando un protocolo personalizado, como se detalla en la Apple Developer Documentation. Estos esquemas deben ser declarados por la aplicaci贸n, que luego maneja las URL entrantes siguiendo esos esquemas. Es crucial validar todos los par谩metros de la URL y descartar cualquier URL malformada para prevenir ataques a trav茅s de este vector.
Se da un ejemplo donde la URI myapp://hostname?data=123876123
invoca una acci贸n espec铆fica de la aplicaci贸n. Una vulnerabilidad se帽alada estaba en la aplicaci贸n Skype Mobile, que permit铆a acciones de llamada no permitidas a trav茅s del protocolo skype://
. Los esquemas registrados se pueden encontrar en el Info.plist
de la aplicaci贸n bajo CFBundleURLTypes
. Las aplicaciones maliciosas pueden explotar esto volviendo a registrar URIs para interceptar informaci贸n sensible.
Registro de Esquemas de Consulta de Aplicaciones
Desde iOS 9.0, para verificar si una aplicaci贸n est谩 disponible, canOpenURL:
requiere declarar esquemas de URL en el Info.plist
bajo LSApplicationQueriesSchemes
. Esto limita los esquemas que una aplicaci贸n puede consultar a 50, mejorando la privacidad al prevenir la enumeraci贸n de aplicaciones.
<key>LSApplicationQueriesSchemes</key>
<array>
<string>url_scheme1</string>
<string>url_scheme2</string>
</array>
Pruebas de Manejo y Validaci贸n de URL
Los desarrolladores deben inspeccionar m茅todos espec铆ficos en el c贸digo fuente para entender la construcci贸n y validaci贸n de rutas de URL, como application:didFinishLaunchingWithOptions:
y application:openURL:options:
. Por ejemplo, Telegram emplea varios m茅todos para abrir URLs:
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
}
Pruebas de Solicitudes de URL a Otras Aplicaciones
M茅todos como openURL:options:completionHandler:
son cruciales para abrir URLs e interactuar con otras aplicaciones. Identificar el uso de tales m茅todos en el c贸digo fuente de la aplicaci贸n es clave para entender las comunicaciones externas.
Pruebas de M茅todos Obsoletos
Los m茅todos obsoletos que manejan la apertura de URLs, como application:handleOpenURL:
y openURL:
, deben ser identificados y revisados por sus implicaciones de seguridad.
Fuzzing de Esquemas de URL
El fuzzing de esquemas de URL puede identificar errores de corrupci贸n de memoria. Herramientas como Frida pueden automatizar este proceso abriendo URLs con diferentes cargas 煤tiles para monitorear fallos, ejemplificado por la manipulaci贸n de URLs en la aplicaci贸n iGoat-Swift:
$ 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
Secuestro de esquemas de URL personalizados
Seg煤n esta publicaci贸n, las aplicaciones maliciosas podr铆an registrar esquemas personalizados de otras aplicaciones, luego la aplicaci贸n maliciosa puede abrir un navegador que tiene todas las cookies de la aplicaci贸n Safari con ASWebAuthenticationSession.
Con el navegador, la aplicaci贸n maliciosa puede cargar una p谩gina web controlada por el atacante y TCC pedir谩 al usuario m贸vil permisos para abrir esa aplicaci贸n. Luego, la p谩gina web maliciosa podr铆a redirigir a una p谩gina de v铆ctima, por ejemplo, un flujo de OAuth con el par谩metro prompt=none
. Si el usuario ya hab铆a iniciado sesi贸n en el flujo de OAuth, el flujo de OAuth enviar谩 el secreto de vuelta a la aplicaci贸n v铆ctima utilizando el esquema personalizado de la aplicaci贸n v铆ctima.
Sin embargo, debido a que la aplicaci贸n maliciosa tambi茅n lo registr贸 y porque el navegador utilizado est谩 dentro de la aplicaci贸n maliciosa, el esquema personalizado ser谩 manejado en este caso por la aplicaci贸n maliciosa, que podr谩 robar el token de OAuth.
Referencias
- https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/
- https://evanconnelly.github.io/post/ios-oauth/
tip
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.