FlawOpen

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

● CVE-2026-49878 · CVSS 7.2 · Tinggi
Riset Keamanan · FlawOpen

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.

💡 Penjelasan Sederhana (ELI5)

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

Langkah 1

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.

Langkah 2

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.

Langkah 3

Nilai integer melampaui alokasi byte

Kode lama menyediakan satu byte per entri tetapi menulis nilai int. Membatasi jumlah tidak menambah byte yang dialokasikan.

Langkah 4

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.

IMPLEMENTASI RENTAN
/* 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 AMAN & KUAT
/* 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

Sumber