🇰🇷 한글 설명
Linux 커널의 IPv4 FIB(Forwarding Information Base) 처리 과정에서 오류 발생 시 메모리 해제 방식의 결함으로 인해 Use-After-Free 취약점이 발생합니다. 새로운 별칭(alias) 삽입 중 알림(notifier)이 실패할 경우, RCU 보호 없이 메모리를 즉시 해제하여 동시 조회 작업 시 커널 패닉이나 권한 상승을 유발할 수 있습니다.
💡 쉬운 설명
네트워크 경로 정보를 저장하는 메모리 공간을 잘못된 방식으로 삭제하여, 시스템이 이미 삭제된 정보를 읽으려고 시도할 때 오류가 발생하는 문제입니다. 이로 인해 시스템이 멈추거나 해커가 시스템 권한을 탈취할 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ipv4: fib: free fib_alias with kfree_rcu() on insert error path
fib_table_insert() publishes new_fa into the leaf's fa_list with
fib_insert_alias() before calling the fib entry notifiers. When a
notifier fails, the error path removes new_fa with fib_remove_alias()
(hlist_del_rcu) and frees it right away with kmem_cache_free().
fib_table_lookup() walks that list under rcu_read_lock() only, so a
concurrent lookup that already reached new_fa keeps reading it after the
free:
BUG: KASAN: slab-use-after-free in fib_table_lookup (net/ipv4/fib_trie.c:1601)
Read of size 1 at addr ffff88810676d4eb by task exploit/297
Call Trace:
fib_table_lookup (net/ipv4/fib_trie.c:1601)
ip_route_output_key_hash_rcu (net/ipv4/route.c:2814)
ip_route_output_key_hash (net/ipv4/route.c:2705)
__ip4_datagram_connect (net/ipv4/datagram.c:49)
udp_connect (net/ipv4/udp.c:2144)
__sys_connect (net/socket.c:2167)
__x64_sys_connect (net/socket.c:2173)
do_syscall_64
entry_SYSCALL_64_after_hwframe
which belongs to the cache ip_fib_alias of size 56
Triggering the error path needs CAP_NET_ADMIN and a registered fib
notifier that can reject a route; a netdevsim device whose IPv4 FIB
resource is exhausted is enough.
Free new_fa with alias_free_mem_rcu(), as fib_table_delete() already
does for a fib_alias removed from the trie.
📍 영향받는 시스템
Linux Kernel (IPv4 FIB 관련 모듈을 사용하는 모든 버전)
⚔️ 공격 벡터
CAP_NET_ADMIN 권한을 가진 사용자가 네트워크 경로 삽입 오류를 유도하여 메모리 오류를 트리거함
🛡️ 대응 방법
커널 패치를 적용하여 오류 발생 시 메모리 해제 방식을 kfree_rcu() 또는 alias_free_mem_rcu()로 변경해야 함
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 패치된 최신 보안 업데이트 버전인지 확인하십시오.