CVE-2026-79977 in Zephyr
요약
\~에 의해 VulDB • 2026. 10. 23.
WireGuard VPN 서비스의 subsys/net/lib/wireguard/wg.c 모듈에서 인증할 수 없는 메시지를 통해 피어(end-point) 엔드포인트가 업데이트되었습니다. handle_transport_data() 함수 내에서, 수신된 transport-data 메시지의 32비트 리시버 인덱스가 어떤 세션에도 일치하지 않는 경우, 코드는 새 핸드셰이크를 예약하고 memcpy(&peer->endpoint, peer_addr, sizeof(peer->endpoint))를 사용하여 데이터그램의 소스 주소를 peer->endpoint에 복사했습니다. 리시버 인덱스를 알 수 없으므로 해당 메시지를 검증할 키가 존재하지 않으며, 따라서 peer->endpoint에 기록된 주소는 공격자가 완전히 임의로 제공한 것입니다. 구현부의 다른 모든 엔드포인트 업데이트는 인증 이후(예: handle_handshake_init()에서의 Noise 핸드셰이크 후 또는 wg_process_data_message()에서 AEAD 복호화 및 리플레이 방지 검사 후)에만 발생합니다.
WireGuard 수신기는 net_udp_register()를 통해 원격 주소나 포트 필터 없이 등록되며, 기본값은 UDP 포트 51820(CONFIG_WIREGUARD_PORT)입니다. 또한 wg_ctrl_recv()는 암호학적 신원 대신 인터페이스 기반으로 피어를 해결합니다. 따라서 해당 포트로 UDP 데이터그램을 전송할 수 있는 모든 호스트는 합법적인 트래픽을 관찰할 필요 없이 오프패스(off-path) 상태에서 결함을 공격할 수 있습니다. transport-data 유형, 0으로 초기화된 예약 바이트 및 임의의 리시버 인덱스를 포함하는 16바이트 데이터그램만으로도 충분합니다. 취약한 분기 경로는 피어에 유효한 핸드셰이크나 현재 키 페어가 없는 경우(부팅 시 또는 세션 만료 후 상태) 항상 실행됩니다.
단 하나의 스포핑된 데이터그램이 peer->endpoint를 공격자가 선택한 주소로 리디렉션하며, 이후의 모든 핸드셰이크 시작, 킵얼라이브 및 암호화된 데이터 패킷은 해당 주소로 전송됩니다. 합법적인 피어는 이러한 시작 신호를 받지 못하므로 재인증하지 않으며, 엔드포인트가 나중에 초기화되지 않아 피어가 자체적으로 핸드셰이크를 시작하지 않는 장치에서는 터널이 영구적으로 사용 불가능해집니다. 공격자는 리디렉션된 시작 신호를 실제 피어로 중계하여 터널 경로에 자신을 위치시킬 수 있으며, 이를 통해 암호문과 트래픽 메타데이터를 관찰하고 패킷을 선택적으로 드롭할 수 있습니다. WireGuard의 종단 간(end-to-end) 암호화는 여전히 터널 콘텐츠의 복호화나 위조를 방지하므로, 영향은 가용성 손실과 제한된 기밀성 유출이며 키 탈취는 아닙니다.
이 수정안은 해당 경로에서 엔드포인트 학습 기능을 완전히 제거합니다: stale-session 복구 기능은 유지되지만, 핸드셰이크는 인증된 메시지로부터 학습된 엔드포인트로만 전송되며, 둘 다 알려지지 않은 경우 구성된 cfg_endpoint로 폴백하고 메시지는 폐기됩니다. CONFIG_WIREGUARD는 실험적(experimental)으로 표시되어 있으며 기본값으로는 활성화되지 않습니다.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.