iOS Custom URI Handlers / Deeplinks / Custom Schemes
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Os esquemas de URL personalizados permitem que os aplicativos se comuniquem usando um protocolo personalizado, conforme detalhado na Documentação do Desenvolvedor da Apple. Esses esquemas devem ser declarados pelo aplicativo, que então lida com URLs de entrada seguindo esses esquemas. É crucial validar todos os parâmetros de URL e descartar quaisquer URLs malformadas para prevenir ataques através desse vetor.
Um exemplo é dado onde o URI myapp://hostname?data=123876123
invoca uma ação específica do aplicativo. Uma vulnerabilidade observada estava no aplicativo Skype Mobile, que permitia ações de chamada não autorizadas via o protocolo skype://
. Os esquemas registrados podem ser encontrados no Info.plist
do aplicativo sob CFBundleURLTypes
. Aplicativos maliciosos podem explorar isso re-registrando URIs para interceptar informações sensíveis.
A partir do iOS 9.0, para verificar se um aplicativo está disponível, canOpenURL:
requer a declaração de esquemas de URL no Info.plist
sob LSApplicationQueriesSchemes
. Isso limita os esquemas que um aplicativo pode consultar a 50, melhorando a privacidade ao prevenir a enumeração de aplicativos.
Os desenvolvedores devem inspecionar métodos específicos no código-fonte para entender a construção e validação do caminho da URL, como application:didFinishLaunchingWithOptions:
e application:openURL:options:
. Por exemplo, o Telegram emprega vários métodos para abrir URLs:
Métodos como openURL:options:completionHandler:
são cruciais para abrir URLs e interagir com outros apps. Identificar o uso de tais métodos no código-fonte do app é fundamental para entender as comunicações externas.
Métodos obsoletos que lidam com aberturas de URL, como application:handleOpenURL:
e openURL:
, devem ser identificados e revisados quanto às implicações de segurança.
Fuzzing de esquemas de URL pode identificar bugs de corrupção de memória. Ferramentas como Frida podem automatizar esse processo abrindo URLs com diferentes payloads para monitorar por falhas, exemplificado pela manipulação de URLs no app iGoat-Swift:
De acordo com este post, aplicativos maliciosos poderiam registrar esquemas personalizados de outros aplicativos, então o aplicativo malicioso pode abrir um navegador que possui todos os cookies do aplicativo Safari com ASWebAuthenticationSession.
Com o navegador, o aplicativo malicioso pode carregar uma página da web controlada por atacantes e o TCC pedirá ao usuário móvel permissões para abrir esse aplicativo. Então, a página da web maliciosa poderia redirecionar para uma página de vítima, por exemplo, um fluxo OAuth com o parâmetro prompt=none
. Se o usuário já estiver logado no fluxo OAuth, o fluxo OAuth enviará o segredo de volta para o aplicativo da vítima usando o esquema personalizado do aplicativo da vítima.
No entanto, como o aplicativo malicioso também o registrou e porque o navegador usado está dentro do aplicativo malicioso, o esquema personalizado será tratado neste caso pelo aplicativo malicioso, que será capaz de roubar o token OAuth.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)