🇰🇷 한글 설명
Linux 커널의 SMB 클라이언트에서 DACL(데이터 액세스 제어 목록)의 소유자 및 그룹 정보를 재작성할 때 힙 오버플로우가 발생합니다. 기존 DACL의 크기를 기준으로 버퍼를 할당하지만, SID(보안 식별자)가 확장될 경우 할당된 메모리 범위를 초과하여 데이터가 쓰여질 수 있습니다.
💡 쉬운 설명
파일의 권한 정보를 수정할 때, 새로운 보안 정보가 기존보다 커질 수 있는데 이를 대비한 공간을 충분히 만들지 않아 발생하는 오류입니다. 이로 인해 시스템의 메모리가 망가져 보안 사고나 시스템 다운이 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
smb: client: fix heap overflow in DACL owner/group rewrite
When id_mode_to_cifs_acl rewrites an existing DACL, it allocates a
buffer sized according to the on-disk DACL length reported by
dacl_ptr->size. However, replace_sids_and_copy_aces may rewrite each
ACE with a new owner/group SID obtained from the cifs.idmap upcall.
Those SIDs can have up to SID_MAX_SUB_AUTHORITIES (15) sub-authorities,
making each ACE up to 76 bytes (sizeof(struct smb_ace)).
If the original DACL contains short SIDs (e.g., 1 sub-authority) while
the replacement SIDs are long, the rewritten ACEs overflow the
allocation.
Fix this by always budgeting for worst-case SID expansion: allocate
sizeof(struct smb_acl) plus num_aces * sizeof(struct smb_ace), which
covers the smb_acl header and room for every ACE at maximum SID size.
This replaces the previous split logic that used dacl_ptr->size for
cifsacl mounts but num_aces * sizeof(struct smb_ace) for mode_from_sid
mounts: both paths can trigger the same rewrite and need the same
headroom.
KASAN reports this as:
BUG: KASAN: slab-out-of-bounds in build_sec_desc+0x1e8a/0x2680 [cifs]
Write of size 4 at addr ffff8881a5e25374 by task chown/5298
...
The buggy address is located 0 bytes to the right of
allocated 884-byte region [ffff8881a5e25000, ffff8881a5e25374)
📍 영향받는 시스템
Linux kernel (SMB client/CIFS module)
⚔️ 공격 벡터
조작된 SID를 포함한 DACL을 가진 SMB 공유 서버에 연결하여 권한 변경(chown 등) 시도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트
🔧 검증 코드
출력된 커널 버전이 취약점이 해결된 패치 버전 이후인지 확인