🇰🇷 한글 설명
Linux 커널의 netfilter flowtable 오프로드 과정에서 기존 skb의 dst_entry 참조를 적절히 해제하지 않아 발생하는 취약점입니다. 이로 인해 참조 카운트 누수가 발생하며, 커널의 DEBUG_NET_WARN_ON_ONCE 어설션이 트리거될 수 있습니다.
💡 쉬운 설명
네트워크 데이터를 처리하는 과정에서 데이터의 소유권을 제대로 정리하지 않아 메모리 관리 오류가 발생하는 문제입니다. 이 오류가 반복되면 시스템의 안정성에 문제가 생길 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
netfilter: nf_flow_table: drop existing skb dst before skb_dst_set_noref()
Incoming skbs passing through netfilter flowtable offload hooks (or XFRM
offload path) might already carry a ref-counted dst_entry assigned during
earlier RX or routing steps.
Calling skb_dst_set_noref() when skb already holds a ref-counted dst
overwrites skb->_skb_refdst, leaking the previous dst_entry reference
count and triggering a DEBUG_NET_WARN_ON_ONCE assertion in
skb_dst_check_unset():
WARNING: at skb_dst_check_unset include/linux/skbuff.h:1170
WARNING: at skb_dst_set_noref include/linux/skbuff.h:1234
WARNING: at nf_flow_offload_ip_hook+0xf6c/0x2b60 net/netfilter/nf_flow_table_ip.c:864
Drop any existing dst_entry reference with skb_dst_drop(skb) before
setting the non-referenced flowtable destination.
📍 영향받는 시스템
Linux kernel (netfilter flowtable offload 기능을 사용하는 버전)
⚔️ 공격 벡터
특정 네트워크 패킷을 Netfilter flowtable 오프로드 경로로 통과시켜 참조 카운트 누수를 유도
🛡️ 대응 방법
커널 패치를 적용하여 skb_dst_set_noref() 호출 전 skb_dst_drop(skb)를 수행하도록 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 최신 패치 버전인지 확인