Translated ['src/mobile-pentesting/ios-pentesting/ios-universal-links.md

This commit is contained in:
Translator 2025-07-17 14:11:00 +00:00
parent 9775c16acd
commit d1bc2578fe

View File

@ -10,7 +10,7 @@ Para testadores de penetração, o arquivo `apple-app-site-association` é de pa
### **Analisando a Permissão de Domínios Associados** ### **Analisando a Permissão de Domínios Associados**
Os desenvolvedores habilitam os Universal Links 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: Desenvolvedores habilitam Universal Links 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:
```xml ```xml
<key>com.apple.developer.associated-domains</key> <key>com.apple.developer.associated-domains</key>
<array> <array>
@ -24,11 +24,23 @@ Se estiver trabalhando com um aplicativo compilado, as permissões podem ser ext
### **Recuperando o Arquivo de Associação do Site do Aplicativo da Apple** ### **Recuperando o Arquivo de Associação do Site do Aplicativo da 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 da Apple (AASA)](https://branch.io/resources/aasa-validator/) podem ajudar nesse processo. 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` (ou `/.well-known/apple-app-site-association`). Ferramentas como o [Validador de Associação de Site de Aplicativo da Apple (AASA)](https://branch.io/resources/aasa-validator/) podem ajudar nesse processo.
### **Manipulando Links Universais no Aplicativo** > **Enumeração rápida a partir de um shell macOS/Linux**
>
> ```bash
> # assumindo que você extraiu as permissões para ent.xml
> doms=$(plutil -extract com.apple.developer.associated-domains xml1 -o - ent.xml | \
> grep -oE 'applinks:[^<]+' | cut -d':' -f2)
> for d in $doms; do
> echo "[+] Buscando AASA para $d";
> curl -sk "https://$d/.well-known/apple-app-site-association" | jq '.'
> done
> ```
O aplicativo deve implementar métodos específicos para manipular links universais corretamente. O método principal a ser procurado é [`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application). É crucial que o esquema das URLs manipuladas seja HTTP ou HTTPS, pois outros não serão suportados. ### **Tratando Links Universais no Aplicativo**
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 das URLs tratadas seja HTTP ou HTTPS, pois outros não serão suportados.
#### **Validando o Método de Manipulação de Dados** #### **Validando o Método de Manipulação de Dados**
@ -72,13 +84,34 @@ 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. 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.
## Vulnerabilidades Comuns & Verificações de Pentesting
| # | Fraqueza | Como testar | Exploração / Impacto |
|---|----------|------------|-----------------------|
| 1 | **`paths` / `components` excessivamente amplos** no arquivo AASA (por exemplo, `"/": "*"` ou curingas como `"/a/*"`). | • Inspecione o AASA baixado e procure por `*`, barras finais ou regras `{"?": …}`.<br>• Tente solicitar recursos desconhecidos que ainda correspondam à regra (`https://domain.com/a/evil?_p_dp=1`). | Sequestro de link universal: um aplicativo iOS malicioso que registra o mesmo domínio poderia reivindicar todos esses links e apresentar uma interface de phishing. Um exemplo do mundo real é o relatório de bug-bounty da Temu.com de maio de 2025, onde um atacante poderia redirecionar qualquer caminho `/a/*` para seu próprio aplicativo. |
| 2 | **Validação do lado do servidor ausente** dos caminhos de deep-link. | Após identificar os caminhos permitidos, emita solicitações `curl`/Burp para recursos inexistentes e observe os códigos de status HTTP. Qualquer coisa diferente de `404` (por exemplo, 200/302) é suspeita. | Um atacante pode hospedar conteúdo arbitrário atrás de um caminho permitido e servi-lo através do domínio legítimo, aumentando a taxa de sucesso de phishing ou roubo de token de sessão. |
| 3 | **Manipulação de URL do lado do aplicativo sem lista branca de esquema/host** (CVE-2024-10474 Mozilla Focus < 132). | Procure por chamadas diretas `openURL:`/`open(_:options:)` ou pontes JavaScript que encaminham URLs arbitrárias. | Páginas internas podem contrabandear URLs `myapp://` ou `https://` que ignoram as verificações de segurança da barra de URL do navegador, levando a falsificações ou ações privilegiadas não intencionais. |
| 4 | **Uso de subdomínios curingas** (`*.example.com`) na concessão. | `grep` por `*.` nas concessões. | Se algum subdomínio for tomado (por exemplo, via um bucket S3 não utilizado), o atacante ganha automaticamente a vinculação do Link Universal. |
### Lista de Verificação Rápida
* [ ] Extraia concessões e enumere cada entrada `applinks:`.
* [ ] Baixe o AASA para cada entrada e audite em busca de curingas.
* [ ] Verifique se o servidor web retorna **404** para caminhos indefinidos.
* [ ] No binário, confirme que **apenas** hosts/esquemas confiáveis são tratados.
* [ ] Se o aplicativo usar a nova sintaxe `components` (iOS 11+), teste regras de parâmetros de consulta (`{"?":{…}}`).
## Ferramentas ## Ferramentas
- [GetUniversal.link](https://getuniversal.link/): Ajuda a simplificar o teste e a gestão dos Links Universais e do arquivo AASA do seu aplicativo. 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 novamente. - [GetUniversal.link](https://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 a seguir.
- [Knil](https://github.com/ethanhuang13/knil): Utilitário iOS de código aberto que busca, analisa e permite que você **teste** cada Link Universal declarado por um domínio diretamente no dispositivo.
- [universal-link-validator](https://github.com/urbangems/universal-link-validator): Validador CLI / web que realiza verificações rigorosas de conformidade do AASA e destaca curingas perigosos.
## Referências ## 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://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) - [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)
- [https://medium.com/@m.habibgpi/universal-link-hijacking-via-misconfigured-aasa-file-on-temu-com-eadfcb745e4e](https://medium.com/@m.habibgpi/universal-link-hijacking-via-misconfigured-aasa-file-on-temu-com-eadfcb745e4e)
- [https://nvd.nist.gov/vuln/detail/CVE-2024-10474](https://nvd.nist.gov/vuln/detail/CVE-2024-10474)
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}