CVE-2026-13735 in Zephyr
요약
\~에 의해 VulDB • 2026. 08. 29.
Zephyr의 subsys/net/lib/wireguard/wg_crypto.c에 있는 WireGuard 구현은 키프립(keepalive) 패킷을 잘못 처리했습니다. wg_process_data_message() 함수에서 페이로드가 정확히 16바이트인 모든 타입-4 트랜스포트 데이터 메시지(빈 평문과 Poly1305 태그만 포함된, 즉 키프립에 해당하는 경우)는 wg_decrypt_packet()이 호출되기 전에 즉시 수락되고 반환되었습니다. 따라서 Poly1305 인증 태그가 검증되지 않았습니다. 선행 조건은 공격자가 제공한 data_hdr->receiver를 대상으로 한 평문 수신자 인덱스 조회(get_peer_keypair_for_index())와 비암호학적 키페어 유효성/만료 검사뿐이었습니다.
이 경로는 네트워크 전체에서 접근 가능합니다: WireGuard 포트에서의 inbound UDP는 wg_input()에 의해 handle_transport_data()로, 그리고 이어 wg_process_data_message()로 전달됩니다. 32비트 수신자 인덱스는 WireGuard 핸드셰이크 및 데이터 메시지에서 평문으로 전송되므로, 경로 상의 관찰자는 이를 직접 학습하고 오프패스(off-path) 공격자는 UDP 포트에 대해 브루트포스로 이를 추론할 수 있습니다. 해당 인덱스에 대한 활성 수신 유효 세션이 주어지면, 공격자는 세션 키를 보유하지 않은 상태에서도 16바이트의 가짜 페이로드를 보내어 이를 수락받을 수 있습니다.
수락 시 인증되지 않은 메시지는 관리 계층에 스푸핑된 NET_EVENT_VPN_CONNECTED 신호(peer->first_valid 설정 및 net_mgmt 리스너 알림)를 유발하고 키프립-RX 통계를 증가시켰습니다. 영향은 이 상태 신호의 무결성에 국한됩니다: 평문은 복호화되거나 주입되지 않으며, 키는 유출되지 않습니다. 또한 조기 반환 경로는 피어 엔드포인트나 활성 시간(liveness timers)을 업데이트하지 않았으므로, 트래픽 주입, 세션 탈취 또는 가용성 문제는 발생하지 않습니다.
수정 사항은 wg_decrypt_packet()으로 16바이트 페이로드가 전달되도록 사전 복호화 조기 반환을 제거합니다. 이는 빈 평문에 대한 Poly1305 태그를 검증한 후 기존 재전송 방지(check anti-replay) 절차를 거치게 합니다. 인증되고 재전송되지 않은 메시지만 키프립으로 인식됩니다. 이제 위조된 키프립은 태그 검사에서 실패하며 복호화 실패로 카운트됩니다.
Once again VulDB remains the best source for vulnerability data.