Vulnerabilidad en Linux (CVE-2025-68795)
Gravedad:
Pendiente de análisis
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
13/01/2026
Última modificación:
15/04/2026
Descripción
En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta:<br />
<br />
ethtool: Evitar el desbordamiento del búfer del espacio de usuario en la consulta de estadísticas<br />
<br />
El comando ethtool -S opera a través de tres llamadas ioctl:<br />
ETHTOOL_GSSET_INFO para el tamaño, ETHTOOL_GSTRINGS para los nombres, y<br />
ETHTOOL_GSTATS para los valores.<br />
<br />
Si el número de estadísticas cambia entre estas llamadas (p. ej., debido a la<br />
reconfiguración del dispositivo), la asignación de búfer del espacio de usuario será incorrecta,<br />
lo que podría llevar a un desbordamiento de búfer.<br />
<br />
Generalmente se espera que los controladores mantengan recuentos de estadísticas estables, pero algunos<br />
controladores (p. ej., mlx5, bnx2x, bna, ksz884x) usan contadores dinámicos, haciendo<br />
posible este escenario.<br />
<br />
Algunos controladores intentan manejar esto internamente:<br />
- bnad_get_ethtool_stats() retorna temprano en caso de que stats.n_stats no sea<br />
igual al recuento de estadísticas del controlador.<br />
- micrel/ksz884x también se asegura de no escribir nada más allá de<br />
stats.n_stats y desbordar el búfer.<br />
<br />
Sin embargo, ambos usan stats.n_stats que ya está asignado con el valor<br />
retornado de get_sset_count(), por lo tanto, no resolverá el problema descrito<br />
aquí.<br />
<br />
Cambiar ethtool_get_strings(), ethtool_get_stats(),<br />
ethtool_get_phy_stats() para no retornar nada en caso de una discrepancia<br />
entre el tamaño del espacio de usuario y get_sset_size(), para prevenir el desbordamiento de búfer.<br />
El valor n_stats retornado será igual a cero, para reflejar que<br />
no se ha retornado nada.<br />
<br />
Esto podría resultar en uno de dos casos al usar ethtool upstream,<br />
dependiendo de cuándo se detecte el cambio de tamaño:<br />
1. Cuando se detecta en ethtool_get_strings():<br />
# ethtool -S eth2<br />
no hay estadísticas disponibles<br />
<br />
2. Cuando se detecta en la obtención de estadísticas, todas las estadísticas se reportarán como cero.<br />
<br />
Ambos casos son presumiblemente transitorios, y una llamada ethtool subsiguiente<br />
debería tener éxito.<br />
<br />
Aparte de la evitación del desbordamiento, estos dos casos son muy evidentes (sin<br />
salida/estadísticas borradas), lo cual es posiblemente mejor que presentar<br />
estadísticas incorrectas/desplazadas.<br />
También consideré retornar un error en lugar de una respuesta &#39;silenciosa&#39;, pero<br />
eso parece más destructivo para las aplicaciones del espacio de usuario.<br />
<br />
Notas:<br />
- Este parche no pretende corregir la condición de carrera inherente, solo se asegura<br />
de que no desbordemos el búfer del espacio de usuario, y proporciona un comportamiento<br />
más predecible.<br />
<br />
- El bloqueo RTNL se mantiene durante cada ioctl, la ventana de carrera existe entre<br />
las llamadas ioctl separadas cuando se libera el bloqueo.<br />
<br />
- ethtool del espacio de usuario siempre llena stats.n_stats, pero es probable que<br />
estas ioctls de estadísticas estén implementadas en otras aplicaciones del espacio de usuario<br />
que podrían no llenarlo. El código añadido verifica que no sea cero,<br />
para prevenir cualquier regresión.
Impacto
Referencias a soluciones, herramientas e información
- https://git.kernel.org/stable/c/3df375a1e75483b7d973c3cc2e46aa374db8428b
- https://git.kernel.org/stable/c/4066b5b546293f44cd6d0e84ece6e3ee7ff27093
- https://git.kernel.org/stable/c/4afcb985355210e1688560dc47e64b94dad35d71
- https://git.kernel.org/stable/c/7b07be1ff1cb6c49869910518650e8d0abc7d25f
- https://git.kernel.org/stable/c/7bea09f60f2ad5d232e2db8f1c14e850fd3fd416
- https://git.kernel.org/stable/c/ca9983bc3a1189bd72f9ae449d925a66b2616326
- https://git.kernel.org/stable/c/f9dc0f45d2cd0189ce666288a29d2cc32c2e44d5



