
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 (गंभीर) - 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% (चौथा पर्सेंटाइल) |
| प्रकाशित | 17 जून, 2026 |
| घटक | 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+) | पैच किया गया |
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
| डेटा श्रेणी | उजागर फ़ील्ड |
|---|
| पहचान | display_name, phonetic_name, nickname, company, title |
| फ़ोन नंबर | number, type (मोबाइल, घर, कार्यालय, फैक्स, आदि), label |
| ईमेल पते | address, type (घर, कार्यालय, अन्य), label |
| डाक पते | street, city, region, postcode, country, type |
| संरचित डेटा | mimetype, data1–data15, sync1–sync4 |
| मेटाडेटा | contact_id, raw_contact_id, version, dirty, deleted |