// For flags

CVE-2024-38605

ALSA: core: Fix NULL module pointer assignment at card init

Severity Score

8.8
*CVSS v3.1

Exploit Likelihood

*EPSS

Affected Versions

*CPE

Public Exploits

0
*Multiple Sources

Exploited in Wild

-
*KEV

Decision

Attend
*SSVC
Descriptions

In the Linux kernel, the following vulnerability has been resolved:

ALSA: core: Fix NULL module pointer assignment at card init

The commit 81033c6b584b ("ALSA: core: Warn on empty module")
introduced a WARN_ON() for a NULL module pointer passed at snd_card
object creation, and it also wraps the code around it with '#ifdef
MODULE'. This works in most cases, but the devils are always in
details. "MODULE" is defined when the target code (i.e. the sound
core) is built as a module; but this doesn't mean that the caller is
also built-in or not. Namely, when only the sound core is built-in
(CONFIG_SND=y) while the driver is a module (CONFIG_SND_USB_AUDIO=m),
the passed module pointer is ignored even if it's non-NULL, and
card->module remains as NULL. This would result in the missing module
reference up/down at the device open/close, leading to a race with the
code execution after the module removal.

For addressing the bug, move the assignment of card->module again out
of ifdef. The WARN_ON() is still wrapped with ifdef because the
module can be really NULL when all sound drivers are built-in.

Note that we keep 'ifdef MODULE' for WARN_ON(), otherwise it would
lead to a false-positive NULL module check. Admittedly it won't catch
perfectly, i.e. no check is performed when CONFIG_SND=y. But, it's no
real problem as it's only for debugging, and the condition is pretty
rare.

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: ALSA: núcleo: corrige la asignación del puntero del módulo NULL en el inicio de la tarjeta el commit 81033c6b584b ("ALSA: núcleo: Advertencia sobre módulo vacío") introdujo un WARN_ON() para un puntero de módulo NULL pasado en la creación del objeto snd_card, y también envuelve el código a su alrededor con '#ifdef MODULE'. Esto funciona en la mayoría de los casos, pero los problemas siempre están en los detalles. "MÓDULO" se define cuando el código objetivo (es decir, el núcleo de sonido) se construye como un módulo; pero esto no significa que la persona que llama también esté integrada o no. Es decir, cuando solo el núcleo de sonido está integrado (CONFIG_SND=y) mientras el controlador es un módulo (CONFIG_SND_USB_AUDIO=m), el puntero del módulo pasado se ignora incluso si no es NULL, y tarjeta->módulo permanece como NULL. Esto daría como resultado que la referencia del módulo faltante suba o baje en la apertura o cierre del dispositivo, lo que provocaría una ejecución con la ejecución del código después de la eliminación del módulo. Para solucionar el error, mueva la asignación de tarjeta->módulo nuevamente fuera de ifdef. WARN_ON() todavía está incluido en ifdef porque el módulo puede ser realmente NULL cuando todos los controladores de sonido están integrados. Tenga en cuenta que mantenemos 'ifdef MODULE' para WARN_ON(); de lo contrario, se produciría una verificación de módulo NULL falsamente positiva. Es cierto que no se detectará perfectamente, es decir, no se realiza ninguna verificación cuando CONFIG_SND=y. Pero no es un problema real ya que es solo para depurar y la condición es bastante rara.

*Credits: N/A
CVSS Scores
Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High
* Common Vulnerability Scoring System
SSVC
  • Decision:Attend
Exploitation
None
Automatable
Yes
Tech. Impact
Total
* Organization's Worst-case Scenario
Timeline
  • 2024-06-18 CVE Reserved
  • 2024-06-19 CVE Published
  • 2024-06-20 EPSS Updated
  • 2024-08-02 CVE Updated
  • ---------- Exploited in Wild
  • ---------- KEV Due Date
  • ---------- First Exploit
CWE
  • CWE-476: NULL Pointer Dereference
CAPEC
Affected Vendors, Products, and Versions
Vendor Product Version Other Status
Vendor Product Version Other Status <-- --> Vendor Product Version Other Status
Linux
Search vendor "Linux"
Linux Kernel
Search vendor "Linux" for product "Linux Kernel"
>= 5.9 < 5.10.219
Search vendor "Linux" for product "Linux Kernel" and version " >= 5.9 < 5.10.219"
en
Affected
Linux
Search vendor "Linux"
Linux Kernel
Search vendor "Linux" for product "Linux Kernel"
>= 5.9 < 5.15.161
Search vendor "Linux" for product "Linux Kernel" and version " >= 5.9 < 5.15.161"
en
Affected
Linux
Search vendor "Linux"
Linux Kernel
Search vendor "Linux" for product "Linux Kernel"
>= 5.9 < 6.1.93
Search vendor "Linux" for product "Linux Kernel" and version " >= 5.9 < 6.1.93"
en
Affected
Linux
Search vendor "Linux"
Linux Kernel
Search vendor "Linux" for product "Linux Kernel"
>= 5.9 < 6.6.33
Search vendor "Linux" for product "Linux Kernel" and version " >= 5.9 < 6.6.33"
en
Affected
Linux
Search vendor "Linux"
Linux Kernel
Search vendor "Linux" for product "Linux Kernel"
>= 5.9 < 6.8.12
Search vendor "Linux" for product "Linux Kernel" and version " >= 5.9 < 6.8.12"
en
Affected
Linux
Search vendor "Linux"
Linux Kernel
Search vendor "Linux" for product "Linux Kernel"
>= 5.9 < 6.9.3
Search vendor "Linux" for product "Linux Kernel" and version " >= 5.9 < 6.9.3"
en
Affected
Linux
Search vendor "Linux"
Linux Kernel
Search vendor "Linux" for product "Linux Kernel"
>= 5.9 < 6.10
Search vendor "Linux" for product "Linux Kernel" and version " >= 5.9 < 6.10"
en
Affected