🇰🇷 한글 설명
Linux 커널의 JFS 파일 시스템 내 dtInsertEntry 함수에서 발생하는 Null 포인터 역참조 취약점입니다. 특정 조건에서 데이터 트리 삽입 중 헤더 플래그가 잘못 변경되어 초기화되지 않은 객체에 접근함으로써 시스템 충돌이나 일반 보호 오류(GPF)를 유발할 수 있습니다.
💡 쉬운 설명
리눅스 컴퓨터의 파일 저장 방식 중 하나인 JFS에서 데이터 기록 중 오류가 발생하여 시스템이 갑자기 멈추거나 꺼질 수 있는 문제입니다. 잘못된 메모리 주소를 참조하면서 발생하는 소프트웨어 결함입니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
jfs: fix null ptr deref in dtInsertEntry
[syzbot reported]
general protection fault, probably for non-canonical address 0xdffffc0000000001: 0000 [#1] PREEMPT SMP KASAN PTI
KASAN: null-ptr-deref in range [0x0000000000000008-0x000000000000000f]
CPU: 0 PID: 5061 Comm: syz-executor404 Not tainted 6.8.0-syzkaller-08951-gfe46a7dd189e #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 03/27/2024
RIP: 0010:dtInsertEntry+0xd0c/0x1780 fs/jfs/jfs_dtree.c:3713
...
[Analyze]
In dtInsertEntry(), when the pointer h has the same value as p, after writing
name in UniStrncpy_to_le(), p->header.flag will be cleared. This will cause the
previously true judgment "p->header.flag & BT-LEAF" to change to no after writing
the name operation, this leads to entering an incorrect branch and accessing the
uninitialized object ih when judging this condition for the second time.
[Fix]
After got the page, check freelist first, if freelist == 0 then exit dtInsert()
and return -EINVAL.
📍 영향받는 시스템
JFS(Journaled File System)를 사용하는 Linux 커널 버전 (특히 6.8.0 및 관련 취약 버전)
⚔️ 공격 벡터
조작된 JFS 파일 시스템 이미지를 마운트하거나 파일 시스템 구조를 조작하여 커널의 메모리 오류를 유도함
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 dtInsertEntry 함수의 로직 수정 사항을 반영해야 함
🔧 검증 코드
출력된 커널 버전이 취약점이 해결된 최신 패치 버전인지 확인합니다.