🇰🇷 한글 설명
Linux 커널의 bonding 드라이버에서 IPv6가 비활성화된 상태로 부팅될 경우, 초기화되지 않은 devconf_all 포인터를 참조하여 NULL 역참조(NULL dereference)가 발생하는 취약점입니다. 이로 인해 시스템 커널 패닉이 발생하여 서비스 중단이나 시스템 충돌이 일어날 수 있습니다.
💡 쉬운 설명
IPv6 기능을 꺼두었음에도 불구하고, 네트워크 결합(bonding) 기능이 실수로 IPv6 관련 정보를 찾으려다 시스템을 멈추게 만드는 오류입니다. 컴퓨터가 존재하지 않는 주소를 참조하려고 시도하면서 발생하는 문제입니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
bonding: fix devconf_all NULL dereference when IPv6 is disabled
When booting with the 'ipv6.disable=1' parameter, the devconf_all is
never initialized because inet6_init() exits before addrconf_init() is
called which initializes it. bond_send_validate(), however, will still
call bond_ns_send_all() even ipv6 is indeed disabled. It will lead to
NULL derefence of net->ipv6.devconf_all in ip6_pol_route().
BUG: kernel NULL pointer dereference, address: 000000000000000c
[...]
Workqueue: bond0 bond_arp_monitor [bonding]
RIP: 0010:ip6_pol_route+0x69/0x480
[...]
Call Trace:
<TASK>
? srso_return_thunk+0x5/0x5f
? __pfx_ip6_pol_route_output+0x10/0x10
fib6_rule_lookup+0xfe/0x260
? wakeup_preempt+0x8a/0x90
? srso_return_thunk+0x5/0x5f
? srso_return_thunk+0x5/0x5f
? sched_balance_rq+0x369/0x810
ip6_route_output_flags+0xd7/0x170
bond_ns_send_all+0xde/0x280 [bonding]
bond_ab_arp_probe+0x296/0x320 [bonding]
? srso_return_thunk+0x5/0x5f
bond_activebackup_arp_mon+0xb4/0x2c0 [bonding]
process_one_work+0x196/0x370
worker_thread+0x1af/0x320
? srso_return_thunk+0x5/0x5f
? __pfx_worker_thread+0x10/0x10
kthread+0xe3/0x120
? __pfx_kthread+0x10/0x10
ret_from_fork+0x199/0x260
? __pfx_kthread+0x10/0x10
ret_from_fork_asm+0x1a/0x30
</TASK>
Fix this by adding ipv6_mod_enabled() condition check in the caller.
📍 영향받는 시스템
Linux kernel (IPv6가 'ipv6.disable=1' 파라미터로 비활성화된 환경)
⚔️ 공격 벡터
로컬 공격자가 시스템 부팅 파라미터를 조작하거나 특정 네트워크 환경을 구성하여 커널 패닉 유도
🛡️ 대응 방법
커널 패치 적용 (bond_ns_send_all 호출 전 ipv6_mod_enabled() 체크 로직 추가)
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 수정된 최신 패치 버전인지 확인합니다.