7.3 KiB
Enlaces Universales de iOS
Aprende a hackear AWS desde cero hasta convertirte en un experto con htARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
- Si deseas ver tu empresa anunciada en HackTricks o descargar HackTricks en PDF Consulta los PLANES DE SUSCRIPCIÓN!
- Obtén el oficial PEASS & HackTricks swag
- Descubre The PEASS Family, nuestra colección exclusiva de NFTs
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @carlospolopm.
- Comparte tus 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 sin problemas 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 alojando 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 en los que 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 probadores 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 funciones no lanzadas.
Análisis de la Concesión 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 se prefija con 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 detallada, consulta la Documentación de Desarrolladores de Apple archivada.
Si estás trabajando con una aplicación compilada, los permisos pueden extraerse según se describe en esta guía.
Obtención del Archivo de Asociación de Sitio de la App de Apple
El archivo apple-app-site-association
debe obtenerse del servidor utilizando los dominios especificados en los permisos. Asegúrate de que el archivo sea accesible a través de HTTPS directamente en https://<dominio>/apple-app-site-association
. Herramientas como el Validador de Asociación de Sitio de la App de Apple (AASA) pueden ayudar en este proceso.
Manejo de Enlaces Universales en la App
La app debe implementar métodos específicos para manejar correctamente los enlaces universales. 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 compatibles.
Validación del Método de Manejo de Datos
Cuando un enlace universal abre una app, se pasa a la app un objeto NSUserActivity
con la URL. Antes de procesar esta URL, es esencial validarla y sanearla para prevenir riesgos de seguridad. Aquí tienes un ejemplo en Swift que muestra 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 URL deben ser analizadas y validadas cuidadosamente, especialmente si incluyen parámetros, para protegerse contra posibles suplantaciones de identidad o datos malformados. La API NSURLComponents
es útil para este propósito, como se muestra 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 asegurar que los enlaces universales mejoren la experiencia del usuario manteniendo los estándares de seguridad y privacidad.
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
Aprende hacking de AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
- Si deseas ver tu empresa anunciada en HackTricks o descargar HackTricks en PDF ¡Consulta los PLANES DE SUSCRIPCIÓN!
- Obtén merchandising oficial de PEASS & HackTricks
- Descubre The PEASS Family, nuestra colección exclusiva de NFTs
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @carlospolopm.
- Comparte tus trucos de hacking enviando PRs a los repositorios de HackTricks y HackTricks Cloud.