OWASP 類別: MASVS-PLATFORM:平台互動
總覽
深層連結的安全性風險源自於其核心功能,也就是在行動應用程式中提供順暢的導覽和互動體驗。深層連結漏洞源自於深層連結的實作或處理方式有缺陷。惡意人士可能會利用這些安全漏洞,獲得特殊權限功能或資料的存取權,進而可能導致資料侵害、侵犯隱私權,以及未經授權的動作。攻擊者可以透過各種技巧利用這些安全漏洞,例如深層連結劫持和資料驗證攻擊。
影響
如果缺乏適當的深層連結驗證機制,或不安全地使用深層連結,惡意使用者就可能會執行攻擊,例如主機驗證繞過、跨應用程式指令碼,以及在有安全漏洞的應用程式權限內容中執行遠端程式碼。視應用程式的性質而定,這可能會導致未經授權存取機密資料或函式。
因應措施
防止深層連結遭到入侵
根據設計,Android 允許多個應用程式為相同的深層連結 URI 註冊意圖篩選器。如要防止惡意應用程式攔截應用程式專用的深層連結,請在應用程式的 AndroidManifest
內的 intent-filter
中實作 android:autoVerify
屬性。使用者可以選取偏好的應用程式來處理深層連結,確保所需的操作,並防止惡意應用程式自動解讀深層連結。
Android 12 引入更嚴格的網頁意圖處理機制,以提升安全性。應用程式現在必須經過驗證,才能處理特定網域的連結,方法是透過 Android 應用程式連結或系統設定中的使用者選項。這可避免應用程式將不應處理的連結劫持。
如要為應用程式啟用連結處理驗證功能,請新增符合下列格式的意圖篩選器 (這個範例取自「驗證 Android 應用程式連結」說明文件):
<!-- Make sure you explicitly set android:autoVerify to "true". -->
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- If a user clicks on a shared link that uses the "http" scheme, your
app should be able to delegate that traffic to "https". -->
<data android:scheme="http" />
<data android:scheme="https" />
<!-- Include one or more domains that should be verified. -->
<data android:host="..." />
</intent-filter>
導入完善的資料驗證機制
深層連結可包含額外參數,以便提供給目標意圖,例如執行進一步動作。安全深層連結處理的基礎是嚴格的資料驗證。開發人員應仔細驗證並處理深層連結傳入的所有資料,以免惡意程式碼或值在合法應用程式中注入。您可以透過檢查任何深層連結參數的值,與預先定義的預期值許可清單進行比對,實作這項功能。
應用程式應先檢查其他相關的內部狀態 (例如驗證狀態或授權),再揭露機密資訊。舉例來說,當使用者完成遊戲關卡時,系統就會提供獎勵。在這種情況下,建議您驗證已完成關卡的先決條件,如果沒有,則重新導向至主畫面。
資源
- 驗證 Android 應用程式連結
- 處理 Android 應用程式連結
- 網路意圖解析
- 帳戶盜用攔截 Arrive 應用程式的魔法連結
- 深層連結與 WebView 濫用行為,第 1 部分
- 深層連結與 WebView 漏洞利用方法,第 2 部分
- 最近建議的 Jetpack Navigation 深層連結問題