🇰🇷 한글 설명
Linux 커널의 netfilter nf_reject 모듈에서 loopback 패킷 처리 시 목적지(dst) 참조 카운트가 누출되는 메모리 누수 버그입니다. 최근 패치에서 loopback 패킷의 기존 dst_entry를 처리하지 않아 발생했으며, PRE_ROUTING 단계에서도 이미 연결된 dst를 확인하지 않습니다.
💡 쉬운 설명
Linux 네트워크 필터링 시스템에서 로컬 루프백 패킷을 처리할 때 메모리가 제대로 해제되지 않는 문제입니다. 이로 인해 시스템의 메모리가 점차 사용되어 성능 저하 또는 서비스 중단이 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
netfilter: nf_reject: don't leak dst refcount for loopback packets
recent patches to add a WARN() when replacing skb dst entry found an
old bug:
WARNING: include/linux/skbuff.h:1165 skb_dst_check_unset include/linux/skbuff.h:1164 [inline]
WARNING: include/linux/skbuff.h:1165 skb_dst_set include/linux/skbuff.h:1210 [inline]
WARNING: include/linux/skbuff.h:1165 nf_reject_fill_skb_dst+0x2a4/0x330 net/ipv4/netfilter/nf_reject_ipv4.c:234
[..]
Call Trace:
nf_send_unreach+0x17b/0x6e0 net/ipv4/netfilter/nf_reject_ipv4.c:325
nft_reject_inet_eval+0x4bc/0x690 net/netfilter/nft_reject_inet.c:27
expr_call_ops_eval net/netfilter/nf_tables_core.c:237 [inline]
..
This is because blamed commit forgot about loopback packets.
Such packets already have a dst_entry attached, even at PRE_ROUTING stage.
Instead of checking hook just check if the skb already has a route
attached to it.
📍 영향받는 시스템
Linux 커널 5.10 이상 (netfilter: nf_reject 모듈 적용된 버전)
⚔️ 공격 벡터
로컬 공격자가 특정 네트워크 패킷을 생성/전송하여 loopback 인터페이스를 통해 메모리 누수 유발
🛡️ 대응 방법
Linux 커널을 최신 버전으로 업데이트 (CVE-2025-38732 패치 포함)
🔧 검증 코드
현재 커널 버전을 확인하여 배포처의 패치 여부(보안 업데이트 또는 커널 버전 증가)를 확인하세요. 영향받는 버전에서는 dmesg에서 skb_dst_set 경고 메시지 확인 가능합니다.
uname -r | grep -E '^[0-9]+\.[0-9]+'