В ядре Linux устранена следующая уязвимость:
nfsd: ворота nfs2 setacl по argp->mask
Путь SETACL NFSACL v2 разделяет соглашение о декодировании, используемое его
Родственный брат v3: nfsaclsvc_decode_setaclargs() заполняет argp->acl_access
только если в маске запроса установлен NFS_ACL и argp->acl_default
только когда установлен NFS_DFACL, а другой указатель остается NULL, потому что
буфер аргументов обнуляется до pc_argzero перед декодированием.
nfsacld_proc_setacl() затем передает оба указателя в set_posix_acl().
безоговорочно. set_posix_acl(idmap, dentry, type, NULL) — это VFS.
операцию «удалить этот тип ACL», поэтому пропущенный рычаг
неотличим от явного запроса на удаление этого ACL. А
SETACL, содержащий только NFS_ACL, автоматически удаляет каталог по умолчанию. ACL; маска=0 удаляет оба.
Это тот же самый дефект, только что исправленный в nfsd3_proc_setacl(); применить
то же средство. Заблокируйте каждый вызов set_posix_acl() по его биту маски и
инициализировать ошибку равным 0, чтобы запрос без установленного бита ушел
ACL на диске остаются нетронутыми и возвращает успех. out_drop_lock
путь и безусловный posix_acl_release() в
nfsaclsvc_release_setacl() уже допускает пропущенные руки.
Показать оригинальное описание (EN)
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.
Характеристики атаки
Последствия
Строка CVSS v3.1