Vulnerabilidad en kernel de Linux (CVE-2024-26996)
Gravedad CVSS v3.1:
ALTA
Tipo:
CWE-416
Utilización después de liberación
Fecha de publicación:
01/05/2024
Última modificación:
23/12/2024
Descripción
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: usb: gadget: f_ncm: corrige el objeto UAF ncm al volver a vincularlo después del error de transporte usb ep Cuando la función ncm está funcionando y luego detiene la interfaz usb0 para desconectar el enlace, se llama a eth_stop() . En este punto, accidentalmente, si ocurre un error de transporte USB en usb_ep_enable(), es posible que 'in_ep' y/o 'out_ep' no estén habilitados. Después de eso, se llama a ncm_disable() para deshabilitar ncm unbind, pero nunca se llama a gether_disconnect() ya que 'in_ep' no está habilitado. Como resultado, el objeto ncm se libera en ncm unbind pero 'dev->port_usb' asociado a 'ncm->port' no es NULL. Y cuando ncm se vincula nuevamente para recuperar netdev, el objeto ncm se reasigna pero la interfaz usb0 ya está asociada al objeto ncm lanzado anteriormente. Por lo tanto, una vez que la interfaz usb0 está activa y se llama a eth_start_xmit(), el objeto ncm liberado se desreferencia y podría causar memoria de use-after-free. [función de desvinculación a través de configfs] usb0: eth_stop dev->port_usb=ffffff9b179c3200 --> el error ocurre en usb_ep_enable(). NCM: ncm_disable: ncm=ffffff9b179c3200 --> no gether_disconnect() ya que ncm->port.in_ep->enabled es falso. NCM: ncm_unbind: ncm unbind ncm=ffffff9b179c3200 NCM: ncm_free: ncm free ncm=ffffff9b179c3200 <-- ncm liberado [enlace de función a través de configfs] NCM: ncm_alloc: ncm alloc ncm=ffffff9ac4f8a000 NCM: ncm_bind: cm enlazar ncm=ffffff9ac4f8a000 NCM: ncm_set_alt : ncm=ffffff9ac4f8a000 alt=0 usb0: eth_open dev->port_usb=ffffff9b179c3200 <-- ncm usb0 lanzado anteriormente: eth_start dev->port_usb=ffffff9b179c3200 <-- eth_start_xmit() --> dev->wrap() No se puede manejar el kernel solicitud de paginación en la dirección virtual dead00000000014f Este parche soluciona el problema verificando si 'ncm->netdev' no es NULL en ncm_disable() para llamar a gether_disconnect() para desasociar 'dev->port_usb'. Es más razonable marcar 'ncm->netdev' para llamar a gether_connect/disconnect en lugar de marcar 'ncm->port.in_ep->enabled' ya que es posible que no esté habilitado pero que se pueda establecer la conexión conjunta.
Impacto
Puntuación base 3.x
7.80
Gravedad 3.x
ALTA
Productos y versiones vulnerables
CPE | Desde | Hasta |
---|---|---|
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.15.157 (excluyendo) | |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.16 (incluyendo) | 6.1.88 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.2 (incluyendo) | 6.6.29 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.7 (incluyendo) | 6.8.8 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:6.9:rc1:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.9:rc2:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.9:rc3:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.9:rc4:*:*:*:*:*:* |
Para consultar la lista completa de nombres de CPE con productos y versiones, ver esta página
Referencias a soluciones, herramientas e información
- https://git.kernel.org/stable/c/0588bbbd718a8130b98c54518f1e0b569ce60a93
- https://git.kernel.org/stable/c/6334b8e4553cc69f51e383c9de545082213d785e
- https://git.kernel.org/stable/c/7250326cbb1f4f90391ac511a126b936cefb5bb7
- https://git.kernel.org/stable/c/7f67c2020cb08499c400abf0fc32c65e4d9a09ca
- https://git.kernel.org/stable/c/f356fd0cbd9c9cbd0854657a80d1608d0d732db3
- https://git.kernel.org/stable/c/0588bbbd718a8130b98c54518f1e0b569ce60a93
- https://git.kernel.org/stable/c/6334b8e4553cc69f51e383c9de545082213d785e
- https://git.kernel.org/stable/c/7250326cbb1f4f90391ac511a126b936cefb5bb7
- https://git.kernel.org/stable/c/7f67c2020cb08499c400abf0fc32c65e4d9a09ca
- https://git.kernel.org/stable/c/f356fd0cbd9c9cbd0854657a80d1608d0d732db3