hacktricks/mobile-pentesting/ios-pentesting/ios-universal-links.md

102 lines
7.2 KiB
Markdown
Raw Normal View History

# Links Universais do iOS
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
Outras formas de apoiar o HackTricks:
2022-04-28 16:01:33 +00:00
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
2022-04-28 16:01:33 +00:00
</details>
## Introdução
2021-05-21 16:38:18 +00:00
Os links universais oferecem uma experiência de **redirecionamento perfeita** aos 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 hospedando 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.
2021-05-21 16:38:18 +00:00
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.
2021-05-21 16:38:18 +00:00
### **Analisando a Concessão de Domínios Associados**
2021-05-21 16:38:18 +00:00
Os desenvolvedores habilitam os Links Universais configurando os **Domínios Associados** na guia de 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:
```xml
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:telegram.me</string>
<string>applinks:t.me</string>
</array>
2021-05-21 16:38:18 +00:00
```
Para obter insights mais abrangentes, consulte a [Documentação Arquivada para Desenvolvedores da Apple](https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW2).
2021-05-21 16:38:18 +00:00
Se estiver trabalhando com um aplicativo compilado, os direitos podem ser extraídos conforme descrito neste [guia](extracting-entitlements-from-compiled-application.md).
2021-05-21 16:38:18 +00:00
### **Recuperando o Arquivo de Associação do Site do Aplicativo Apple**
2021-05-21 16:38:18 +00:00
O arquivo `apple-app-site-association` deve ser recuperado do servidor usando os domínios especificados nos direitos. Certifique-se de que o arquivo seja acessível via HTTPS diretamente em `https://<domínio>/apple-app-site-association`. Ferramentas como o [Validador de Associação de Site de Aplicativo Apple (AASA) da Apple](https://branch.io/resources/aasa-validator/) podem auxiliar nesse processo.
2021-05-21 16:38:18 +00:00
### **Manipulando Links Universais no Aplicativo**
2021-05-21 16:38:18 +00:00
O aplicativo deve implementar métodos específicos para lidar corretamente com links universais. O método principal a ser procurado é [`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application). É crucial que o esquema de URLs manipulados seja HTTP ou HTTPS, pois outros não serão suportados.
2021-05-21 16:38:18 +00:00
#### **Validando o Método do Manipulador de Dados**
2021-05-21 16:38:18 +00:00
Quando um link universal abre um aplicativo, um objeto `NSUserActivity` é passado para o aplicativo com o URL. Antes de processar este URL, é essencial validá-lo e sanitizá-lo para evitar riscos de segurança. Aqui está um exemplo em Swift que demonstra o processo:
2021-05-21 16:38:18 +00:00
```swift
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)
}
2021-05-21 16:38:18 +00:00
return true
2021-05-21 16:38:18 +00:00
}
```
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 fim, como demonstrado abaixo:
2021-05-21 16:38:18 +00:00
```swift
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
}
2021-05-21 16:38:18 +00:00
}
```
Através de **configuração e validação diligentes**, os desenvolvedores podem garantir que os links universais aprimorem a experiência do usuário, mantendo os padrões de segurança e privacidade.
2022-04-28 16:01:33 +00:00
## Referências
* [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0070/#static-analysis](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](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8)
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
Outras formas de apoiar o HackTricks:
2022-04-28 16:01:33 +00:00
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
2022-04-28 16:01:33 +00:00
</details>