Nakaya / Custom URL Schemeによるアクセス制御不備の脆弱性

Created Tue, 24 Dec 2024 11:02:00 +0900 Modified Fri, 10 Jan 2025 14:49:03 +0000

背景

Androidアプリの脆弱性を見つけてCVEをゲットしたいため,まずは情報収集から

CVE事例

ZOZOTOWNにアクセス制限不備の脆弱性

概要

『株式会社ZOZOが提供するAndroidアプリ「ZOZOTOWN」には、Custom URL Schemeを使用してリクエストされたURLにアクセスする機能が実装されています。この機能には、任意のアプリからリクエストを受け取りアクセスを実行してしまう、アクセス制限不備の脆弱性(CWE-939)が存在します。』

脆弱性について

Custom URL Scheme(ディープリンク)とは? 独自のURLスキームを利用してアプリを直接起動できるURLのこと

攻撃手法

  1. ユーザーが攻撃者ページに誘導される
  2. 攻撃者ページがAndroidアプリへのアクセスを誘導するページを返す
  3. 誘導されたページで,Androidアプリへの細工されたリクエストを送信する
  4. 細工されたリクエストをもとに,ユーザーはリダイレクト先URLを決定する
  5. フィッシングサイトに自動的にリダイレクトされる
  6. フィッシングサイトはそのAndroidアプリに似せたサイトを返す
  7. フィッシングサイトが表示される

脆弱性の実装例

【参考: 株式会社ラック, “モバイルアプリ開発時に注意!アクセス制限不備の脆弱性と対策”, LAC WATCH, 2021/6/25, https://www.lac.co.jp/lacwatch/people/20210625_002645.html, (2024/12/24アクセス)】

Custom URL Schemeの脆弱性コード

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_webview);
    WebView webView = findViewById(R.id.webview);
    Intent intent = getIntent();
    Uri uri = intent.getData();
    String query = uri.getQueryParameter("url");
    webView.loadUrl(query);
}

WebViewActivity起動時にIntentを受け取り,Intentに含まれているURIを取得している.その後getQueryParameterからurlの内容を取得し,WebViewで表示をしている. urlパラメータに任意のURLを入れることが可能で,フィッシングサイトへの誘導などが可能.

対策

【参考: 株式会社ラック, “モバイルアプリ開発時に注意!アクセス制限不備の脆弱性と対策”, LAC WATCH, 2021/6/25, https://www.lac.co.jp/lacwatch/people/20210625_002645.html, (2024/12/24アクセス)】

  • 外部から受け取ったURLを表示する場合,表示可能なWebサイトを想定されているWebサイトに限定する
  • URLの検証が必要