FlawOpen

flawopen.com/Teardowns/cve-2026-49878-android-wpa-supplicant-oob-write

● CVE-2026-49878 · CVSS 7.2 · उच्च
सुरक्षा अनुसंधान · FlawOpen

CVE-2026-49878: Android Wi-Fi में सीमा से बाहर लेखन

Android की अक्टूबर 2026 सुरक्षा सूचना इस Wi-Fi रिमोट कोड निष्पादन दोष को High बताती है। AOSP ने दो int arrays का byte-count आवंटन ठीक किया। रिकॉर्ड के अनुसार System privileges आवश्यक हैं।

💡 आसान भाषा में (ELI5)

मान लें हर वस्तु के लिए पूरा डिब्बा रखने वाली शेल्फ है, लेकिन कर्मचारी हर डिब्बे के लिए केवल एक सेंटीमीटर जगह तय करता है। डिब्बे बाहर निकल जाते हैं। CVE-2026-49878 में wpa_supplicant ने पूर्णांकों की संख्या को byte संख्या समझकर जगह ली और फिर पूरे पूर्णांक लिखे। Google का पैच हर तत्व के वास्तविक आकार की जगह लेता है।

इस पेज के मुख्य शब्द

wpa_supplicant
Android का Wi-Fi घटक, जो wireless authentication और संबंधित 802.11 संचार संभालता है।
SCS response
Stream Classification Service का response action frame। handler इसे तभी संभालता है जब अनुरोध लंबित हो और dialog token मेल खाए।
सीमा से बाहर लेखन (CWE-787)
आरक्षित memory क्षेत्र के आगे लिखना। यहां bytes आवंटित हुए, लेकिन buffer को int तत्वों की तरह index किया गया।
os_zalloc / os_calloc
wpa_supplicant के allocation helpers। patch संख्या और तत्व आकार देकर पूरा array आवंटित करता है।
Android सुरक्षा patch level (SPL)
स्थापित अपडेट स्तर की तारीख। Google के अनुसार 2026-10-01 या बाद का स्तर बुलेटिन की समस्याएं ठीक करता है; वितरण निर्माता पर निर्भर है।

फ्रेमवर्क मैपिंग

  • इस गाइड में बताई गई कमजोरी के लिए CWE संदर्भ: CWE-787

मूल कारण विश्लेषण (Root Cause)

wpas_handle_robust_av_scs_recv_action में scs_resp[0] और [1], int * arrays हैं। सुधार से पहले os_zalloc(num_active_scs) केवल उतने bytes आवंटित करता था। कोड index पर integer IDs और status लिखता है, इसलिए num_active_scs * sizeof(int) bytes चाहिए। लंबित अनुरोध, मिलता dialog token, संख्या और frame length की जांच इनपुट सीमित करती है, पर allocation की इकाई ठीक नहीं करती। AOSP patch दोनों calls को os_calloc(num_active_scs, sizeof(int)) से बदलता है। केवल इस सीमा-बाह्य लेखन से attacker-controlled code execution निष्कर्षित न करें।

हमले का चरण-दर-चरण प्रवाह

चरण 1

response frame handler तक भेजा जाता है

Wi-Fi path Robust AV SCS Response को प्रभावित handler तक पहुंचाता है। path network-facing है, पर स्रोत नहीं दिखाते कि कोई भी unauthenticated sender सभी शर्तें पूरी कर सकता है।

चरण 2

अनुरोध स्थिति और सीमाएं जांची जाती हैं

handler लंबित अनुरोध और मेल खाते token की मांग कर संख्या जांचता है। NVD में CISA-ADP vector AV:N/AC:L/PR:H/UI:N है; high-privilege आवश्यकता बनाए रखें।

चरण 3

पूर्णांक byte allocation से आगे लिखे जाते हैं

पुराना कोड प्रति प्रविष्टि एक byte लेता है, लेकिन int values लिखता है। संख्या सीमित करने से आवंटित bytes नहीं बढ़ते।

चरण 4

अक्टूबर patch allocation ठीक करता है

Google परिवर्तन दोनों arrays के लिए num_active_scs तत्व, प्रत्येक sizeof(int) आकार, आवंटित करता है। payload न गढ़ें और diff से arbitrary code execution का दावा न करें।

सोर्स कोड: कमज़ोर बनाम सुरक्षित कार्यान्वयन

यह diff AOSP द्वारा commit d131540379d631d7dcb09b0169e4462bc65abcca में प्रकाशित code change है, पुनर्निर्मित pseudocode नहीं। os_zalloc(n) n को byte count मानता है; os_calloc(count, size) मांगी गई संख्या के elements आवंटित कर zero करता है। सुधार दोनों arrays ठीक करता है और allocation failure पर मौजूदा cleanup बनाए रखता है।

कमज़ोर कार्यान्वयन
/* AOSP सुधार से पहले: num_active_scs element count है,
 * लेकिन os_zalloc को यह byte count के रूप में मिलता है। */
scs_resp[0] = (int *) os_zalloc(num_active_scs);
if (!scs_resp[0])
    return;

scs_resp[1] = (int *) os_zalloc(num_active_scs);
if (!scs_resp[1]) {
    os_free(scs_resp[0]);
    return;
}
सुरक्षित और सुदृढ़ फ़िक्स
/* AOSP सुधार: हर entry के लिए पूरा int allocate करें। */
scs_resp[0] = os_calloc(num_active_scs, sizeof(int));
if (!scs_resp[0])
    return;

scs_resp[1] = os_calloc(num_active_scs, sizeof(int));
if (!scs_resp[1]) {
    os_free(scs_resp[0]);
    return;
}

इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट

स्रोत