🇰🇷 한글 설명
Linux 커널의 IPv6 FIB(Forwarding Information Base) 구현에서 멀티 배치 덤프 수행 중 NULL 포인터 역참조가 발생할 수 있는 취약점입니다. 데이터 덤프 도중 새로운 테이블이 삽입되면 저장된 인덱스가 잘못된 위치를 가리키게 되어 커널 패닉을 유발합니다.
💡 쉬운 설명
네트워크 정보를 읽어오는 도중에 새로운 정보가 갑자기 끼어들면, 컴퓨터가 길을 잃고 잘못된 메모리 주소를 참조하여 시스템이 멈추는 현상입니다. 이는 시스템의 안정성을 해치고 갑작스러운 재부팅을 일으킬 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ipv6: fib6: fix NULL deref in fib6_walk_continue() on multi-batch dump
inet6_dump_fib() saves its progress in cb->args[1] as a positional
index within the current hash chain. Between batches, a concurrent
fib6_new_table() can insert a new table at the chain head, shifting
all existing entries. The saved index then lands on a different
table, causing fib6_dump_table() to set w->root to the wrong table
while w->node still points into the previous one.
fib6_walk_continue() dereferences w->node->parent (NULL) and panics:
BUG: kernel NULL pointer dereference, address: 0000000000000008
RIP: 0010:fib6_walk_continue+0x6e/0x170
Call Trace:
<TASK>
fib6_dump_table.isra.0+0xc5/0x240
inet6_dump_fib+0xf6/0x420
rtnl_dumpit+0x30/0xa0
netlink_dump+0x15b/0x460
netlink_recvmsg+0x1d6/0x2a0
____sys_recvmsg+0x17a/0x190
Fix by storing tb->tb6_id in cb->args[1] instead of a positional
index. On resume, skip entries until the id matches; a concurrent
head-insert can never match the saved id, so the walker always
resumes on the correct table.
📍 영향받는 시스템
Linux Kernel (IPv6 FIB 관련 모듈 사용 시스템)
⚔️ 공격 벡터
동시성 제어 미흡을 이용한 로컬 공격자가 네트워크 테이블 조작을 통해 커널 패닉 유도
🛡️ 대응 방법
커널 패치를 적용하여 인덱스 대신 테이블 ID를 저장하도록 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이상인지 확인