🇰🇷 한글 설명
Linux 커널의 Landlock 보안 모듈에서 소스 디렉토리의 부모 디렉토리에 대한 참조를 적절히 유지하지 않아 발생하는 Use-After-Free 취약점입니다. 특정 상황에서 rename(2) 및 rmdir(2) 시스템 호출을 경합시키면 부모 디렉토리가 메모리에서 해제된 후 접근되어 커널 오류를 유발할 수 있습니다.
💡 쉬운 설명
컴퓨터의 파일 관리 시스템에서 파일의 위치를 옮기거나 삭제하는 과정 중에, 이미 사라진 폴더 정보를 참조하려고 시도하여 시스템이 충돌하거나 오류가 발생하는 문제입니다. 공격자가 이를 악용하면 시스템의 보안 기능을 무력화하거나 커널 오류를 일으킬 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
landlock: Fix use-after-free of the source's parent directory
current_check_refer_path() reads old_dentry->d_parent without holding a
reference nor a lock on it, and then dereferences it in
collect_domain_accesses() and in the audit record.
A reference on a child does not pin its parent: __d_move() reassigns
dentry->d_parent and drops the reference the child held on its former
parent. hook_path_rename() is not affected because the rename path
calls lock_rename() before the hook, so the source cannot be reparented
under it. hook_path_link() has no such protection: filename_linkat()
holds a reference on the source dentry but neither locks nor references
its parent, so a concurrent rename(2) can reparent the source while
security_path_link() runs, and the former parent can then be removed and
freed while the hook walks it.
A process can trigger this after entering a Landlock domain that handles
at least one filesystem access right. The process can then race a
linkat(2) loop against rename(2) and rmdir(2):
BUG: KASAN: slab-use-after-free in collect_domain_accesses+0x278/0x290
Read of size 4 at addr ffff888160bd53f4 by task llrepro2/549
collect_domain_accesses+0x278/0x290
current_check_refer_path+0x952/0x1120
security_path_link+0x1be/0x320
filename_linkat+0x342/0x6d0
__x64_sys_linkat+0xfa/0x150
Freed by task 562:
kmem_cache_free+0x139/0x4c0
i_callback+0x4b/0x80
rcu_core+0x7dc/0x10a0
Take a reference on the dentry selected as the source parent, using
dget() for the common-mount-root case and dget_parent() otherwise.
Release it after the hierarchy walk and synchronous audit logging.
[mic: Clarify the caller, reachability, and reference handling]
📍 영향받는 시스템
Landlock 보안 모듈을 사용하는 Linux 커널 버전
⚔️ 공격 벡터
Landlock 도메인 내에서 linkat(2), rename(2), rmdir(2) 시스템 호출을 이용한 레이스 컨디션(Race Condition) 공격
🛡️ 대응 방법
커널 패치를 적용하여 dentry 참조 시 dget() 또는 dget_parent()를 통해 참조 카운트를 적절히 관리하도록 업데이트해야 합니다.
🔧 검증 코드
출력된 커널 버전을 확인하여 해당 취약점이 해결된 최신 보안 패치 버전인지 확인합니다.