🇰🇷 한글 설명
리눅스 커널의 IPv4 및 IPv6 멀티캐스트 전달 과정에서 prefetch된 skb(소켓 버퍼)가 소켓 참조를 적절히 해제하지 않아 발생하는 취약점입니다. 멀티캐스트 패킷이 로컬로 전달되지 않을 때, 이미 파괴된 소켓을 참조하게 되어 Use-After-Free 오류를 유발할 수 있습니다.
💡 쉬운 설명
네트워크 데이터를 처리하는 과정에서 이미 사라진 연결 정보를 잘못 참조하여 시스템 오류를 일으킬 수 있는 문제입니다. 이로 인해 시스템이 불안정해지거나 보안 문제가 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ip: orphan prefetched skbs before multicast forwarding
IPv4 and IPv6 input preserve an skb->sk association installed by
bpf_sk_assign() so that local delivery can use the selected socket under
RCU. Both address families can also prefetch a socket in UDP early demux.
In both paths (BPF and UDP early demux) a reference is not guaranteed to
be held on the socket.
When a multicast packet is not locally deliverable, IPv6 hands the
original skb to ip6_mr_input(). IPv4's ip_mr_input() similarly keeps the
original skb when local delivery is not needed. Either path can put the
skb on an unresolved multicast route queue or forward it after the
receive-side RCU section ends.
After the prefetched socket is destroyed, a later skb free invokes
sock_pfree() and dereferences the stale skb->sk. Orphan the skb before
each non-local multicast forwarding path. Local delivery retains the
original skb; the existing skb_clone() calls provide multicast forwarding
with a socket-free clone.
📍 영향받는 시스템
Linux Kernel (IPv4/IPv6 multicast forwarding 관련 모듈 사용 시스템)
⚔️ 공격 벡터
특수하게 조작된 멀티캐스트 패킷을 전송하여 커널의 Use-After-Free 취약점 유도
🛡️ 대응 방법
리눅스 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 멀티캐스트 전달 전 skb를 orphan 상태로 전환
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인