CVE-2026-19735

Estado: Pendiente de análisisMedia (4.8)—
Gravedad4.8Media · CVSS 3.1
Probabilidad de explotación0.16 %mayor que el 5 % de las CVE
Explotación activaNono figura en el catálogo de CISA
Exploit públicoNo conocidosin código público localizado

La implementación del número de secuencia inicial (ISN) de RFC 6528 en subsys/net/ip/tcp.c derivaba cada ISN de TCP desde SHA-256(unique_key || four-tuple) más un desplazamiento derivado del tiempo de funcionamiento, donde unique_key es un secreto de 128 bits rellenado una sola vez por sys_csrand_get(). El valor de retorno de esa llamada se descartaba y el protector de una sola ejecución se fijaba como verdadero incluso cuando la llamada fallaba.

Leer descripción completaMostrar menos

Debido a que sys_csrand_get() deja el búfer de destino sin tocar en caso de fallo (deliberadamente propaga el error del controlador de entropía en lugar de rellenar el búfer), una única llamada fallida dejaba unique_key con su contenido BSS de todos ceros durante el resto del arranque, sin reintentos, sin mensaje de registro y sin alternativa.

Se requiere un fallo de la fuente aleatoria criptográfica para alcanzar el estado débil — por ejemplo -ENODEV/-EIO del controlador de entropía en subsys/random/random_entropy_device.c (el comentario en el árbol señala que el RNG de hardware "podría seguir recogiendo entropía en situaciones de arranque temprano"), o psa_generate_random() fallando en subsys/random/random_psa.c cuando PSA crypto no está inicializado o está respaldado por un dispositivo de entropía Bluetooth-HCI que aún no está activo. La primera conexión TCP es lo que desencadena la generación de clave, por lo que un elemento remoto que alcance un puerto de escucha inmediatamente después del arranque, o que pueda provocar un reinicio, tiene influencia indirecta sobre si la generación coincide con esa ventana. tcp_init_isn() se llama para cada apertura pasiva en tcp_conn_new() y cada apertura activa en net_tcp_connect(), por lo que la clave envenenada rige todas las conexiones TCP para ese arranque.

Con una clave de todos ceros, el ISN se convierte en una función pública del four-tuple de conexión más un desplazamiento de tiempo de todo el dispositivo. Un atacante fuera de ruta puede calcular sin conexión el término hash para cualquier four-tuple y recuperar el desplazamiento de tiempo compartido desde un único ISN observado, después de lo cual el ISN que el dispositivo elegirá para otros four-tuples es predecible. Esto derrota exactamente la protección que proporciona RFC 6528: suplantación ciega de conexión TCP contra elementos que confían en la dirección de origen, e inyección ciega de datos o reinicio de conexiones cuyo four-tuple pueda ser adivinado. Los dispositivos cuya fuente de entropía nunca produce errores nunca estuvieron en el estado débil.

La corrección traslada la generación de clave a un ayudante protegido única, que fija solo en caso de éxito, registra el error de otra manera, y hace que tcp_init_isn() recurra a sys_rand32_get() — el comportamiento ya utilizado cuando CONFIG_NET_TCP_ISN_RFC6528 está deshabilitado — en lugar de aplicar hash con una clave de constante conocida.

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

CVSS

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

Probabilidad de explotación (EPSS)

Probabilidad de explotación en los próximos 30 días
0.16 %
Percentil entre todas las CVEs puntuadas
5
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.

Vulnerabilidad remota de red sin autenticación (AV:N/PR:N) en TCP ISN derivada de clave débil (CWE-330). Permite predicción de secuencias y inyección de datos/reset de conexiones TCP blind.

