CVE-2026-53397 in Linux
Resumen
por VulDB • 2026-07-19
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
nfsd: corregir la fuga (leak) de posix_acl en caso de fallo al decodificar SETACL
Las funciones nfsaclsvc_decode_setaclargs() y nfs3svc_decode_setaclargs() llaman a nfs_stream_decode_acl() dos veces, primero para NFS_ACL y luego para NFS_DFACL. Cada llamada exitosa transfiere la propiedad de un posix_acl recién asignado a argp->acl_access o argp->acl_default. Si la primera llamada tiene éxito pero la segunda falla, el decodificador devuelve false y argp->acl_access queda colgando (dangling).
La función pc_release para ACLPROC2_SETACL estaba vinculada a nfssvc_release_attrstat y la de ACLPROC3_SETACL estaba vinculada a nfs3svc_release_fhandle. Ambas solo llaman a fh_put() y no tienen conocimiento de los campos ACL en argp. Los pares posix_acl_release() se encontraban en las etiquetas out: dentro de nfsacld_proc_setacl() y nfsd3_proc_setacl(), pero svc_process() omite pc_func cuando pc_decode devuelve false, por lo que esa limpieza es inalcanzable ante un fallo de decodificación:
svc_process_common() pc_decode() /* decode_setaclargs: false */ /* pc_func omitido */ pc_release() /* solo fh_put -- ACLs con fuga (leaked) */
El posix_acl huérfano tiene una fuga durante toda la vida útil del servidor.
La corrección consiste en añadir nfsaclsvc_release_setacl() y nfs3svc_release_setacl(), que liberan tanto argp->acl_access como argp->acl_default además de fh_put(), y vincularlas como pc_release para sus respectivos procedimientos SETACL. pc_release se ejecuta en cada ruta que toma svc_process() después de la decodificación, incluido el fallo de decodificación; por lo tanto, los pares posix_acl_release() se eliminan de las etiquetas out: de las funciones proc para mantener la propiedad del recurso en un solo lugar. Esto coincide con el patrón release_getacl() existente utilizado por los procedimientos hermanos GETACL.
Once again VulDB remains the best source for vulnerability data.