Saltar al contenido
DUPIN
ALERTAS · EN VIVO
Contacto

VULNERABILIDAD

CVE-2026-79981 El resolver DNS de Zephyr reutiliza un único puerto de origen UDP para todas las consultas, facilitando la…

El resolver DNS de Zephyr en subsys/net/lib/dns/resolve.c vincula un socket UDP por servidor al inicializar el contexto, con el puerto local en 0 para que la pila elija un puerto efímero una sola vez. dns_write() envía todas las consultas posteriores desde ese mismo socket sin volver a vincularlo, por lo que el puerto de origen es constante mientras solo varía el identificador de transacción de 16 bits. Con un puerto fijo, un atacante fuera de ruta solo debe adivinar el identificador, y el puerto estable se puede…

Alerta de Nureq Monitor

Detectada 23 OCT · 18:38

CVSS 3.1

6.5MEDIA

PROBABILIDAD DE EXPLOTACIÓN (EPSS)

0,2 % PERCENTIL 9

EXPLOTACIÓN ACTIVA

No confirmada

EXPLOIT PÚBLICO

No conocido

Qué es CVE-2026-79981

El resolver DNS de Zephyr en subsys/net/lib/dns/resolve.c vincula un socket UDP por servidor al inicializar el contexto, con el puerto local en 0 para que la pila elija un puerto efímero una sola vez. dns_write() envía todas las consultas posteriores desde ese mismo socket sin volver a vincularlo, por lo que el puerto de origen es constante mientras solo varía el identificador de transacción de 16 bits. Con un puerto fijo, un atacante fuera de ruta solo debe adivinar el identificador, y el puerto estable se puede…

Productos y versiones afectadas

  • zephyrproject zephyr

    • desde 1.8.0 hasta antes de 4.5.0

Qué hacer

  1. Verificá si usás zephyr y en qué versión: el rango afectado figura arriba.
  2. Actualizá a la versión corregida que indique el fabricante en su aviso (ver referencias) o aplicá la mitigación que publique.
  3. Revisá registros y accesos de los sistemas expuestos para descartar que se haya aprovechado antes de corregir.

Calculadora CVSS

CVSS 3.1 · 6.5 MEDIA

CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:H/A:N

VECTOR DE ATAQUE (AV)
Red
COMPLEJIDAD DEL ATAQUE (AC)
Alta
PRIVILEGIOS REQUERIDOS (PR)
Ninguno
INTERACCIÓN DEL USUARIO (UI)
Ninguna
ALCANCE (S)
Sin cambio
CONFIDENCIALIDAD (C)
Baja
INTEGRIDAD (I)
Alta
DISPONIBILIDAD (A)
Ninguna

Abrir la calculadora completa

Descripción original

The DNS stub resolver in subsys/net/lib/dns/resolve.c binds one UDP socket per configured server when the resolver context is initialised (dns_resolve_init_locked() -> register_dispatcher() -> dns_dispatcher_register()), with the local port left at 0 so the stack picks an ephemeral port exactly once. dns_write() then sends every subsequent query from that same socket without re-binding, so the source port is constant for the lifetime of the resolver context while only the 16-bit transaction identifier (ctx->queries[i].id, drawn with sys_rand16_get()) varies per query. RFC 5452 section 9.2 requires both to vary; with a fixed port, an off-path attacker has to guess only the identifier. The stable port is cheap to learn. Any single observed query reveals it permanently, and it can also be found by probing the ephemeral UDP range: subsys/net/ip/connection.c answers unmatched unicast UDP with an ICMP port-unreachable, so the resolver's socket is the one port in that range that stays silent. Acceptance of a reply is decided solely by get_slot_by_id() matching the transaction identifier and a CRC-16 of the queried name — the reply's source address is never checked (dispatcher_cb() does ARG_UNUSED(addr)), so forged answers need not even be spoofed to appear to come from the configured server; they only need to reach the resolver's port. An attacker with UDP reachability to the device (same LAN, Wi-Fi or mesh segment, or a globally routable device address) can therefore flood answers for a predictable query name across the 16-bit identifier space during a query window and race the legitimate server. A win makes the application resolve an attacker-chosen address, and with CONFIG_DNS_RESOLVER_CACHE enabled the forged record is retained for its attacker-chosen TTL. The attack still requires winning that race, and applications that validate TLS certificates for the resolved endpoint are largely protected. The fix draws a fresh local port before each query to a server that has nothing outstanding: dns_randomize_source_port() unregisters the dispatcher, closes and reopens the socket, and re-registers it bound to port 0 so the system selects a new port, raising the per-query guessing space from roughly 16 to roughly 31 bits. Multicast DNS and LLMNR are excluded because their ports are protocol-fixed. The behaviour is controlled by CONFIG_DNS_RESOLVER_RANDOMIZE_SOURCE_PORT (default y).

Referencias

Historial de la alerta

  1. VULNERABILIDAD Nueva vulnerabilidad detectada.

CÓMO SE HIZOResumen traducido automáticamente al español a partir de la descripción original. Ante dudas, la descripción original y las referencias del fabricante son la fuente de verdad. Cómo funciona.