7.6 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.
Introdução
Os links universais oferecem uma experiência de redirecionamento sem interrupções para os usuários, abrindo diretamente o conteúdo no aplicativo, evitando a necessidade de redirecionamento pelo Safari. Esses links são únicos e seguros, pois não podem ser reivindicados por outros aplicativos. Isso é garantido ao hospedar um arquivo JSON apple-app-site-association
no diretório raiz do site, estabelecendo um link verificável entre o site e o aplicativo. Nos casos em que o aplicativo não está instalado, o Safari assume e direciona o usuário para a página da web, mantendo a presença do aplicativo.
Para testadores de penetração, o arquivo apple-app-site-association
é de particular interesse, pois pode revelar caminhos sensíveis, potencialmente incluindo aqueles relacionados a recursos não lançados.
Analisando a Concessão de Domínios Associados
Os desenvolvedores ativam os Links Universais configurando os Domínios Associados na aba Capacidades do Xcode ou inspecionando o arquivo .entitlements
. Cada domínio é prefixado com applinks:
. Por exemplo, a configuração do Telegram pode aparecer da seguinte forma:
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:telegram.me</string>
<string>applinks:t.me</string>
</array>
Para obter informações mais abrangentes, consulte a Documentação do Desenvolvedor Apple arquivada.
Se estiver trabalhando com um aplicativo compilado, as permissões podem ser extraídas conforme descrito neste guia.
Recuperando o Arquivo de Associação do Site do Aplicativo Apple
O arquivo apple-app-site-association
deve ser recuperado do servidor usando os domínios especificados nas permissões. Certifique-se de que o arquivo esteja acessível via HTTPS diretamente em https://<domain>/apple-app-site-association
. Ferramentas como o Validador de Associação de Site de Aplicativo Apple (AASA) podem ajudar nesse processo.
Manipulando Links Universais no Aplicativo
O aplicativo deve implementar métodos específicos para manipular links universais corretamente. O método principal a ser procurado é application:continueUserActivity:restorationHandler:
. É crucial que o esquema das URLs manipuladas seja HTTP ou HTTPS, pois outros não serão suportados.
Validando o Método de Manipulação de Dados
Quando um link universal abre um aplicativo, um objeto NSUserActivity
é passado para o aplicativo com a URL. Antes de processar essa URL, é essencial validá-la e sanitizá-la para evitar riscos de segurança. Aqui está um exemplo em Swift que demonstra o processo:
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 devem ser cuidadosamente analisados e validados, especialmente se incluírem parâmetros, para se proteger contra possíveis falsificações ou dados malformados. A API NSURLComponents
é útil para esse propósito, como demonstrado abaixo:
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
}
}
Através de configuração e validação diligentes, os desenvolvedores podem garantir que os links universais melhorem a experiência do usuário enquanto mantêm padrões de segurança e privacidade.
Ferramentas
- GetUniversal.link: Ajuda a simplificar o teste e a gestão dos Links Universais do seu aplicativo e do arquivo AASA. Basta inserir seu domínio para verificar a integridade do arquivo AASA ou usar o painel personalizado para testar facilmente o comportamento dos links. Esta ferramenta também ajuda a determinar quando a Apple indexará seu arquivo AASA na próxima vez.
Referências
- 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.