flawopen.com/Teardowns/cve-2024-33066-qualcomm-wlan-log-redirection
CVE-2024-33066: cacat pengalihan log WLAN Qualcomm
CVE-2024-33066 dapat merusak memori saat WLAN Resource Manager Qualcomm mengalihkan log ke path pilihan pemanggil. Diperbaiki pada Oktober 2024.
Bayangkan meja resepsionis hotel yang membiarkan siapa pun menelepon dan berkata, "Mulai sekarang, kirim salinan buku tamu ke alamat ini." Resepsionis menyalin apa pun yang didiktekan ke kartu kecil, bahkan ketika tulisannya meluber keluar kartu sampai ke meja, lalu mengirim salinannya ke tempat yang tertulis, termasuk brankas manajer. Perbaikannya adalah hanya menerima label pendek yang menyebut satu laci di ruang arsip.
Konsep Kunci & Istilah
WLAN Resource Manager- Komponen Wi-Fi yang disebut dalam imbauan Qualcomm tentang
CVE-2024-33066. Komponen ini berjalan di platform jaringan Qualcomm yang dipakai pada router, sistem mesh, dan titik akses. Chipset IPQ / QCN- Keluarga system-on-chip jaringan Wi-Fi milik Qualcomm. Daftar yang terdampak mencakup IPQ5332, IPQ8074A, IPQ9574, QCN9000, dan platform Immersive Home, bukan chipset ponsel.
CWE-20- Validasi masukan yang tidak tepat: perangkat lunak memercayai masukan tanpa memeriksa apakah masukan itu memiliki sifat yang diandalkan kode, seperti panjang maksimum atau direktori yang diizinkan.
Pembukaan relatif direktori- Membuka berkas dengan
openat()terhadap deskriptor direktori, memakai nama polos tanpa '/', sehingga hasilnya tidak mungkin berada di luar direktori itu. Vektor CVSS 3.1- AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H: dapat dijangkau lewat jaringan, kompleksitas rendah, tanpa hak istimewa maupun interaksi pengguna, dampak tinggi pada ketiga sifat (skor 9.8).
Pemetaan kerangka kerja
- Referensi CWE untuk kelemahan yang dijelaskan dalam panduan ini: CWE-20
Analisis Akar Masalah (Root Cause)
Imbauan Qualcomm hanya menyebut bahwa WLAN Resource Manager mengalami korupsi memori "while redirecting log file to any file location with any file name" (CWE-20). Tujuan yang dikirim bersama permintaan pengalihan log dipakai tanpa memeriksa panjangnya maupun ke mana ia menunjuk. Kode di bawah memodelkan celah validasi masukan itu; kode ini bersifat ilustratif dan bukan kode sumber Qualcomm.
Alur Serangan Langkah demi Langkah
1. Permintaan pengalihan log tiba
WLAN Resource Manager menerima permintaan untuk mengirim keluaran lognya ke tempat lain. Vektor CVSS (AV:N/PR:N/UI:N) menilai celah ini dapat dijangkau lewat jaringan tanpa hak istimewa dan tanpa interaksi pengguna.
2. Lokasi dan nama apa pun diterima
Menurut deskripsi Qualcomm, pengalihan berfungsi ke lokasi mana pun dan dengan nama berkas apa pun: tujuan yang diminta tidak diperiksa panjangnya maupun ke mana ia menunjuk.
3. Masukan yang tidak diperiksa merusak memori
Dalam model di bawah, nama yang lebih panjang dari buffer jalur berukuran tetap akan meluap (strcpy), dan jalur apa pun, termasuk berkas konfigurasi, dapat dibuka untuk ditulis. Qualcomm tidak memublikasikan kasus mana yang terjadi di kodenya.
4. Dampak dan status
CVSS 3.1 menilai dampak pada kerahasiaan, integritas, dan ketersediaan sebagai tinggi (9.8). Qualcomm mengirim perbaikan ke produsen perangkat dalam buletin Oktober 2024; triase CISA tidak mencatat eksploitasi yang diketahui.
Kode Sumber: Rentan vs Aman
Model ilustratif dari kelas kerentanan ini, bukan kode Qualcomm. Handler yang diperkuat membatasi masukan dengan strnlen sebelum memakainya, hanya menerima nama pendek dari himpunan karakter tetap (tanpa '/', tanpa '.' di awal), lalu membukanya dengan openat() relatif terhadap direktori log yang dipilih saat mulai, dengan O_NOFOLLOW agar symlink yang ditanam tidak membelokkan penulisan. Pemanggil boleh memilih nama berkas, tetapi tidak pernah lokasinya, dan masukan yang terlalu panjang ditolak alih-alih disalin.
#include <fcntl.h>
#include <string.h>
#define LOG_PATH_MAX 64
struct rm_log_cfg {
char path[LOG_PATH_MAX];
int fd;
};
/* Menangani permintaan "redirect log"; `requested` berasal dari isi permintaan. */
int rm_set_log_destination(struct rm_log_cfg *cfg, const char *requested)
{
strcpy(cfg->path, requested); /* tanpa pemeriksaan panjang: input panjang melampaui batas path[] */
cfg->fd = open(cfg->path, O_WRONLY | O_CREAT | O_APPEND, 0644); /* lokasi mana pun */
return cfg->fd < 0 ? -1 : 0;
}
#include <errno.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
#define LOG_NAME_MAX 32
struct rm_log_cfg {
int dir_fd; /* direktori log tetap, dibuka sekali saat proses dimulai */
char name[LOG_NAME_MAX];
int fd;
};
static int valid_log_name(const char *name, size_t len)
{
if (len == 0 || len >= LOG_NAME_MAX || name[0] == '.')
return 0;
for (size_t i = 0; i < len; i++) {
char c = name[i];
int ok = (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') ||
c == '-' || c == '_' || c == '.';
if (!ok)
return 0; /* menolak '/', sehingga nama tidak dapat keluar dari dir_fd */
}
return 1;
}
int rm_set_log_destination(struct rm_log_cfg *cfg, const char *requested)
{
size_t len = strnlen(requested, LOG_NAME_MAX);
if (!valid_log_name(requested, len))
return -EINVAL;
int fd = openat(cfg->dir_fd, requested,
O_WRONLY | O_CREAT | O_APPEND | O_NOFOLLOW | O_CLOEXEC, 0600);
if (fd < 0)
return -errno;
memcpy(cfg->name, requested, len + 1);
if (cfg->fd >= 0)
close(cfg->fd);
cfg->fd = fd;
return 0;
}
Daftar Periksa Penguatan Sistem Rekayasa
- ✓Di CI, panggil rm_set_log_destination dengan nama 64 karakter, '../etc/passwd', '/tmp/x', '.hidden', dan nama yang mengandung '/', lalu pastikan setiap panggilan mengembalikan -EINVAL tanpa membuat berkas.
- ✓Gagalkan CI untuk panggilan strcpy atau sprintf baru yang menulis kolom permintaan ke buffer berukuran tetap (misalnya dengan aturan semgrep atau clang-tidy); wajibkan batas eksplisit seperti strnlen atau snprintf.
- ✓Selesaikan setiap berkas keluaran yang dapat dipilih pemanggil dengan
openat()terhadap deskriptor direktori yang dibuka saat mulai, dan berikan O_NOFOLLOW agar tidak ada nama yang bisa keluar dari direktori itu. - ✓Inventarisasi router dan titik akses berbasis chipset IPQ/QCN, pastikan firmware-nya memuat perbaikan Qualcomm Oktober 2024, dan batasi antarmuka manajemen serta diagnostik ke jaringan administratif.