diff --git a/src/mobile-pentesting/ios-pentesting/ios-universal-links.md b/src/mobile-pentesting/ios-pentesting/ios-universal-links.md index d0cb557c7..7ab01572b 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-universal-links.md +++ b/src/mobile-pentesting/ios-pentesting/ios-universal-links.md @@ -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** -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 com.apple.developer.associated-domains @@ -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** -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:///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:///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** @@ -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. +## 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 `{"?": …}`.
• 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 -- [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 - [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://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}}