🇰🇷 한글 설명
Linux 커널 브릿지 네트워크의 멀티캐스트 쿼리 타이머 오버플로우 취약점으로, multicast_query_interval을 매우 큰 값으로 설정하면 타이머가 즉시 만료되어 무한 루프를 발생시키고 소프트 락업을 유발합니다. 로컬 공격자가 root 권한으로 시스템을 DoS 상태로 만들 수 있습니다.
💡 쉬운 설명
리눅스 시스템의 네트워크 브릿지 기능에서 타이머 설정 오류로 인해 CPU가 특정 작업에 갇혀 무한 반복하게 됩니다. 특정 설정값을 입력하면 누구나 쉽게 시스템을 응답 불가 상태로 만들 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net: bridge: fix soft lockup in br_multicast_query_expired()
When set multicast_query_interval to a large value, the local variable
'time' in br_multicast_send_query() may overflow. If the time is smaller
than jiffies, the timer will expire immediately, and then call mod_timer()
again, which creates a loop and may trigger the following soft lockup
issue.
watchdog: BUG: soft lockup - CPU#1 stuck for 221s! [rb_consumer:66]
CPU: 1 UID: 0 PID: 66 Comm: rb_consumer Not tainted 6.16.0+ #259 PREEMPT(none)
Call Trace:
<IRQ>
__netdev_alloc_skb+0x2e/0x3a0
br_ip6_multicast_alloc_query+0x212/0x1b70
__br_multicast_send_query+0x376/0xac0
br_multicast_send_query+0x299/0x510
br_multicast_query_expired.constprop.0+0x16d/0x1b0
call_timer_fn+0x3b/0x2a0
__run_timers+0x619/0x950
run_timer_softirq+0x11c/0x220
handle_softirqs+0x18e/0x560
__irq_exit_rcu+0x158/0x1a0
sysvec_apic_timer_interrupt+0x76/0x90
</IRQ>
This issue can be reproduced with:
ip link add br0 type bridge
echo 1 > /sys/class/net/br0/bridge/multicast_querier
echo 0xffffffffffffffff >
/sys/class/net/br0/bridge/multicast_query_interval
ip link set dev br0 up
The multicast_startup_query_interval can also cause this issue. Similar to
the commit 99b40610956a ("net: bridge: mcast: add and enforce query
interval minimum"), add check for the query interval maximum to fix this
issue.
📍 영향받는 시스템
Linux kernel 6.16.0 이하, 브릿지 및 멀티캐스트 기능이 활성화된 모든 배포판
⚔️ 공격 벡터
로컬 공격자가 /sys/class/net/br0/bridge/multicast_query_interval에 0xffffffffffffffff를 작성하여 타이머 오버플로우 트리거 (root 권한 필요)
🛡️ 대응 방법
Linux 커널 업데이트 또는 쿼리 간격 최대값 제한 패치 적용 (commit 99b40610956a 참고)
🔧 검증 코드
0xffffffffffffffff 같은 비정상적인 큰 값이 표시되면 취약점 상태, 합리적인 값(예: 125000)이면 패치됨
cat /sys/class/net/br0/bridge/multicast_query_interval 2>/dev/null