Descripción
En el Linux kernel se resolvió la siguiente vulnerabilidad: nfsd: condicionar setacl de nfs2 a argp->mask La ruta SETACL de NFSACL v2 comparte la convención de decodificación de su equivalente v3: nfsaclsvc_decode_setaclargs() completa argp->acl_access solo cuando NFS_ACL está activo en la máscara de la solicitud, y argp->acl_default solo cuando NFS_DFACL está activo, dejando el otro puntero en NULL porque el búfer de argumentos se pone en cero hasta pc_argzero antes de decodificar. Luego, nfsacld_proc_setacl() entrega ambos punteros a set_posix_acl() de forma incondicional. set_posix_acl(idmap, dentry, type, NULL) es la operación VFS de "eliminar este tipo de ACL", por lo que un campo omitido no se distingue de una solicitud explícita de eliminar esa ACL. Un SETACL que incluye solo NFS_ACL elimina silenciosamente la ACL por defecto del directorio; mask=0 elimina ambas. Este es el mismo defecto recién corregido en nfsd3_proc_setacl(); se aplica la misma solución. Cada llamada a set_posix_acl() se condiciona a su bit de máscara y error se inicializa en 0, de modo que una solicitud sin ninguno de los bits activos deja intactas las ACL en disco y devuelve éxito. La ruta out_drop_lock y la llamada incondicional a posix_acl_release() en nfsaclsvc_release_setacl() ya toleran 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 d00a2f81ba7c57045bd644971ddb6961c5efe3e0 · a257cdd0e2179630d3201c32ba14d7fcb3c3a055 y anteriores a 760e7a4f92f597c61ab6b089f934a7e3acf238b7 · a257cdd0e2179630d3201c32ba14d7fcb3c3a055 y anteriores a 54ff9c81d6b77de4540ba33a3b4d613ce3194863 · a257cdd0e2179630d3201c32ba14d7fcb3c3a055 y anteriores a 8e4422b05f410f95c51b68a0db4bf1d87f6d22f5 · a257cdd0e2179630d3201c32ba14d7fcb3c3a055 y anteriores a e41d173d9dc735cecb15ab7aa63ecab09338f81b · a257cdd0e2179630d3201c32ba14d7fcb3c3a055 y anteriores a f951b22dbeec46f2e0fba81cb80d1b0c686b61eb · a257cdd0e2179630d3201c32ba14d7fcb3c3a055 y anteriores a 37eea38e7898538f0ec5f1eb8b18d8646e4be41c · a257cdd0e2179630d3201c32ba14d7fcb3c3a055 y anteriores a a3a7e20ed66d3f04d37883c398da8a113b430769
- Linux Afectadas: 2.6.13 No afectadas: 5.10.273 · 5.15.224 · 6.1.191 · 6.6.157 · 6.12.109 · 6.18.50
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/d00a2f81ba7c57045bd644971ddb6961c5efe3e0
- Referencia en git.kernel.orggit.kernel.org/stable/c/760e7a4f92f597c61ab6b089f934a7e3acf238b7
- Referencia en git.kernel.orggit.kernel.org/stable/c/54ff9c81d6b77de4540ba33a3b4d613ce3194863
- Referencia en git.kernel.orggit.kernel.org/stable/c/8e4422b05f410f95c51b68a0db4bf1d87f6d22f5
- Referencia en git.kernel.orggit.kernel.org/stable/c/e41d173d9dc735cecb15ab7aa63ecab09338f81b
- Referencia en git.kernel.orggit.kernel.org/stable/c/f951b22dbeec46f2e0fba81cb80d1b0c686b61eb
- Referencia en git.kernel.orggit.kernel.org/stable/c/37eea38e7898538f0ec5f1eb8b18d8646e4be41c
- Referencia en git.kernel.orggit.kernel.org/stable/c/a3a7e20ed66d3f04d37883c398da8a113b430769
Ver el texto original en inglés (CVE.org)
nfsd: gate nfs2 setacl by argp->mask
In the Linux kernel, the following vulnerability has been resolved: nfsd: gate nfs2 setacl by argp->mask The NFSACL v2 SETACL path shares the decoder convention used by its v3 sibling: nfsaclsvc_decode_setaclargs() fills in argp->acl_access only when NFS_ACL is set in the request mask and argp->acl_default only when NFS_DFACL is set, leaving the other pointer NULL because the argument buffer is zeroed up to pc_argzero before decode. nfsacld_proc_setacl() then hands both pointers to set_posix_acl() unconditionally. set_posix_acl(idmap, dentry, type, NULL) is the VFS "remove this ACL type" operation, so an omitted arm is indistinguishable from an explicit request to delete that ACL. A SETACL carrying only NFS_ACL silently strips the directory's default ACL; mask=0 strips both. This is the same defect just fixed in nfsd3_proc_setacl(); apply the same remedy. Gate each set_posix_acl() call on its mask bit and initialize error to 0 so that a request with neither bit set leaves the on-disk ACLs untouched and returns success. The out_drop_lock path and the unconditional posix_acl_release() in nfsaclsvc_release_setacl() already tolerate the skipped arms.