🇰🇷 한글 설명
Linux 커널의 netfilter bridge 구성 요소에서 발생한 취약점으로, ARP 응답을 기다리는 동안 skb의 장치 정보가 일치하지 않아 발생할 수 있습니다. 이로 인해 잘못된 물리 장치 참조가 발생하여 시스템 충돌(Crash)을 유발할 수 있습니다.
💡 쉬운 설명
네트워크 장치 간에 데이터를 전달하는 과정에서 시스템이 엉뚱한 장치 정보를 참조하여 컴퓨터가 갑자기 멈추거나 꺼질 수 있는 문제입니다. 네트워크 설정이 복잡한 환경에서 발생할 가능성이 높습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
netfilter: bridge: replace physindev with physinif in nf_bridge_info
An skb can be added to a neigh->arp_queue while waiting for an arp
reply. Where original skb's skb->dev can be different to neigh's
neigh->dev. For instance in case of bridging dnated skb from one veth to
another, the skb would be added to a neigh->arp_queue of the bridge.
As skb->dev can be reset back to nf_bridge->physindev and used, and as
there is no explicit mechanism that prevents this physindev from been
freed under us (for instance neigh_flush_dev doesn't cleanup skbs from
different device's neigh queue) we can crash on e.g. this stack:
arp_process
neigh_update
skb = __skb_dequeue(&neigh->arp_queue)
neigh_resolve_output(..., skb)
...
br_nf_dev_xmit
br_nf_pre_routing_finish_bridge_slow
skb->dev = nf_bridge->physindev
br_handle_frame_finish
Let's use plain ifindex instead of net_device link. To peek into the
original net_device we will use dev_get_by_index_rcu(). Thus either we
get device and are safe to use it or we don't get it and drop skb.
📍 영향받는 시스템
Linux Kernel (netfilter: bridge 구성 요소 포함 버전)
⚔️ 공격 벡터
네트워크 패킷 조작을 통해 ARP 큐에 비정상적인 skb를 삽입하여 커널 패닉 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인하십시오.