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

122 lines
9.6 KiB
Markdown
Raw Normal View History

2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
- Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
- 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)
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
- Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
- **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
- **Compartilhe suas técnicas de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
2022-04-28 16:01:33 +00:00
</details>
2023-06-06 18:56:34 +00:00
Os links universais permitem **redirecionar usuários diretamente** para o aplicativo sem passar pelo Safari para redirecionamento.\
Os links universais são **únicos**, então eles **não podem ser reivindicados por outros aplicativos** porque usam links HTTP(S) padrão para o **site onde o proprietário carregou um arquivo para garantir que o site e o aplicativo estejam relacionados**.\
Como esses links usam esquemas HTTP(S), quando o **aplicativo não está instalado, o Safari abrirá o link** redirecionando os usuários para a página. Isso permite que **os aplicativos se comuniquem com o aplicativo mesmo que ele não esteja instalado**.
2021-05-21 16:38:18 +00:00
2023-06-06 18:56:34 +00:00
Para criar links universais, é necessário **criar um arquivo JSON chamado `apple-app-site-association`** com os detalhes. Em seguida, este arquivo precisa ser **hospedado no diretório raiz do seu servidor da web** (por exemplo, [https://google.com/apple-app-site-association](https://google.com/apple-app-site-association)).\
Para o pentester, este arquivo é muito interessante, pois **revela caminhos**. Ele pode até estar revelando caminhos de lançamentos que ainda não foram publicados.
2021-05-21 16:38:18 +00:00
2023-06-06 18:56:34 +00:00
## **Verificando a Autorização de Domínios Associados**
2021-05-21 16:38:18 +00:00
2023-06-06 18:56:34 +00:00
No Xcode, vá para a guia **Capabilities** e procure por **Associated Domains**. Você também pode inspecionar o arquivo `.entitlements` procurando por `com.apple.developer.associated-domains`. Cada um dos domínios deve ser prefixado com `applinks:`, como `applinks:www.mywebsite.com`.
2021-05-21 16:38:18 +00:00
2023-06-06 18:56:34 +00:00
Aqui está um exemplo do arquivo `.entitlements` do Telegram:
2021-05-21 16:38:18 +00:00
```markup
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:telegram.me</string>
<string>applinks:t.me</string>
</array>
```
2023-06-06 18:56:34 +00:00
Mais informações detalhadas podem ser encontradas na [Documentação do Desenvolvedor da Apple arquivada](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
2023-06-06 18:56:34 +00:00
Se você só tem o aplicativo compilado, pode extrair as permissões seguindo este guia:
2021-05-21 16:38:18 +00:00
{% content-ref url="extracting-entitlements-from-compiled-application.md" %}
[extracting-entitlements-from-compiled-application.md](extracting-entitlements-from-compiled-application.md)
{% endcontent-ref %}
2021-05-21 16:38:18 +00:00
2023-06-06 18:56:34 +00:00
## Recuperando o Arquivo de Associação do Site do Aplicativo da Apple
2021-05-21 16:38:18 +00:00
2023-06-06 18:56:34 +00:00
Tente recuperar o arquivo `apple-app-site-association` do servidor usando os domínios associados que você obteve na etapa anterior. Este arquivo precisa ser acessível via HTTPS, sem redirecionamentos, em `https://<domain>/apple-app-site-association` ou `https://<domain>/.well-known/apple-app-site-association`.
2021-05-21 16:38:18 +00:00
2023-06-06 18:56:34 +00:00
Você pode recuperá-lo com seu navegador ou usar o [Validador de Associação do Site do Aplicativo da Apple (AASA)](https://branch.io/resources/aasa-validator/).
2021-05-21 16:38:18 +00:00
2023-06-06 18:56:34 +00:00
## Verificando o Método de Recepção de Links
2021-05-21 16:38:18 +00:00
2023-06-06 18:56:34 +00:00
Para receber links e manipulá-los adequadamente, o delegado do aplicativo deve implementar [`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application). Se você tiver o projeto original, tente procurar por este método.
2021-05-21 16:38:18 +00:00
2023-06-06 18:56:34 +00:00
Observe que se o aplicativo usar [`openURL:options:completionHandler:`](https://developer.apple.com/documentation/uikit/uiapplication/1648685-openurl?language=objc) para abrir um link universal para o site do aplicativo, o link não será aberto no aplicativo. Como a chamada se origina do aplicativo, ela não será tratada como um link universal.
2021-05-21 16:38:18 +00:00
2023-06-06 18:56:34 +00:00
* O esquema do `webpageURL` deve ser HTTP ou HTTPS (qualquer outro esquema deve gerar uma exceção). A propriedade de instância [`scheme`](https://developer.apple.com/documentation/foundation/urlcomponents/1779624-scheme) de `URLComponents` / `NSURLComponents` pode ser usada para verificar isso.
2021-05-21 16:38:18 +00:00
2023-06-06 18:56:34 +00:00
## Verificando o Método de Manipulação de Dados
2021-05-21 16:38:18 +00:00
2023-06-06 18:56:34 +00:00
Quando o iOS abre um aplicativo como resultado de um link universal, o aplicativo recebe um objeto `NSUserActivity` com um valor de `activityType` de `NSUserActivityTypeBrowsingWeb`. A propriedade `webpageURL` do objeto de atividade contém o URL HTTP ou HTTPS que o usuário acessa. O seguinte exemplo em Swift verifica exatamente isso antes de abrir o URL:
2021-05-21 16:38:18 +00:00
```swift
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
}
```
2023-06-06 18:56:34 +00:00
Além disso, lembre-se de que se a URL incluir parâmetros, eles não devem ser confiáveis antes de serem cuidadosamente sanitizados e validados (mesmo quando provenientes de um domínio confiável). Por exemplo, eles podem ter sido falsificados por um atacante ou podem incluir dados malformados. Se esse for o caso, toda a URL e, portanto, a solicitação de link universal devem ser descartadas.
2021-05-21 16:38:18 +00:00
2023-06-06 18:56:34 +00:00
A API `NSURLComponents` pode ser usada para analisar e manipular os componentes da URL. Isso também pode fazer parte do método `application:continueUserActivity:restorationHandler:` em si ou pode ocorrer em um método separado chamado a partir dele. O seguinte [exemplo](https://developer.apple.com/documentation/uikit/core\_app/allowing\_apps\_and\_websites\_to\_link\_to\_your\_content/handling\_universal\_links#3001935) demonstra isso:
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 {
// Interact with album name and photo index
return true
} else {
// Handle when album and/or album name or photo index missing
return false
}
}
```
2023-06-06 18:56:34 +00:00
# Referências
2021-05-21 16:38:18 +00:00
{% embed url="https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8" %}
2021-05-21 16:38:18 +00:00
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
- Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
- 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)
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
- Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
- **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
- **Compartilhe suas técnicas de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [repositório hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
2022-04-28 16:01:33 +00:00
</details>