🇰🇷 한글 설명
Linux 커널의 HFS 파일 시스템 구현 중 __hfs_brec_find 함수에서 경계 외 읽기(Out-of-Bounds Read) 취약점이 발견되었습니다. HFS 파일 이름의 최대 길이를 초과하는 잘못된 inode 입력이 처리될 때 발생하며, 이는 시스템 안정성에 영향을 줄 수 있습니다.
💡 쉬운 설명
파일 시스템이 파일 이름을 읽는 과정에서 정해진 범위를 벗어나 메모리를 읽으려고 시도하는 오류입니다. 잘못된 데이터가 입력되면 컴퓨터 시스템이 예상치 못한 동작을 하거나 멈출 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
hfs: fix OOB Read in __hfs_brec_find
Syzbot reported a OOB read bug:
==================================================================
BUG: KASAN: slab-out-of-bounds in hfs_strcmp+0x117/0x190
fs/hfs/string.c:84
Read of size 1 at addr ffff88807eb62c4e by task kworker/u4:1/11
CPU: 1 PID: 11 Comm: kworker/u4:1 Not tainted
6.1.0-rc6-syzkaller-00308-g644e9524388a #0
Workqueue: writeback wb_workfn (flush-7:0)
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:88 [inline]
dump_stack_lvl+0x1b1/0x28e lib/dump_stack.c:106
print_address_description+0x74/0x340 mm/kasan/report.c:284
print_report+0x107/0x1f0 mm/kasan/report.c:395
kasan_report+0xcd/0x100 mm/kasan/report.c:495
hfs_strcmp+0x117/0x190 fs/hfs/string.c:84
__hfs_brec_find+0x213/0x5c0 fs/hfs/bfind.c:75
hfs_brec_find+0x276/0x520 fs/hfs/bfind.c:138
hfs_write_inode+0x34c/0xb40 fs/hfs/inode.c:462
write_inode fs/fs-writeback.c:1440 [inline]
If the input inode of hfs_write_inode() is incorrect:
struct inode
struct hfs_inode_info
struct hfs_cat_key
struct hfs_name
u8 len # len is greater than HFS_NAMELEN(31) which is the
maximum length of an HFS filename
OOB read occurred:
hfs_write_inode()
hfs_brec_find()
__hfs_brec_find()
hfs_cat_keycmp()
hfs_strcmp() # OOB read occurred due to len is too large
Fix this by adding a Check on len in hfs_write_inode() before calling
hfs_brec_find().
📍 영향받는 시스템
HFS 파일 시스템을 사용하는 Linux 커널 버전 (특히 6.1.0-rc6 이전 버전)
⚔️ 공격 벡터
조작된 HFS 파일 시스템 이미지를 마운트하거나 잘못된 inode 정보를 포함한 데이터를 전달하여 발생
🛡️ 대응 방법
hfs_write_inode() 함수 호출 전 파일 이름 길이(len)를 검증하는 로직을 추가하여 커널을 업데이트해야 합니다.
🔧 검증 코드
출력된 커널 버전이 취약점이 수정된 최신 보안 패치 버전인지 확인합니다.