Im März 2024 wurde eine Sicherheitslücke im Linux-Kernel entdeckt, die es Angreifern mit Zugriff auf das System erlaubt, Root-Rechte zu erlangen. Es gibt bereits Test-Exploits für die Kernel aktueller Distributionen.
Die Schwachstelle entsteht durch eine Race Condition in der Funktion »gsm_dlci_config()« des GSM-Subsystems im Kernel [1]. Das besagte Subsystem ist zuständig für das Global System for Mobile Communications (GSM). Es umfasst Treiber, Module und Funktionen zur Interaktion mit GSM-Hardware und den Protokollen für die Mobilfunkkommunikation. GSM-Treiber befähigen Geräte dazu, ähnlich wie Mobiltelefone mobile Breitbandverbindungen herzustellen und darüber das Internet zu nutzen. Zudem ermöglicht der Treiber das Senden und Empfangen von SMS-Nachrichten sowie das Steuern ein- und ausgehender Anrufe.
Die Funktion »gsm_dlci_config()« ist im GSM-Subsystem des Kernels dafür zuständig, die Konfiguration für eine DLCI-Verbindung (Data Link Connection Identifier) festzulegen. DLCIs dienen dazu, Datenverbindungen zwischen verschiedenen Geräten oder Diensten im GSM-Netzwerk aufzubauen. Eine Race Condition tritt ganz allgemein dann auf, wenn zwei oder mehr Prozesse oder Threads gleichzeitig auf gemeinsame Ressourcen zugreifen und das Ergebnis davon abhängt, welcher Prozess oder Thread zuerst zum Zug kommt. Im konkreten Fall kann die Race Condition dazu führen, dass die Funktion »gsm_dlci_config()« sich unvorhersehbar verhält, was ein Angreifer ausnutzen kann, um unbeschränkten Zugriff auf das System zu erlangen.
Im konkreten Fall führt die Race Condition dazu, dass bereits freigegebener Speicher im Kernel nochmals benutzt wird (Use-after-free-Fehler). Im Einzelnen kommt es wie folgt zu der Sicherheitslücke: Ein DLCI-Objekt aus der Struktur »gsm_mux« und die Struktur »gsm_dlci_config« selbst werden an die Funktion »gsm_dlci_config()« übergeben. Die Funktion prüft zunächst, ob die Strukturen korrekte Argumente verwenden, und eruiert dann, ob die DLCI neu gestartet werden muss. Das erledigt ein besonderer Abschnitt, der »gsm_dlci_begin_close()« und direkt danach »wait_event_interruptible()« aufruft. Letztere wartet darauf, dass der DLCI-Zustand geschlossen wird. Während dieser Zeit lässt sich der DLCI manipulieren, was der Angreifer ausnutzen kann.
Das Prozedere funktioniert allerdings nur bei aktivierter GSM-Funktion des Kernels. Zusätzlich muss die Xen-Virtualisierung im Linux-Kernel aktiv sein. Sie ermöglicht das Ausführen mehrerer virtueller Maschinen auf einem physischen Host. Durch spezielle Kernel-Module und Treiber ermöglicht sie die effiziente Ressourcennutzung und Isolation verschiedener Betriebssysteme und Anwendungen in einer virtualisierten Umgebung.
Da der Angreifer direkten Zugriff auf das System benötigt, muss er auf dem betroffenen System auch ein Benutzerkonto besitzen. Deswegen bezeichnet der Entdecker die Lücke auch als GSM Kernel LPE (Local Privilege Escalation). Exploits existieren bereits für mehrere Distributionen [2]. Besonders kritisch an der Schwachstelle: Sie war zum Zeitpunkt ihrer Entdeckung wahrscheinlich in allen Kernel-Versionen vorhanden. Derartige Zero-Day-Lücken sind besonders gefürchtet, wenn sich gleichzeitig mehrere Exploits im Umlauf befinden. Im vorliegenden Fall muss man davon ausgehen, dass zahlreiche Systeme davon betroffen sind und eventuell kompromittiert wurden.
Infos
- Beschreibung der Schwachstelle: https://jmpeax.dev/The-tale-of-a-GSM-Kernel-LPE.html
- Beispiel-Exploit: https://github.com/jmpe4x/GSM_Linux_Kernel_LPE_Nday_Exploit/tree/main






