8.4 KiB
Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
- Se você quer ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, confira os PLANOS DE ASSINATURA!
- Adquira o material oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção de NFTs exclusivos
- Junte-se ao grupo 💬 Discord ou ao grupo telegram ou siga-me no Twitter 🐦 @carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para os repositórios github do HackTricks e HackTricks Cloud.
Links universais permitem redirecionar usuários diretamente para o aplicativo sem passar pelo Safari para redirecionamento.
Os links universais são únicos, então 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 aplicativos se comuniquem com o aplicativo mesmo que ele não esteja instalado.
Para criar links universais é necessário criar um arquivo JSON chamado apple-app-site-association
com os detalhes. Depois, este arquivo precisa ser hospedado no diretório raiz do seu servidor web (por exemplo, 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.
Verificando o Entitlement de Domínios Associados
No Xcode, vá para a aba 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.meusite.com
.
Aqui está um exemplo do arquivo .entitlements
do Telegram:
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:telegram.me</string>
<string>applinks:t.me</string>
</array>
Informações mais detalhadas podem ser encontradas na documentação arquivada da Apple Developer.
Se você possui apenas o aplicativo compilado, pode extrair os entitlements seguindo este guia:
{% content-ref url="extracting-entitlements-from-compiled-application.md" %} extracting-entitlements-from-compiled-application.md {% endcontent-ref %}
Recuperando o Arquivo de Associação de Site da Apple
Tente recuperar o arquivo apple-app-site-association
do servidor usando os domínios associados que você obteve no passo anterior. Este arquivo precisa estar acessível via HTTPS, sem redirecionamentos, em https://<domínio>/apple-app-site-association
ou https://<domínio>/.well-known/apple-app-site-association
.
Você pode recuperá-lo sozinho com seu navegador ou usar o Validador de Associação de Site da Apple (AASA).
Verificando o Método Receptor de Link
Para receber links e lidar com eles adequadamente, o delegado do aplicativo deve implementar application:continueUserActivity:restorationHandler:
. Se você tem o projeto original, tente procurar por este método.
Observe que se o aplicativo usa openURL:options:completionHandler:
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.
- O esquema da
webpageURL
deve ser HTTP ou HTTPS (qualquer outro esquema deve lançar uma exceção). A propriedade de instânciascheme
deURLComponents
/NSURLComponents
pode ser usada para verificar isso.
Verificando o Método de Manipulação de Dados
Quando o iOS abre um aplicativo como resultado de um link universal, o aplicativo recebe um objeto NSUserActivity
com um valor 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:
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
}
Além disso, lembre-se de que se a URL incluir parâmetros, eles não devem ser confiáveis antes de serem cuidadosamente higienizados e validados (mesmo vindo de domínio confiável). Por exemplo, eles podem ter sido falsificados por um atacante ou podem incluir dados malformados. Se for esse o caso, toda a URL e, portanto, a solicitação de link universal deve ser descartada.
A API NSURLComponents
pode ser usada para analisar e manipular os componentes da URL. Isso também pode ser parte do método application:continueUserActivity:restorationHandler:
em si ou pode ocorrer em um método separado sendo chamado a partir dele. O seguinte exemplo demonstra isso:
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
}
}
Referências
{% embed url="https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8" %}
Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
- Se você quer ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, confira os PLANOS DE ASSINATURA!
- Adquira o material oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção de NFTs exclusivos
- Junte-se ao grupo 💬 Discord ou ao grupo telegram ou siga-me no Twitter 🐦 @carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para os repositórios do GitHub HackTricks e HackTricks Cloud.