CVE-2026-13735 in Zephyrinformación

Resumen

por VulDB • 2026-08-29

La implementación de WireGuard en Zephyr, contenida en subsys/net/lib/wireguard/wg_crypto.c, gestionaba incorrectamente los paquetes keepalive. En wg_process_data_message(), se aceptaban y devolvían inmediatamente cualquier mensaje de datos de transporte (tipo 4) cuyo payload tuviera exactamente 16 bytes (un texto plano vacío más una etiqueta Poly1305 sin procesar, es decir, un keepalive), antes de que llegara a llamarse nunca a wg_decrypt_packet(). Por lo tanto, la etiqueta de autenticación Poly1305 no se verificaba; las únicas comprobaciones previas eran una búsqueda del índice del receptor en texto claro (get_peer_keypair_for_index() sobre data_hdr->receiver proporcionado por el atacante) y una verificación de validez/vencimiento del par de claves que no era criptográfica.

La ruta es accesible completamente desde la red: los paquetes UDP entrantes en el puerto WireGuard son gestionados por wg_input(), que los despacha hacia handle_transport_data() y luego a wg_process_data_message(). El índice del receptor, de 32 bits, se transmite en texto claro tanto en los mensajes de handshake como de datos de WireGuard; por lo que un observador in-path (en la ruta) puede aprenderlo directamente, mientras que un atacante off-path puede intentar forzarlo mediante fuerza bruta contra el puerto UDP. Dado un receptor activo con una sesión válida para ese índice, un atacante podría enviar un payload basura de 16 bytes y lograr su aceptación sin poseer la clave de sesión.

Al ser aceptados, los mensajes no autenticados provocaban que la capa de gestión observara una señal NET_EVENT_VPN_CONNECTED suplantada (estableciendo peer->first_valid y notificando a cualquier listener de net_mgmt) e incrementaban la estadística keepalive-RX. El impacto se limita a la integridad de esta señal de estado: no se descifra ni inyecta texto plano, no se revela ninguna clave, y la ruta de retorno anticipado (early-return path) no actualizaba el endpoint del peer ni los temporizadores de liveness; por lo tanto, no hay consecuencias de inyección de tráfico, toma de sesión o disponibilidad.

La corrección elimina el retorno anticipado previo al descifrado para que un payload de 16 bytes fluya a través de wg_decrypt_packet(), la cual verifica la etiqueta Poly1305 sobre el texto plano vacío, seguida por la comprobación anti-replay existente; solo se reconoce entonces como keepalive un mensaje autenticado y no replayed. Los keepalives forjados ahora fallan en la verificación de la etiqueta y se cuentan como fallos de descifrado.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

Responsable

Zephyr

Reservar

2026-06-29

Divulgación

2026-08-29

Moderación

aceptado

Artículo

VDB-396932

CPE

listo

EPSS

0.00000

KEV

no

Actividades

muy bajo

Fuentes

Want to know what is going to be exploited?

We predict KEV entries!