Inferido por nuestro agente de análisis a partir de la descripción oficial, el vector CVSS y la CWE, y comprobado por un supervisor. Puede contener errores.

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-19735",
  "cveTags": [],
  "metrics": {
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "id": "CVE-2026-19735",
          "role": "CISA Coordinator",
          "options": [
            {
              "exploitation": "none"
            },
            {
              "automatable": "no"
            },
            {
              "technicalImpact": "partial"
            }
          ],
          "version": "2.0.3",
          "timestamp": "2026-10-16T17:01:41.848775Z"
        }
      }
    ],
    "cvssMetricV31": [
      {
        "type": "Secondary",
        "source": "vulnerabilities@zephyrproject.org",
        "cvssData": {
          "scope": "UNCHANGED",
          "version": "3.1",
          "baseScore": 4.8,
          "attackVector": "NETWORK",
          "baseSeverity": "MEDIUM",
          "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N",
          "integrityImpact": "LOW",
          "userInteraction": "NONE",
          "attackComplexity": "HIGH",
          "availabilityImpact": "NONE",
          "privilegesRequired": "NONE",
          "confidentialityImpact": "LOW"
        },
        "impactScore": 2.5,
        "exploitabilityScore": 2.2
      }
    ]
  },
  "affected": [
    {
      "source": "vulnerabilities@zephyrproject.org",
      "affectedData": [
        {
          "vendor": "zephyrproject",
          "product": "zephyr",
          "versions": [
            {
              "status": "affected",
              "version": "3.7.0",
              "versionType": "semver",
              "lessThanOrEqual": "4.4.2"
            }
          ],
          "packageName": "zephyr",
          "programFiles": [
            "subsys/net/ip/tcp.c"
          ],
          "collectionURL": "https://github.com/zephyrproject-rtos/zephyr",
          "defaultStatus": "unaffected",
          "programRoutines": [
            {
              "name": "tcp_init_isn"
            },
            {
              "name": "tcpv4_init_isn"
            },
            {
              "name": "tcpv6_init_isn"
            }
          ]
        }
      ]
    }
  ],
  "published": "2026-10-11T18:16:58.683",
  "references": [
    {
      "url": "https://github.com/zephyrproject-rtos/zephyr/commit/700888e3ecff8474f4fe7dfa8782b8869053222b",
      "source": "vulnerabilities@zephyrproject.org"
    },
    {
      "url": "https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-37mc-2q9v-fp64",
      "source": "vulnerabilities@zephyrproject.org"
    }
  ],
  "vulnStatus": "Awaiting Analysis",
  "weaknesses": [
    {
      "type": "Secondary",
      "source": "vulnerabilities@zephyrproject.org",
      "description": [
        {
          "lang": "en",
          "value": "CWE-330"
        }
      ]
    }
  ],
  "descriptions": [
    {
      "lang": "en",
      "value": "The RFC 6528 initial-sequence-number implementation in subsys/net/ip/tcp.c derived every TCP ISN from SHA-256(unique_key || four-tuple) plus a uptime-derived offset, where unique_key is a 128-bit secret filled once by sys_csrand_get(). The return value of that call was discarded and the once guard was latched to true even when the call failed. Because sys_csrand_get() leaves the destination buffer untouched on failure (it deliberately propagates the entropy-driver error rather than filling the buffer), a single failed call left unique_key as its all-zero BSS content for the remainder of the boot, with no retry, no log message and no fallback.\n\nA failure of the cryptographic random source is required to reach the weak state — for example -ENODEV/-EIO from the entropy driver in subsys/random/random_entropy_device.c (the in-tree comment notes that the hardware RNG \"might still be gathering entropy during early boot situations\"), or psa_generate_random() failing in subsys/random/random_psa.c when PSA crypto is not initialised or is backed by a Bluetooth-HCI entropy device that is not yet up. The first TCP connection is what triggers key generation, so a remote peer that reaches a listening port immediately after boot, or that can provoke a reboot, has indirect influence over whether generation coincides with that window. tcp_init_isn() is called for every passive open in tcp_conn_new() and every active open in net_tcp_connect(), so the poisoned key governs all TCP connections for that boot.\n\nWith an all-zero key the ISN becomes a public function of the connection four-tuple plus a device-wide time offset. An off-path attacker can compute the hash term offline for any four-tuple and recover the shared time offset from a single observed ISN, after which the ISN the device will pick for other four-tuples is predictable. That defeats exactly the protection RFC 6528 provides: blind TCP connection spoofing against peers that trust the source address, and blind data injection into or reset of connections whose four-tuple can be guessed. Devices whose entropy source never errors were never in the weak state.\n\nThe fix moves key generation into a single guarded helper that latches only on success, logs the error otherwise, and makes tcp_init_isn() fall back to sys_rand32_get() — the behaviour already used when CONFIG_NET_TCP_ISN_RFC6528 is disabled — instead of hashing with a known-constant key."
    }
  ],
  "lastModified": "2026-10-16T18:17:57.353",
  "sourceIdentifier": "vulnerabilities@zephyrproject.org"
}