CVE-2026-19577

Estado: Pendiente de análisisAlta (7.1)—
Gravedad7.1Alta · CVSS 3.1
Probabilidad de explotación0.22 %mayor que el 11 % de las CVE
Explotación activaNono figura en el catálogo de CISA
Exploit públicoNo conocidosin código público localizado

net_route_ipv6_packet() en subsys/net/ip/route_ipv6.c resolvía la dirección de capa de enlace del nexthop con net_nbr_get_lladdr(nbr->idx) sin verificar primero si la entrada de la caché de vecinos realmente tenía una dirección de capa de enlace vinculada. Una entrada de vecino no resuelta lleva idx == NET_NBR_LLADDR_UNKNOWN (0xff), y net_nbr_get_lladdr() en subsys/net/ip/nbr.c no realiza ninguna comprobación de límites en tiempo de ejecución más allá de un NET_ASSERT, devolviendo &net_neighbor_lladdr[255] — aproximadamente 2,5 KB más allá del final de una matriz cuyo tamaño predeterminado es CONFIG_NET_IPV6_MAX_NEIGHBORS (8). Debido a que el puntero devuelto nunca es NULL, la siguiente guarda lladdr == NULL no lo detecta.

Leer descripción completaMostrar menos

La función se alcanza desde ipv6_route_packet() en subsys/net/ip/ipv6.c para cada paquete IPv6 unicast recibido cuyo destino no es una dirección local en la interfaz receptora; CONFIG_NET_IPV6_ROUTE está habilitado de forma predeterminada siempre que lo esté la caché de vecinos IPv6, por lo que no se necesita configuración de enrutador o reenvío. net_route_ipv6_get_info() devuelve el destino del paquete como el nexthop cuando existe una entrada de caché de vecinos para él, y la búsqueda en caché no omite entradas INCOMPLETE. Un atacante no autenticado en el mismo enlace puede por lo tanto forzar el estado no resuelto — por ejemplo, provocando tráfico hacia una dirección de vecino falsa y no existente para que net_ipv6_send_ns() cree una entrada INCOMPLETE, o enviando un Router Advertisement sin opción de dirección de capa de enlace de origen, lo que crea un vecino enrutador persistentemente no resuelto — y luego enviar un paquete dirigido a ese vecino.

El resultado es una lectura fuera de los límites en un índice fijo después de la matriz de direcciones de capa de enlace vecinas. En compilaciones con CONFIG_ASSERT habilitado, la aserción se dispara y el dispositivo entra en pánico, lo que proporciona una denegación de servicio remota repetible. Con aserciones deshabilitadas, la estructura net_linkaddr obsoleta fuera de los límites impulsa un memcmp() sobre una longitud no influenciada por el atacante y, cuando su byte len pasa la comprobación NET_LINK_ADDR_MAX_LENGTH, hasta 8 bytes de RAM estática no relacionada se copian en la dirección de capa de enlace de destino del marco saliente y se transmiten en el enlace, divulgándolos a cualquier oyente. No hay escritura fuera de los límites y el desplazamiento no está controlado por el atacante, lo que limita el impacto.

Traducción automática del texto original de NVD (en inglés).

CVSS

Puntuación base
7.1
Versión
3.1
Vector
CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:H

Probabilidad de explotación (EPSS)

Probabilidad de explotación en los próximos 30 días
0.22 %
Percentil entre todas las CVEs puntuadas
11
Fecha de la puntuación
21/10/2026

EPSS (Exploit Prediction Scoring System, de FIRST) estima la probabilidad de que una vulnerabilidad sea explotada en 30 días. Complementa a CVSS (impacto) y a CISA KEV (explotación confirmada).

Técnicas ATT&CK

Cómo se explota esta vulnerabilidad y qué consigue el atacante, en el lenguaje de MITRE ATT&CK.

Inferido por reglas deterministas a partir del vector CVSS y la CWE. Solo orientativo.

Mitigaciones ATT&CK que cubren estas técnicas

Tecnologías afectadas (1)

⚠ Inferidas por IA a partir de la descripción — NVD aún no ha analizado esta CVE; no son CPE verificados.

CWE

Referencias

Mostrar las 2 referencias

JSON original (NVD)

