🇰🇷 한글 설명
Linux 커널의 F2FS 파일 시스템에서 truncate_node() 함수 호출 시 NAT 엔트리의 blkaddr에 대한 유효성 검사가 누락되어 발생하는 취약점입니다. 조작된 파일 시스템 이미지를 사용할 경우 잘못된 블록 주소로 인해 시스템 패닉(Kernel BUG)이 발생할 수 있습니다.
💡 쉬운 설명
파일 시스템의 데이터 주소를 확인하는 과정에서 오류가 발생하여 컴퓨터 시스템이 갑자기 멈추거나 꺼질 수 있는 문제입니다. 악의적으로 만들어진 저장 장치나 파일을 연결할 때 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
f2fs: fix to do sanity check on node blkaddr in truncate_node()
syzbot reports a f2fs bug as below:
------------[ cut here ]------------
kernel BUG at fs/f2fs/segment.c:2534!
RIP: 0010:f2fs_invalidate_blocks+0x35f/0x370 fs/f2fs/segment.c:2534
Call Trace:
truncate_node+0x1ae/0x8c0 fs/f2fs/node.c:909
f2fs_remove_inode_page+0x5c2/0x870 fs/f2fs/node.c:1288
f2fs_evict_inode+0x879/0x15c0 fs/f2fs/inode.c:856
evict+0x4e8/0x9b0 fs/inode.c:723
f2fs_handle_failed_inode+0x271/0x2e0 fs/f2fs/inode.c:986
f2fs_create+0x357/0x530 fs/f2fs/namei.c:394
lookup_open fs/namei.c:3595 [inline]
open_last_lookups fs/namei.c:3694 [inline]
path_openat+0x1c03/0x3590 fs/namei.c:3930
do_filp_open+0x235/0x490 fs/namei.c:3960
do_sys_openat2+0x13e/0x1d0 fs/open.c:1415
do_sys_open fs/open.c:1430 [inline]
__do_sys_openat fs/open.c:1446 [inline]
__se_sys_openat fs/open.c:1441 [inline]
__x64_sys_openat+0x247/0x2a0 fs/open.c:1441
do_syscall_x64 arch/x86/entry/common.c:52 [inline]
do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0010:f2fs_invalidate_blocks+0x35f/0x370 fs/f2fs/segment.c:2534
The root cause is: on a fuzzed image, blkaddr in nat entry may be
corrupted, then it will cause system panic when using it in
f2fs_invalidate_blocks(), to avoid this, let's add sanity check on
nat blkaddr in truncate_node().
📍 영향받는 시스템
Linux Kernel (F2FS 파일 시스템을 사용하는 시스템)
⚔️ 공격 벡터
조작된(fuzzed) F2FS 파일 시스템 이미지를 마운트하거나 해당 파일 시스템 내의 파일을 조작하여 시스템 패닉 유도
🛡️ 대응 방법
F2FS의 NAT blkaddr 유효성 검사 로직이 포함된 최신 Linux 커널 버전으로 업데이트
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 패치된 버전인지 확인합니다.