WRITEUP · MOBILE · WEBVIEW · 2026 · @YNSMROZTAS

WebView, intent://

● liveclk --:--:--com.vulnapp.portal

shouldOverrideUrlLoading parsed the URL as an Intent and started it. https was not required.

wv // liveparseUri
radar--:--:--
AndroScopeWebViewintent://lab
01 Problem

A page inside the WebView could ask the app to start an Intent.

02 Move

Hook the client override on an authorized lab build.

03 Evidence

Intent.parseUri(url) → startActivity. intent:// accepted.

04 Outcome

Allow https only. Never parseUri a document URL into startActivity.

Summary

Lab package com.vulnapp.portal used a WebView as the help / checkout surface. shouldOverrideUrlLoading took the incoming URL, called Intent.parseUri, and startActivity on the result. intent:// was not rejected. File-from-file access was off — that is a different class. This class is the bridge from document URL to IPC.

A page the WebView will render — open redirect, compromised CDN, or an in-app tab the user did not expect — can now name a component inside the portal. Non-exported activities become reachable because the WebView process is the portal.

Class: WebView URL → parseUri → startActivity. Distinct from the exported deeplink gate. No intent:// body on this page.
Redacted WebView observer
Sink printed. URL body not.

What AndroScope printed

[webview] shouldOverrideUrlLoading
[webview] Intent.parseUri(url) → startActivity
[webview] scheme intent:// accepted
[webview] file-from-file / universal access: off

no intent:// body on this page
mitsec@com.vulnapp.portal:

Why this is not “just a deeplink”

The exported gate in the other note needs an implicit Intent from another package. This sink needs a URL the WebView will load. Origin can be a redirect the app already follows. The attacker does not have to win the intent-filter race.

parseUri rebuilds extras, flags, and a component. A host allowlist on https does not apply after the scheme check is skipped.

Fix

YUNUS EMRE ÖZTAŞ · MITSEC · LAB BUILD ONLY