Descripción
En el kernel de Linux, se resolvió la siguiente vulnerabilidad: NFSD: evitar el uso después de liberar memoria (use-after-free) del cliente durante la revocación del estado de exportación nfsd4_revoke_export_states() tiene el mismo use-after-free que nfsd4_revoke_states(): libera nn->client_lock durante revoke_one_stid() y la lectura posterior de clp->cl_minorversion, pero la referencia al stateid que mantiene no fija al cliente. Un desmontaje en condición de carrera con el bloqueo liberado puede liberar al cliente mientras revoke_one_stid() aún lo desreferencia. exportfs -u activa esta ruta a través de NFSD_CMD_UNLOCK_EXPORT, por lo que un administrador que elimina una exportación puede entrar en condición de carrera con la expiración de un cliente. Se omite un cliente que ya está expirando y, en caso contrario, se fija con cl_rpc_users bajo client_lock antes de liberar el bloqueo, de forma coherente con nfsd4_revoke_states().
Qué hacer
Revisa si usas el producto afectado y en qué versión, y aplica la actualización o la mitigación que indique el aviso del fabricante. CISA no ha confirmado que se esté explotando; si eso cambia, esta ficha pasa a «explotada» y te avisamos en el boletín.
Versiones afectadas
- Linux Afectadas: 2eac189bb059d31a29937b29ee0f477394198610 y anteriores a c05ae58fe06ce2ac34312f649e71c3596bdde358 · 2eac189bb059d31a29937b29ee0f477394198610 y anteriores a 2108de53568a64936a0da3e04d85c35df98d3fb6
- Linux Afectadas: 7.2 No afectadas: 7.2.5 · 7.3
Según el registro de la vulnerabilidad en CVE.org, tal como lo publicó el fabricante. Confirma tu versión exacta en el aviso del fabricante.
Referencias
- Referencia en git.kernel.orggit.kernel.org/stable/c/c05ae58fe06ce2ac34312f649e71c3596bdde358
- Referencia en git.kernel.orggit.kernel.org/stable/c/2108de53568a64936a0da3e04d85c35df98d3fb6
Ver el texto original en inglés (CVE.org)
NFSD: Prevent client use-after-free during export state revocation
In the Linux kernel, the following vulnerability has been resolved: NFSD: Prevent client use-after-free during export state revocation nfsd4_revoke_export_states() has the same use-after-free as nfsd4_revoke_states(): it drops nn->client_lock across revoke_one_stid() and the following read of clp->cl_minorversion, but the stateid reference it holds does not pin the client. A teardown racing the dropped lock can free the client while revoke_one_stid() still dereferences it. exportfs -u drives this path through NFSD_CMD_UNLOCK_EXPORT, so an administrator removing an export can race a client expiry. Skip a client that is already expiring and otherwise pin it with cl_rpc_users under client_lock before dropping the lock, matching nfsd4_revoke_states().