🇰🇷 한글 설명
Linux 커널의 net/packet 구성 중 packet_set_ring() 함수에서 발생하는 레이스 컨디션 취약점입니다. 네트워크 장치가 해제되는 시점과 소켓의 팬아웃 훅(fanout hook)을 재등록하는 시점이 겹칠 경우, 이미 해제된 장치에 대해 훅이 다시 등록될 수 있습니다. 이로 인해 잘못된 메모리 참조나 커널 불안정성이 초래될 수 있습니다.
💡 쉬운 설명
네트워크 장치가 꺼지는 순간과 네트워크 설정을 바꾸는 순간이 동시에 일어나면서 발생하는 오류입니다. 이로 인해 이미 사라진 장치에 연결을 시도하려다 시스템에 문제가 생길 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net/packet: avoid fanout hook re-registration after unregister
packet_set_ring() temporarily detaches a socket from packet delivery while
reconfiguring its ring. It records the previous running state, clears
po->num, unregisters the protocol hook when needed, drops po->bind_lock,
and later restores po->num and re-registers the hook from the saved
was_running value.
That unlocked window can race with NETDEV_UNREGISTER. The notifier can
observe the socket as not running, skip __unregister_prot_hook(), and
invalidate the per-socket binding by setting po->ifindex to -1 and clearing
po->prot_hook.dev. A one-member fanout group can still retain its shared
fanout hook device pointer. When packet_set_ring() resumes, re-registering
solely from the stale was_running state can re-add the fanout hook after
the device has been unregistered.
Treat po->ifindex == -1 as an invalidated binding after reacquiring
po->bind_lock. This is distinct from ifindex 0, the normal
unbound/wildcard state: ifindex -1 marks an existing device binding that
was invalidated when the device was unregistered. Restore po->num as
before, but do not re-register the hook if device unregister already
detached the socket.
📍 영향받는 시스템
Linux kernel (net/packet 관련 모듈 사용 시스템)
⚔️ 공격 벡터
네트워크 장치의 등록 해제(Unregister)와 소켓의 링 버퍼 재설정(packet_set_ring)을 동시에 유도하는 레이스 컨디션 공격
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인하십시오.