🇰🇷 한글 설명
Linux 커널의 netfilter nf_queue 모듈에서 브리지 장치가 해제되는 과정 중 NFQUEUE가 가짜 목적지(fake dst)를 보유할 때 발생하는 취약점입니다. 브리지 장치가 해제된 후에도 NFQUEUE가 해당 장치의 참조를 유지하지 못해 메모리 관리 오류가 발생할 수 있습니다. 이를 해결하기 위해 패킷이 NFQUEUE에 머무는 동안 브리지 마스터 장치를 고정(pin)하도록 수정되었습니다.
💡 쉬운 설명
네트워크 연결을 관리하는 브리지 장치가 사라질 때, 처리 중이던 데이터 패킷이 해당 장치의 정보를 계속 붙잡고 있어 시스템 오류를 일으킬 수 있는 문제입니다. 패킷이 처리를 마칠 때까지 장치가 안전하게 유지되도록 보완되었습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
netfilter: nf_queue: pin bridge device while NFQUEUE holds fake dst
The br_netfilter fake rtable is embedded in struct net_bridge and is
attached to bridged packets with skb_dst_set_noref(). If such a packet is
queued to NFQUEUE, __nf_queue() upgrades that fake dst with
skb_dst_force().
At that point the queued skb can hold a real dst reference after bridge
teardown has started. The problem is not that every bridged packet needs
its own dst reference. The problem is that NFQUEUE can keep the bridge
private fake dst alive after unregister begins.
Fix this by keeping the bridge fake dst model unchanged and pinning the
bridge master device only while the packet sits in NFQUEUE. Record the
bridge device in nf_queue_entry when the queued skb carries a bridge fake
dst, take a device reference for the queue lifetime, and drop it when the
queue entry is freed.
Also make sure queued entries are reaped when that bridge device goes
down, and drop the redundant nf_bridge_info_exists() test from the fake
dst detection.
This keeps netdev_priv(br->dev) alive until verdict completion, so the
embedded fake rtable and its metrics backing storage cannot be freed out
from under dst_release(). It also avoids the constant refcount bump and
avoids using ipv4-specific dst helpers for IPv6 bridge traffic.
📍 영향받는 시스템
Linux Kernel (netfilter/nf_queue 관련 모듈 사용 시스템)
⚔️ 공격 벡터
브리지 장치의 해제와 NFQUEUE 패킷 처리 간의 타이밍 차이를 이용한 메모리 참조 오류 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이상인지 확인