
CVE-2026-28576のPoCおよびレッドチームアプリ。Android Contacts ProviderにおけるゼロパーミッションのSQLインジェクションで、連絡先データベース全体の窃取を可能にする。
CVE-2026-28576 は、Android Contacts Provider フレームワーク (ContactsProvider2.queryLocal()) における重大なアクセス制御の脆弱性です。この欠陥により、宣言されたパーミッションがゼロ の状態でローカルにインストールされた非特権アプリケーションが、デバイス全体の連絡先データベースを窃取でき、氏名、電話番号、住所、メールアドレスを含むすべての情報が漏洩します。
| 属性 | 値 |
|---|---|
| CVE ID | CVE-2026-28576 |
| GHSA ID | GHSA-ph86-9mcx-3p6r |
| Android Bug ID | A-488593616 |
| CWE | CWE-89: SQL コマンドで使用される特殊要素の不適切な中和 ('SQL インジェクション') |
| CVSS v4.0 | 10.0 (Critical) - AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H |
| EPSS スコア | 0.148% (4 パーセンタイル) |
| 公開日 | 2026 年 6 月 17 日 |
| コンポーネント | Android Contacts Provider (ContactsProvider2) |
| 攻撃ベクター | ローカル (ゼロパーミッションアプリ) |
| ユーザー操作 | 不要 |
この脆弱性は、Android Contacts Provider フレームワーク (packages/providers/ContactsProvider) 内の ContactsProvider2.queryLocal() メソッドに存在します。このメソッドは、サニタイズされていないユーザー制御の入力を使用して SQL クエリを構築し、ContentResolver.query() を介して渡される selection および selectionArgs パラメータを通じた SQL インジェクションを可能にします。
ContentResolver.query()
→ ContactsProvider2.query()
→ ContactsProvider2.queryLocal() [VULNERABLE]
→ SQLiteQueryBuilder.buildQuery()
→ Raw SQL execution with unsanitized input
selection (String): パラメータ化されていない WHERE 句selectionArgs (String[]): 不適切にエスケープされた引数uri (Uri): content://com.android.contacts/... を対象とする Content URIREAD_CONTACTS、READ_PRIVILEGED_PHONE_STATE、その他の危険なパーミッションは一切不要queryLocal() メソッドは、selection パラメータを適切にパラメータ化せずに SQL WHERE 句に直接連結して処理します:
// Simplified vulnerable pattern in ContactsProvider2.java
public Cursor queryLocal(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
qb.setTables(Tables.CONTACTS);
// VULNERABLE: selection directly interpolated into SQL
String whereClause = buildWhereClause(selection, selectionArgs);
Cursor c = qb.query(db, projection, whereClause, null, null, null, sortOrder);
return c;
}
攻撃者は、次のような悪意のある selection パラメータを作成します:
"1=1) UNION SELECT _id, display_name, phone_number, email_address, postal_address FROM raw_contacts--"
これにより、意図されたクエリロジックがバイパスされ、すべての連絡先フィールドが抽出されます。
graph TD
A[Malicious App Installed] --> B[Request ContentResolver.query]
B --> C[Craft SQL Injection Payload]
C --> D[Target content://com.android.contacts/data]
D --> E[ContactsProvider2.queryLocal]
E --> F[Unsanitized selection parameter]
F --> G[SQL Injection Executed]
G --> H[Full Contacts DB Returned]
H --> I[Exfiltrate via Network/Logs]UNION/UPDATE インジェクションによる連絡先データの改ざんの可能性| Android バージョン | ステータス |
|---|---|
| Android 14 (U) | 脆弱 |
| Android 15 (V) | 脆弱 |
| Android 16 (W) | 脆弱 |
| Android 17 (2026 年 6 月以降) | 修正済み |
rule Android_ContactsProvider_SQLi_CVE_2026_28576 {
meta:
description = "Detects SQL injection payloads targeting ContactsProvider"
cve = "CVE-2026-28576"
severity = "critical"
strings:
$s1 = "content://com.android.contacts" nocase
$s2 = "UNION SELECT" nocase
$s3 = "raw_contacts" nocase
$s4 = "data1" nocase
$s5 = "1=1" nocase
condition:
$s1 and 2 of ($s2, $s3, $s4, $s5)
}
alert http any any -> any any (
msg:"CVE-2026-28576 Contacts Exfiltration";
flow:established,to_server;
content:"contacts";
http.uri;
pcre:"/UNION.*SELECT.*raw_contacts/i";
classtype:web-application-attack;
sid:202628576;
rev:1;
)
ContentResolver.query() を制限するselection パラメータについて ContactsProvider クエリログを監査するREAD_CONTACTS パーミッションなしで content://com.android.contacts URI を使用しているアプリをスキャンするCVE-2026-28576 研究リポジトリ用に生成されたドキュメント 最終更新: 2025 年 9 月
| データカテゴリ | 露出するフィールド |
|---|
| 識別情報 | display_name, phonetic_name, nickname, company, title |
| 電話番号 | number, type (mobile, home, work, fax など), label |
| メールアドレス | address, type (home, work, other), label |
| 住所 | street, city, region, postcode, country, type |
| 構造化データ | mimetype, data1–data15, sync1–sync4 |
| メタデータ | contact_id, raw_contact_id, version, dirty, deleted |