Mostrar
{
  "id": "CVE-2026-19577",
  "cveTags": [],
  "metrics": {
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "id": "CVE-2026-19577",
          "role": "CISA Coordinator",
          "options": [
            {
              "exploitation": "none"
            },
            {
              "automatable": "no"
            },
            {
              "technicalImpact": "partial"
            }
          ],
          "version": "2.0.3",
          "timestamp": "2026-10-15T17:51:23.978223Z"
        }
      }
    ],
    "cvssMetricV31": [
      {
        "type": "Secondary",
        "source": "vulnerabilities@zephyrproject.org",
        "cvssData": {
          "scope": "UNCHANGED",
          "version": "3.1",
          "baseScore": 7.1,
          "attackVector": "ADJACENT_NETWORK",
          "baseSeverity": "HIGH",
          "vectorString": "CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:H",
          "integrityImpact": "NONE",
          "userInteraction": "NONE",
          "attackComplexity": "LOW",
          "availabilityImpact": "HIGH",
          "privilegesRequired": "NONE",
          "confidentialityImpact": "LOW"
        },
        "impactScore": 4.2,
        "exploitabilityScore": 2.8
      }
    ]
  },
  "affected": [
    {
      "source": "vulnerabilities@zephyrproject.org",
      "affectedData": [
        {
          "vendor": "zephyrproject",
          "product": "zephyr",
          "versions": [
            {
              "status": "affected",
              "version": "1.8.0",
              "lessThan": "4.5.0",
              "versionType": "semver"
            }
          ],
          "packageName": "zephyr",
          "programFiles": [
            "subsys/net/ip/route.c",
            "subsys/net/ip/route_ipv6.c"
          ],
          "collectionURL": "https://github.com/zephyrproject-rtos/zephyr",
          "defaultStatus": "unaffected",
          "programRoutines": [
            {
              "name": "net_route_ipv6_packet"
            },
            {
              "name": "net_route_packet"
            }
          ]
        }
      ]
    }
  ],
  "published": "2026-10-11T18:16:58.433",
  "references": [
    {
      "url": "https://github.com/zephyrproject-rtos/zephyr/commit/b0b0e8973d1967114adbb9ed1611d448b5a46519",
      "source": "vulnerabilities@zephyrproject.org"
    },
    {
      "url": "https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-vv76-4m89-95q5",
      "source": "vulnerabilities@zephyrproject.org"
    }
  ],
  "vulnStatus": "Awaiting Analysis",
  "weaknesses": [
    {
      "type": "Secondary",
      "source": "vulnerabilities@zephyrproject.org",
      "description": [
        {
          "lang": "en",
          "value": "CWE-125"
        }
      ]
    }
  ],
  "descriptions": [
    {
      "lang": "en",
      "value": "net_route_ipv6_packet() in subsys/net/ip/route_ipv6.c resolved the nexthop's link-layer address with net_nbr_get_lladdr(nbr->idx) without first checking whether the neighbor cache entry actually had a linked link-layer address. An unresolved neighbor carries idx == NET_NBR_LLADDR_UNKNOWN (0xff), and net_nbr_get_lladdr() in subsys/net/ip/nbr.c performs no runtime bounds check beyond a NET_ASSERT, returning &net_neighbor_lladdr[255] — roughly 2.5 KB past the end of an array whose default size is CONFIG_NET_IPV6_MAX_NEIGHBORS (8). Because the returned pointer is never NULL, the following lladdr == NULL guard does not catch it.\n\nThe function is reached from ipv6_route_packet() in subsys/net/ip/ipv6.c for every received unicast IPv6 packet whose destination is not a local address on the receiving interface; CONFIG_NET_IPV6_ROUTE is enabled by default whenever the IPv6 neighbor cache is, so no router or forwarding configuration is needed. net_route_ipv6_get_info() returns the packet's destination itself as the nexthop when a neighbor cache entry for it exists, and the cache lookup does not skip INCOMPLETE entries. An unauthenticated attacker on the same link can therefore force the unresolved state — for example by eliciting traffic to a spoofed, non-existent neighbor address so that net_ipv6_send_ns() creates an INCOMPLETE entry, or by sending a Router Advertisement with no source link-layer address option, which creates a persistently unresolved router neighbor — and then send a packet addressed to that neighbor.\n\nThe result is an out-of-bounds read at a fixed index past the neighbor link-layer address array. On builds with CONFIG_ASSERT enabled the assertion fires and the device panics, giving a repeatable remote denial of service. With assertions disabled, the stale out-of-bounds struct net_linkaddr drives a memcmp() over an attacker-uninfluenced length and, when its len byte passes the NET_LINK_ADDR_MAX_LENGTH check, up to 8 bytes of unrelated static RAM are copied into the outgoing frame's destination link-layer address and transmitted on the link, disclosing them to any listener. There is no out-of-bounds write and the offset is not attacker-controlled, which bounds the impact."
    }
  ],
  "lastModified": "2026-10-15T19:17:37.213",
  "sourceIdentifier": "vulnerabilities@zephyrproject.org"
}