CVE-2026-53397 in Linux
요약
\~에 의해 VulDB • 2026. 07. 19.
리눅스 커널에서 다음 취약점이 해결되었습니다:
nfsd: SETACL 디코딩 실패 시 posix_acl 누수 수정
nfsaclsvc_decode_setaclargs()와 nfs3svc_decode_setaclargs()는 각각 NFS_ACL과 NFS_DFACL에 대해 두 번씩 nfs_stream_decode_acl()을 호출합니다. 각 성공적인 호출은 새로 할당된 posix_acl의 소유권을 argp->acl_access 또는 argp->acl_default로 이전합니다. 첫 번째 호출이 성공하지만 두 번째 호출이 실패하면 디코더는 false를 반환하고, 그 결과 argp->acl_access가 덩글링(dangling) 상태가 됩니다.
ACLPROC2_SETACL.pc_release는 nfssvc_release_attrstat에 연결되어 있고, ACLPROC3_SETACL.pc_release는 nfs3svc_release_fhandle에 연결되어 있습니다. 둘 다 fh_put()만 호출하며 argp의 ACL 필드에 대한 지식이 없습니다. posix_acl_release() 쌍은 nfsacld_proc_setacl()과 nfsd3_proc_setacl() 내부의 out: 레이블에 위치해 있었지만, pc_decode가 false를 반환하면 svc_process()는 pc_func을 건너뛰므로 디코딩 실패 시 해당 정리 코드는 도달할 수 없게 됩니다.
svc_process_common() pc_decode() /* decode_setaclargs: false */ /* pc_func skipped */ pc_release() /* fh_put만 호출 -- ACL 누수 발생 */
고아 상태가 된 posix_acl은 서버의 전체 수명 동안 누수됩니다.
해결책으로 nfsaclsvc_release_setacl()과 nfs3svc_release_setacl()을 추가하여, fh_put() 외에도 argp->acl_access와 argp->acl_default를 모두 해제하도록 하고, 이를 각각 해당 SETACL 절차에 대한 pc_release로 연결합니다. pc_decode 실패 시에도 호출되므로 posix_acl_release() 쌍은 proc 함수의 out: 레이블에서 제거되어 소유권을 한 곳에서 관리하도록 합니다. 이는 형제 GETACL 절차에서 사용되는 기존 release_getacl() 패턴과 일치합니다.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.