CVE-2026-14696 in Zephyr
요약
\~에 의해 VulDB • 2026. 08. 31.
CONFIG_NET_ETHERNET_BRIDGE가 활성화된 경우, subsys/net/l2/ethernet/bridge/bridge_input.c의 eth_bridge_input_process()는 브리지 멤버 인터페이스에서 수신되는 각 프레임의 처리 방식을 결정합니다. 로컬 스택에도 전달해야 하는 프레임에 대해 해당 코드는 eth_bridge_handle_locally()를 호출하고 NET_OK를 반환했습니다. 이 헬퍼 함수는 패킷을 소비하지 않으며, bridge_iface_recv()(virtual_recv()를 통해)만 호출하여 pkt 소유권을 가져오지 않고 NET_CONTINUE를 반환합니다.
이러한 NET_OK 판정은 ethernet_recv()를 거쳐 subsys/net/ip/net_core.c의 processing_data()까지 전파되며, 여기서 NET_OK는 "패킷이 소비되었으므로 해제하지 않는다"로 해석됩니다. 실제로 패킷을 소유하는 소비자(Consumer)가 없었기 때문에 RX net_pkt는 풀(Pool)에 반환되지 않고 누설(leak)됩니다. CONFIG_NET_ETHERNET_FORWARD_UNRECOGNISED_ETHERTYPE 설정(CONFIG_NET_SOCKETS_PACKET이 활성화되면 기본값 y) 시 등록된 L3 핸들러가 없는 EtherType을 가진 프레임에서 이 누설이 구체적으로 재현 가능합니다: 폴스루(L3 dispatch)는 NET_OK 판정을 덮어쓰지 않으므로 ethernet_recv()는 NET_OK를 반환하고 버퍼는 결코 해제되지 않습니다.
브리지화된 L2 세그먼트상의 모든 장치는 인증 없이 임의의 EtherType을 가진 브로드캐스트/멀티캐스트 프레임을 송신할 수 있습니다. 이러한 각 프레임은 유한한 RX 풀(CONFIG_NET_PKT_RX_COUNT)에서 하나의 버퍼를 영구적으로 소모하므로, 짧은 시간 동안의 브로드캐스트 플러드(flood)가 발생하면 풀이 고갈되어 장치가 재부팅될 때까지 트래픽을 수신할 수 없게 됩니다. 이는 지속적인 서비스 거부(Denial of Service)입니다. 기밀성 또는 무결성에 대한 영향은 없습니다.
해당 수정안은 eth_bridge_handle_locally()가 실제 net_verdict를 전파하고 로컬로 유지되는 프레임에 대해 NET_CONTINUE를 반환하도록 하며, 새 dst_iface out-파라미터를 통해 브리지 인터페이스를 다시 작성하여 패킷이 정상적인 수신 경로를 따라 이동하고 정확히 한 번만 unreferenced(참조 해제)되도록 합니다.
Once again VulDB remains the best source for vulnerability data.