9.6 KiB
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿O quieres tener acceso a la última versión de PEASS o descargar HackTricks en PDF? ¡Consulta los PLANES DE SUSCRIPCIÓN!
-
Descubre The PEASS Family, nuestra colección exclusiva de NFTs
-
Obtén la oficial PEASS & HackTricks swag
-
Únete al 💬 grupo de Discord o al grupo de telegram o sígueme en Twitter 🐦@carlospolopm.
-
Comparte tus trucos de hacking enviando PRs al repositorio de hacktricks y al repositorio de hacktricks-cloud.
Los enlaces universales permiten redirigir a los usuarios directamente a la aplicación sin pasar por Safari para la redirección.
Los enlaces universales son únicos, por lo que no pueden ser reclamados por otras aplicaciones porque utilizan enlaces HTTP(S) estándar al sitio web donde el propietario ha subido un archivo para asegurarse de que el sitio web y la aplicación están relacionados.
Como estos enlaces utilizan esquemas HTTP(S), cuando la aplicación no está instalada, Safari abrirá el enlace redirigiendo a los usuarios a la página. Esto permite que las aplicaciones se comuniquen con la aplicación incluso si no está instalada.
Para crear enlaces universales es necesario crear un archivo JSON llamado apple-app-site-association
con los detalles. Luego, este archivo debe ser alojado en el directorio raíz de su servidor web (por ejemplo, https://google.com/apple-app-site-association).
Para el pentester, este archivo es muy interesante ya que revela rutas. Incluso puede estar revelando rutas de versiones que aún no se han publicado.
Comprobación de la autorización de dominios asociados
En Xcode, vaya a la pestaña Capabilities y busque Associated Domains. También puede inspeccionar el archivo .entitlements
buscando com.apple.developer.associated-domains
. Cada uno de los dominios debe tener el prefijo applinks:
, como applinks:www.mywebsite.com
.
Aquí hay un ejemplo del archivo .entitlements
de Telegram:
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:telegram.me</string>
<string>applinks:t.me</string>
</array>
Se puede encontrar información más detallada en la Documentación de Desarrolladores de Apple archivada.
Si solo tienes la aplicación compilada, puedes extraer los entitlements siguiendo esta guía:
{% content-ref url="extracting-entitlements-from-compiled-application.md" %} extracting-entitlements-from-compiled-application.md {% endcontent-ref %}
Recuperando el archivo de asociación de sitio de la aplicación de Apple
Intenta recuperar el archivo apple-app-site-association
del servidor utilizando los dominios asociados que obtuviste en el paso anterior. Este archivo debe ser accesible a través de HTTPS, sin redireccionamientos, en https://<dominio>/apple-app-site-association
o https://<dominio>/.well-known/apple-app-site-association
.
Puedes recuperarlo tú mismo con tu navegador o utilizar el Validador de Asociación de Sitio de Aplicación de Apple (AASA).
Comprobando el Método Receptor de Enlaces
Para recibir enlaces y manejarlos adecuadamente, el delegado de la aplicación debe implementar application:continueUserActivity:restorationHandler:
. Si tienes el proyecto original, intenta buscar este método.
Ten en cuenta que si la aplicación utiliza openURL:options:completionHandler:
para abrir un enlace universal al sitio web de la aplicación, el enlace no se abrirá en la aplicación. Como la llamada se origina desde la aplicación, no se manejará como un enlace universal.
- El esquema de
webpageURL
debe ser HTTP o HTTPS (cualquier otro esquema debería lanzar una excepción). La propiedad de instanciascheme
deURLComponents
/NSURLComponents
se puede utilizar para verificar esto.
Comprobando el Método Manejador de Datos
Cuando iOS abre una aplicación como resultado de un enlace universal, la aplicación recibe un objeto NSUserActivity
con un valor de activityType
de NSUserActivityTypeBrowsingWeb
. La propiedad webpageURL
del objeto de actividad contiene la URL HTTP o HTTPS a la que accede el usuario. El siguiente ejemplo en Swift verifica exactamente esto antes de abrir la URL:
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
// ...
if userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL {
application.open(url, options: [:], completionHandler: nil)
}
return true
}
Además, recuerda que si la URL incluye parámetros, no se deben confiar en ellos antes de ser cuidadosamente saneados y validados (incluso cuando provienen de un dominio de confianza). Por ejemplo, podrían haber sido falsificados por un atacante o podrían incluir datos malformados. Si ese es el caso, toda la URL y, por lo tanto, la solicitud de enlace universal deben ser descartados.
La API NSURLComponents
se puede utilizar para analizar y manipular los componentes de la URL. Esto también puede ser parte del método application:continueUserActivity:restorationHandler:
en sí mismo o puede ocurrir en un método separado que se llama desde él. El siguiente ejemplo lo demuestra:
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 {
// Interact with album name and photo index
return true
} else {
// Handle when album and/or album name or photo index missing
return false
}
}
Referencias
{% embed url="https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿O quieres tener acceso a la última versión de PEASS o descargar HackTricks en PDF? ¡Consulta los PLANES DE SUSCRIPCIÓN!
-
Descubre The PEASS Family, nuestra colección exclusiva de NFTs
-
Obtén la oficial PEASS & HackTricks swag
-
Únete al 💬 grupo de Discord o al grupo de telegram o sígueme en Twitter 🐦@carlospolopm.
-
Comparte tus trucos de hacking enviando PR al repositorio hacktricks y al repositorio hacktricks-cloud.