flawopen.com/Teardowns/cve-2024-33066-qualcomm-wlan-log-redirection
CVE-2024-33066: Qualcomm-WLAN-Logfehler
CVE-2024-33066 beschädigt Speicher, wenn Qualcomms WLAN Resource Manager Logs an einen gewählten Pfad umleitet. Behoben im Okt. 2024.
Stellen Sie sich eine Hotelrezeption vor, bei der jeder anrufen und sagen darf: „Schicken Sie Kopien des Gästebuchs ab sofort an diese Adresse.“ Der Rezeptionist schreibt alles Diktierte auf eine kleine Karteikarte, auch wenn der Text über den Kartenrand hinaus auf den Tresen läuft, und schickt die Kopien dann dorthin, wo es steht – auch in den Safe des Direktors. Die Lösung: nur ein kurzes Etikett annehmen, das eine Schublade im Archivraum benennt.
Kernkonzepte & Begriffe
WLAN Resource Manager- Die in Qualcomms Hinweis zu
CVE-2024-33066genannte WLAN-Komponente. Sie läuft auf Qualcomms Netzwerkplattformen, die in Routern, Mesh-Systemen und Access Points eingesetzt werden. IPQ-/QCN-Chips- Qualcomms Familien von WLAN-Netzwerk-System-on-Chips. Betroffen sind unter anderem IPQ5332, IPQ8074A, IPQ9574, QCN9000 und Immersive-Home-Plattformen, keine Smartphone-Chips.
CWE-20- Unzureichende Eingabevalidierung: Die Software vertraut einer Eingabe, ohne zu prüfen, ob sie die Eigenschaften hat, auf die sich der Code verlässt, etwa eine Maximallänge oder ein erlaubtes Verzeichnis.
Verzeichnisrelatives Öffnen- Eine Datei mit
openat()relativ zu einem Verzeichnisdeskriptor und mit einem einfachen Namen ohne '/' öffnen, sodass das Ergebnis dieses Verzeichnis nicht verlassen kann. CVSS-3.1-Vektor- AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H: über das Netzwerk erreichbar, geringe Komplexität, keine Rechte oder Benutzerinteraktion nötig, hohe Auswirkung auf alle drei Schutzziele (Wert 9.8).
Framework-Zuordnungen
- CWE-Referenz für die in diesem Leitfaden beschriebene Schwachstelle: CWE-20
Ursachenanalyse
Qualcomms Hinweis besagt nur, dass im WLAN Resource Manager Speicher beschädigt wurde "while redirecting log file to any file location with any file name" (CWE-20). Das mit einer Anfrage zur Log-Umleitung gelieferte Ziel wurde verwendet, ohne Länge oder Zielort zu prüfen. Der Code unten modelliert diese Lücke in der Eingabeprüfung; er ist illustrativ und kein Qualcomm-Quellcode.
Schritt-für-Schritt Angriffsablauf
1. Eine Anfrage zur Log-Umleitung trifft ein
Der WLAN Resource Manager nimmt eine Anfrage an, seine Log-Ausgabe anderswohin zu schreiben. Der CVSS-Vektor (AV:N/PR:N/UI:N) stuft die Schwachstelle als über das Netzwerk ohne Rechte und ohne Benutzerinteraktion erreichbar ein.
2. Jeder Ort und jeder Name wird akzeptiert
Laut Qualcomms Beschreibung funktionierte die Umleitung an jeden Ort und mit jedem Dateinamen: Das angefragte Ziel wurde weder auf Länge noch auf den Zielort geprüft.
3. Ungeprüfte Eingabe beschädigt Speicher
Im Modell unten überläuft ein Name, der länger als der feste Pfadpuffer ist, diesen Puffer (strcpy), und jeder Pfad – auch Konfigurationsdateien – kann zum Schreiben geöffnet werden. Welcher dieser Fälle in Qualcomms Code auftrat, hat Qualcomm nicht veröffentlicht.
4. Auswirkung und Status
CVSS 3.1 bewertet die Auswirkung auf Vertraulichkeit, Integrität und Verfügbarkeit als hoch (9.8). Qualcomm hat die Korrektur im Bulletin vom Oktober 2024 an die Gerätehersteller geliefert; die Einstufung der CISA verzeichnet keine bekannte Ausnutzung.
Quellcode: Verwundbar vs. Sicher
Illustratives Modell der Schwachstellenklasse, kein Qualcomm-Code. Der gehärtete Handler begrenzt die Eingabe mit strnlen, bevor er sie verwendet, akzeptiert nur einen kurzen Namen aus einem festen Zeichensatz (kein '/', kein führender '.') und öffnet ihn mit openat() relativ zu einem beim Start gewählten Log-Verzeichnis, mit O_NOFOLLOW, damit ein platzierter Symlink den Schreibvorgang nicht umlenkt. Der Aufrufer kann den Dateinamen wählen, nie aber den Ort, und überlange Eingaben werden abgelehnt statt kopiert.
#include <fcntl.h>
#include <string.h>
#define LOG_PATH_MAX 64
struct rm_log_cfg {
char path[LOG_PATH_MAX];
int fd;
};
/* Verarbeitet eine Anfrage zur Protokollumleitung; `requested` stammt aus dem Anforderungstext. */
int rm_set_log_destination(struct rm_log_cfg *cfg, const char *requested)
{
strcpy(cfg->path, requested); /* keine Längenprüfung: Eine lange Eingabe überschreibt path[] */
cfg->fd = open(cfg->path, O_WRONLY | O_CREAT | O_APPEND, 0644); /* beliebiger Speicherort */
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; /* festes Protokollverzeichnis, einmalig beim Start geöffnet */
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; /* weist '/' zurück, sodass der Name dir_fd nicht verlassen kann */
}
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;
}
Checkliste für Engineering & Systemsicherheit
- ✓Rufen Sie in der CI rm_set_log_destination mit einem 64 Zeichen langen Namen, '../etc/passwd', '/tmp/x', '.hidden' und einem Namen mit '/' auf und prüfen Sie, dass jeder Aufruf -EINVAL liefert, ohne eine Datei anzulegen.
- ✓Lassen Sie die CI bei neuen strcpy- oder sprintf-Aufrufen scheitern, die Anfragefelder in Puffer fester Größe schreiben (etwa per semgrep- oder clang-tidy-Regel); verlangen Sie eine explizite Grenze wie strnlen oder snprintf.
- ✓Lösen Sie jede vom Aufrufer wählbare Ausgabedatei mit
openat()relativ zu einem beim Start geöffneten Verzeichnisdeskriptor auf und übergeben Sie O_NOFOLLOW, damit kein Name dieses Verzeichnis verlassen kann. - ✓Erfassen Sie Router und Access Points mit IPQ-/QCN-Chips, prüfen Sie, ob ihre Firmware Qualcomms Korrektur vom Oktober 2024 enthält, und halten Sie Verwaltungs- und Diagnoseschnittstellen in einem Administrationsnetz.