iOS Universal Links
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
Introducción
Los enlaces universales ofrecen una experiencia de redirección fluida a los usuarios al abrir directamente el contenido en la aplicación, evitando la necesidad de redirección a Safari. Estos enlaces son únicos y seguros, ya que no pueden ser reclamados por otras aplicaciones. Esto se asegura al alojar un archivo JSON apple-app-site-association en el directorio raíz del sitio web, estableciendo un enlace verificable entre el sitio web y la aplicación. En casos donde la aplicación no está instalada, Safari tomará el control y dirigirá al usuario a la página web, manteniendo la presencia de la aplicación.
Para los testers de penetración, el archivo apple-app-site-association es de particular interés ya que puede revelar rutas sensibles, potencialmente incluyendo aquellas relacionadas con características no lanzadas.
Analizando el Derecho de Dominios Asociados
Los desarrolladores habilitan los enlaces universales configurando los Dominios Asociados en la pestaña de Capacidades de Xcode o inspeccionando el archivo .entitlements. Cada dominio está precedido por applinks:. Por ejemplo, la configuración de Telegram podría aparecer de la siguiente manera:
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:telegram.me</string>
<string>applinks:t.me</string>
</array>
Para obtener información más completa, consulta la documentación de desarrolladores de Apple archivada.
Si trabajas con una aplicación compilada, los derechos pueden ser extraídos como se detalla en esta guía.
Recuperando el archivo de asociación de sitios de aplicaciones de Apple
El archivo apple-app-site-association debe ser recuperado del servidor utilizando los dominios especificados en los derechos. Asegúrate de que el archivo sea accesible a través de HTTPS directamente en https://<domain>/apple-app-site-association. Herramientas como el validador de asociación de sitios de aplicaciones de Apple (AASA) pueden ayudar en este proceso.
Manejando enlaces universales en la aplicación
La aplicación debe implementar métodos específicos para manejar enlaces universales correctamente. El método principal a buscar es application:continueUserActivity:restorationHandler:. Es crucial que el esquema de las URL manejadas sea HTTP o HTTPS, ya que otros no serán soportados.
Validando el método del manejador de datos
Cuando un enlace universal abre una aplicación, se pasa un objeto NSUserActivity a la aplicación con la URL. Antes de procesar esta URL, es esencial validarla y sanearla para prevenir riesgos de seguridad. Aquí hay un ejemplo en Swift que demuestra el proceso:
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
}
Las URLs deben ser analizadas y validadas cuidadosamente, especialmente si incluyen parámetros, para protegerse contra posibles suplantaciones o datos mal formados. La API NSURLComponents es útil para este propósito, como se demuestra a continuación:
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
}
}
A través de una configuración y validación diligentes, los desarrolladores pueden asegurarse de que los enlaces universales mejoren la experiencia del usuario mientras mantienen los estándares de seguridad y privacidad.
Herramientas
- GetUniversal.link: Ayuda a simplificar la prueba y gestión de los Enlaces Universales de tu aplicación y el archivo AASA. Simplemente ingresa tu dominio para verificar la integridad del archivo AASA o utiliza el panel personalizado para probar fácilmente el comportamiento de los enlaces. Esta herramienta también te ayuda a determinar cuándo Apple indexará por última vez tu archivo AASA.
Referencias
- 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
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.


