flawopen.com/Teardowns/cve-2026-49878-android-wpa-supplicant-oob-write
CVE-2026-49878: penulisan di luar batas pada Wi-Fi Android
Buletin Android Oktober 2026 menilai celah eksekusi kode jarak jauh pada Wi-Fi ini sebagai High. AOSP memperbaiki dua array int yang dialokasikan berdasarkan byte, bukan elemen. Catatan menyebut hak akses sistem diperlukan.
Bayangkan rak yang memerlukan satu kotak untuk tiap barang, tetapi petugas hanya menyediakan ruang satu sentimeter per kotak. Kotak melampaui ruang rak. Pada CVE-2026-49878, wpa_supplicant menghitung byte berdasarkan jumlah integer, lalu menulis integer utuh. Patch Google menyediakan ruang sesuai ukuran tiap elemen.
Konsep Kunci & Istilah
wpa_supplicant- Komponen Wi-Fi Android yang mengelola autentikasi nirkabel dan interaksi 802.11 terkait.
Respons SCS- Frame aksi respons Stream Classification Service. Handler memprosesnya hanya jika permintaan tertunda dan dialog token cocok.
Penulisan di luar batas (CWE-787)- Penulisan melewati wilayah memori yang dialokasikan. Di sini alokasi menghitung byte, tetapi kode mengindeks elemen
int. os_zalloc / os_calloc- Fungsi alokasi wpa_supplicant. Patch memberikan jumlah dan ukuran elemen agar seluruh array dialokasikan.
Tingkat patch keamanan Android (SPL)- Tanggal yang menunjukkan tingkat pembaruan terpasang. Google menyatakan 2026-10-01 atau setelahnya memperbaiki isu buletin; produsen mengatur distribusi.
Pemetaan kerangka kerja
- Referensi CWE untuk kelemahan yang dijelaskan dalam panduan ini: CWE-787
Analisis Akar Masalah (Root Cause)
Di wpas_handle_robust_av_scs_recv_action, scs_resp[0] dan [1] adalah array int *. Sebelum perbaikan, os_zalloc(num_active_scs) hanya menyediakan sejumlah byte tersebut. Kode menulis ID dan status integer pada posisi berindeks, sehingga diperlukan num_active_scs * sizeof(int) byte. Pemeriksaan permintaan tertunda, dialog token yang cocok, jumlah, dan panjang frame membatasi masukan, tetapi tidak memperbaiki satuan alokasi. Patch AOSP mengganti kedua pemanggilan dengan os_calloc(num_active_scs, sizeof(int)). Jangan menyimpulkan jalur eksekusi kode yang dikendalikan penyerang hanya dari penulisan di luar batas ini.
Alur Serangan Langkah demi Langkah
Frame respons diteruskan
Jalur Wi-Fi meneruskan Robust AV SCS Response ke handler terdampak. Jalurnya melalui jaringan, tetapi sumber publik tidak membuktikan pengirim anonim dapat memenuhi semua prasyarat.
Status permintaan dan batas diperiksa
Handler mensyaratkan permintaan tertunda dan token cocok, lalu memeriksa jumlah. Vektor CISA-ADP di NVD adalah AV:N/AC:L/PR:H/UI:N; pertahankan syarat hak akses tinggi.
Nilai integer melampaui alokasi byte
Kode lama menyediakan satu byte per entri tetapi menulis nilai int. Membatasi jumlah tidak menambah byte yang dialokasikan.
Patch Oktober memperbaiki alokasi
Perubahan Google menyediakan num_active_scs elemen berukuran sizeof(int) bagi kedua array. Jangan membuat payload atau menyatakan diff membuktikan eksekusi kode arbitrer.
Kode Sumber: Rentan vs Aman
Diff ini adalah perubahan kode AOSP yang diterbitkan pada commit d131540379d631d7dcb09b0169e4462bc65abcca, bukan pseudocode rekonstruksi. os_zalloc(n) memakai n sebagai jumlah byte; os_calloc(count, size) mengalokasikan dan mengosongkan jumlah elemen yang diminta. Perbaikan mengubah kedua array dan mempertahankan pembersihan jika alokasi gagal.
/* AOSP sebelum perbaikan: num_active_scs adalah jumlah elemen,
* tetapi os_zalloc menerimanya sebagai jumlah byte. */
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;
}
/* Perbaikan AOSP: alokasikan satu int utuh untuk setiap entri. */
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;
}
Daftar Periksa Penguatan Sistem Rekayasa
- ✓Pada Android 14–17, pastikan SPL 2026-10-01 atau setelahnya dan konfirmasi ketersediaan dari produsen.
- ✓Jika komponen dikirim melalui Google Play system update, periksa juga status pembaruan Wi-Fi Mainline.
- ✓Dalam C, hitung ukuran array bertipe dengan
element_count * sizeof(*pointer)atau gunakanos_callocyang telah ditinjau. - ✓Periksa kedua array
scs_resp; keduanya memerlukan kapasitas yang benar. - ✓Pertahankan pemeriksaan frame dan status, tetapi jangan menganggapnya pengganti perhitungan ukuran byte.
- ✓Jangan menyatakan perangkat telah diperbaiki hanya karena patch AOSP tersedia; pastikan pembaruan OEM atau Google Play system benar-benar terpasang.
Sumber
- Buletin Keamanan Android — Oktober 2026 (diperbarui 8 Oktober)
- Perbaikan AOSP Google — alokasi array SCS berdasarkan ukuran elemen
- Diff patch AOSP — koreksi alokasi CVE-2026-49878
- NVD — CVE-2026-49878; vektor CVSS dan CWE-787 dari CISA-ADP
- OSV — perbaikan cabang Android untuk A-511544607
- Revisi sumber AOSP yang rentan — robust_av.c