開發人員請注意,如果您的應用程式含有隱式 PendingIntent 安全漏洞,請詳閱本文資訊。
問題說明
您的一或多個應用程式含有隱式 PendingIntent 問題,可能為使用者帶來種種安全威脅。比如,不肖人士可能會藉此「發動阻斷服務攻擊」、「竊取私人資料」及「提升權限」。請按照下列詳細步驟修正應用程式的問題。您可以在 Play 管理中心的通知專區,瞭解應用程式的哪些位置使用隱式 PendingIntent。如果位置結尾是「(in dynamically loaded code)」,代表位置位於由應用程式或應用程式所用程式庫動態載入的程式碼。雖然有其他不建議採用的技術 (有些不建議採用的技術也違反 Google Play 政策,且不應使用),應用程式通常會視需求提供功能而使用動態載入的程式碼。此外,封裝程式也能將應用程式程式碼轉換成動態載入的程式碼。
我們建議您修正這個問題,但不強制您這麼做。這個問題不會影響應用程式的發布狀態。
其他詳細資訊
Android 應用程式會使用意圖在元件之間傳送訊息。意圖可以指定目標元件 (明確意圖) 或列出一般動作,然後讓作業系統將意圖提交至裝置上註冊相符意圖篩選器的任何元件 (隱含意圖)。
PendingIntent 是委派給其他應用程式的意圖,將於未來某個時間點提交。在 PendingIntent 中納入隱含意圖會產生安全漏洞,不肖人士可能會藉此「發動阻斷服務攻擊」、「竊取私人資料」及「提升權限」。
後續步驟
1. 按照下方標明的步驟更新應用程式,修正「隱式 PendingIntent」快訊指出的問題。
檢查應用程式中會建立 PendingIntent 的地方。舉例來說,以下程式碼就會建立納入隱含意圖的 PendingIntent:
// 建立隱含意圖並納入 PendingIntent
Intent base = new Intent("ACTION_FOO");
base.setPackage("some_package");
PendingIntent pi = PendingIntent.getService(this, 0, base, 0);
Google 建議開發人員採用下列任何做法 (最好全部採用) 修正安全漏洞:
- 確認基礎意圖的動作、套件和元件欄位均已妥善設定;
- 確保 PendingIntent 只會傳送至信任的元件;
- 使用 FLAG_IMMUTABLE (在 SDK 23 中加入) 建立 PendingIntent。這樣可以防止收到 PendingIntent 的應用程式填入尚未填寫的屬性。如果應用程式也會在搭載 SDK 22 以下版本的裝置上執行,我們建議開發人員除了採用上述做法外,也可以使用下列格式強化 PendingIntent 建立程序:
if (android.os.Build.VERSION.SDK_INT >= 23) {
// 使用 FLAG_IMMUTABLE 建立 PendingIntent
} else {
// 會建立 PendingIntent 的現有程式碼
}
2. 提交更新的 APK
如何提交更新版應用程式套件或 APK:
- 前往 Play 管理中心。
- 選取應用程式。
- 前往應用程式套件探索工具頁面。
- 在右上方的下拉式選單中,選取不符規定 APK/應用程式套件的應用程式版本,然後記下其所屬的發布版本。
- 前往發生政策違規問題的測試群組,也就是以下其中一個頁面:內部測試、封閉測試、公開測試或正式版。
- 按一下頁面右上方附近的「建立新版本」 (您可能需要先按一下 [管理測試群組])。
- 如果含有違規 APK 的發布版本處於草稿狀態,請捨棄該版本。
- 新增符合政策規範的應用程式套件或 APK 版本。
- 確認不符規定的應用程式套件或 APK 版本位在該發布版本的「不含」部分。如需進一步指引,請參閱 Play 管理中心說明文章中的「未包含 (應用程式套件和 APK)」一節。
- 選取 [儲存] 即可儲存對版本所做的任何變更。
- 完成版本準備作業後,請選取「檢查版本」。
如果不符規定的 APK 已發布至多個測試群組,請在每個測試群組中重複執行步驟 5 至 9。
在您的申請進入審查階段前,新提交的應用程式或更新版本將處於審查中狀態。如果應用程式的問題未確實更正,您仍會收到警告。
我們很樂意提供協助
如有關於安全漏洞的技術問題,請前往 Stack Overflow 提問並加上「android-security」標記。如需進一步瞭解這個問題的解決步驟,歡迎洽詢支援團隊。