Saltar al contenido
CVE-2026-89671 Fuente: CVE.org Publicada · sin explotación confirmada

Vulnerabilidad de autorización incorrecta en Linux kernel (nfsd)

Linux · Linux · Publicada en CVE.org el 11-09-2026 · Última actualización: 09-11-2026

Descripción

En el Linux kernel se resolvió la siguiente vulnerabilidad: nfsd: condicionar setacl de nfs3 a argp->mask nfsd3_proc_setacl() llama a set_posix_acl() de forma incondicional tanto para ACL_TYPE_ACCESS como para ACL_TYPE_DEFAULT, pasando argp->acl_access y argp->acl_default tal cual. El decodificador de ACL de NFSv3 solo completa esos punteros cuando el bit de máscara correspondiente está activo: nfs3svc_decode_setaclargs() if (args->mask & NFS_ACL) decode into acl_access if (args->mask & NFS_DFACL) decode into acl_default /* otherwise the pointer stays NULL (pc_argzero) */ nfsd3_proc_setacl() set_posix_acl(.., ACL_TYPE_ACCESS, argp->acl_access) set_posix_acl(.., ACL_TYPE_DEFAULT, argp->acl_default) set_posix_acl(idmap, dentry, type, NULL) es la operación VFS de "eliminar este tipo de ACL". Por lo tanto, un puntero NULL que significa "el cliente no envió este campo" no se distingue de "el cliente pidió eliminar esta ACL". Un SETACL con mask=NFS_ACL elimina silenciosamente la ACL por defecto del directorio; mask=0 elimina ambas. La función equivalente nfsd3_proc_getacl() ya consulta argp->mask antes de procesar cada campo; se replica ese comportamiento en setacl. Se corrige envolviendo cada llamada a set_posix_acl() en la verificación del bit de máscara correspondiente e inicializando error en 0 antes de inode_lock, de modo que una solicitud sin ninguno de los bits activos deja intactas las ACL en disco y devuelve nfs_ok. Se conservan la ruta out_drop_lock y la llamada incondicional a posix_acl_release() en out:; ambas toleran valores NULL en los campos omitidos.

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: a257cdd0e2179630d3201c32ba14d7fcb3c3a055 y anteriores a beeb33152873ad40692bd255b562966f8ba43dbd · a257cdd0e2179630d3201c32ba14d7fcb3c3a055 y anteriores a 3be1d8611dae4829e4608007db29f4a8748c37b2 · a257cdd0e2179630d3201c32ba14d7fcb3c3a055 y anteriores a 68a80b26efdff1d09f8ae1773c6a915abb9e191d · a257cdd0e2179630d3201c32ba14d7fcb3c3a055 y anteriores a b3bff820d068ea59767d4e91a3258231a879da5f · a257cdd0e2179630d3201c32ba14d7fcb3c3a055 y anteriores a ff99ed007f065198fd723152405c22aa558f700b · a257cdd0e2179630d3201c32ba14d7fcb3c3a055 y anteriores a 453d7198a0ab07a12d46e0575861ac7b932da17e
  • Linux Afectadas: 2.6.13 No afectadas: 6.1.191 · 6.6.157 · 6.12.109 · 6.18.50 · 7.2.4 · 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

Ver el texto original en inglés (CVE.org)

nfsd: gate nfs3 setacl by argp->mask

In the Linux kernel, the following vulnerability has been resolved: nfsd: gate nfs3 setacl by argp->mask nfsd3_proc_setacl() calls set_posix_acl() unconditionally for both ACL_TYPE_ACCESS and ACL_TYPE_DEFAULT, passing argp->acl_access and argp->acl_default verbatim. The NFSv3 ACL decoder only populates those pointers when the corresponding mask bit is set: nfs3svc_decode_setaclargs() if (args->mask & NFS_ACL) decode into acl_access if (args->mask & NFS_DFACL) decode into acl_default /* otherwise the pointer stays NULL (pc_argzero) */ nfsd3_proc_setacl() set_posix_acl(.., ACL_TYPE_ACCESS, argp->acl_access) set_posix_acl(.., ACL_TYPE_DEFAULT, argp->acl_default) set_posix_acl(idmap, dentry, type, NULL) is the VFS "remove this ACL type" operation. A NULL pointer that means "the client did not send this arm" is therefore indistinguishable from "the client asked to remove this ACL". A SETACL with mask=NFS_ACL silently drops the directory's default ACL; mask=0 drops both. The sibling nfsd3_proc_getacl() already consults argp->mask before touching each arm; mirror that in setacl. Fix by wrapping each set_posix_acl() call in the matching mask bit check and initializing error to 0 before inode_lock so that a request with neither bit set leaves the on-disk ACLs untouched and returns nfs_ok. The out_drop_lock path and the unconditional posix_acl_release() at out: are preserved; both NULL-tolerate the skipped arms.

Recibe el boletín cuando CISA agregue vulnerabilidades nuevas

Te escribimos solo cuando CISA agrega vulnerabilidades nuevas, ya traducidas: cada día que haya, o en un resumen los lunes. Confirmas por correo y te das de baja con un clic.

Frecuencia