← Back to CVE Explorer

CVE-2026-11811

Full vulnerability record from the local CVENow database.

Description

The UpdateHub over-the-air update client's start_coap_client() in subsys/mgmt/updatehub/updatehub.c leaks the CoAP/DTLS socket descriptor on its connection-setup failure paths. The shared error: cleanup gated socket closing on a ret > 0 flag, but ret was set to -1 immediately after the socket was created, so when zsock_setsockopt() (DTLS) or zsock_connect() subsequently failed the gate was false and cleanup_connection() was never called. The open descriptor in the global ctx.sock was then overwritten by the next attempt, permanently leaking it from the socket / net_context pool until reboot. The failing setup path is reached every time the OTA client tries to contact the UpdateHub server and the connection cannot be established — driven automatically by the periodic autohandler() poll (and on demand via the updatehub_probe()/updatehub_update() API or the updatehub run shell command). The DTLS handshake/connect outcome is influenceable by a network or on-path attacker who drops, resets, or otherwise disrupts traffic to the server, and also fails naturally whenever the server is unreachable. Each failed attempt permanently leaks one descriptor; once the shared socket pool is exhausted, networking degrades device-wide until the device is rebooted, a denial-of-service condition. Severity is low because the leak rate is bounded by the configured OTA poll interval (default once per 24 hours), the effect is gradual and recovered by reboot, and only builds with the UpdateHub client enabled are affected. There is no memory-corruption, information-disclosure, or authentication impact.

Severity
LOW
CVSS score
3.7 (v3.1)
Vulnerability status
Awaiting Analysis
Source identifier
Published
2026-08-10 23:16:50.893000
Last modified
2026-10-23 19:10:00.167000
View original CVE JSON
{
  "id": "CVE-2026-11811",
  "sourceIdentifier": "[email protected]",
  "published": "2026-08-10T23:16:50.893",
  "lastModified": "2026-10-23T19:10:00.167",
  "vulnStatus": "Awaiting Analysis",
  "cveTags": [],
  "descriptions": [
    {
      "lang": "en",
      "value": "The UpdateHub over-the-air update client's start_coap_client() in subsys/mgmt/updatehub/updatehub.c leaks the CoAP/DTLS socket descriptor on its connection-setup failure paths. The shared error: cleanup gated socket closing on a ret > 0 flag, but ret was set to -1 immediately after the socket was created, so when zsock_setsockopt() (DTLS) or zsock_connect() subsequently failed the gate was false and cleanup_connection() was never called. The open descriptor in the global ctx.sock was then overwritten by the next attempt, permanently leaking it from the socket / net_context pool until reboot.\n\nThe failing setup path is reached every time the OTA client tries to contact the UpdateHub server and the connection cannot be established — driven automatically by the periodic autohandler() poll (and on demand via the updatehub_probe()/updatehub_update() API or the updatehub run shell command). The DTLS handshake/connect outcome is influenceable by a network or on-path attacker who drops, resets, or otherwise disrupts traffic to the server, and also fails naturally whenever the server is unreachable.\n\nEach failed attempt permanently leaks one descriptor; once the shared socket pool is exhausted, networking degrades device-wide until the device is rebooted, a denial-of-service condition. Severity is low because the leak rate is bounded by the configured OTA poll interval (default once per 24 hours), the effect is gradual and recovered by reboot, and only builds with the UpdateHub client enabled are affected. There is no memory-corruption, information-disclosure, or authentication impact."
    },
    {
      "lang": "es",
      "value": "El start_coap_client() del cliente de actualización por aire (OTA) de UpdateHub en subsys/mgmt/updatehub/updatehub.c filtra el descriptor de socket CoAP/DTLS en sus rutas de fallo de establecimiento de conexión. El error compartido: el cierre del socket controlado por la limpieza dependía de un indicador ’ret > 0’, pero ’ret’ se estableció en -1 inmediatamente después de la creación del socket, por lo que cuando zsock_setsockopt() (DTLS) o zsock_connect() fallaron posteriormente, la condición era falsa y cleanup_connection() nunca fue llamada. El descriptor abierto en el ’ctx.sock’ global fue entonces sobrescrito por el siguiente intento, filtrándolo permanentemente del pool de sockets / ’net_context’ hasta el reinicio.\n\nLa ruta de configuración fallida se alcanza cada vez que el cliente OTA intenta contactar al servidor UpdateHub y la conexión no puede establecerse - impulsado automáticamente por el sondeo periódico de autohandler() (y bajo demanda a través de la API updatehub_probe()/updatehub_update() o el comando de shell ’updatehub run’). El resultado del handshake/conexión DTLS puede ser influenciado por un atacante de red o en ruta que descarta, reinicia o interrumpe de otra manera el tráfico hacia el servidor, y también falla naturalmente cuando el servidor es inalcanzable.\n\nCada intento fallido filtra permanentemente un descriptor; una vez que el pool de sockets compartido se agota, la red se degrada en todo el dispositivo hasta que este se reinicia, una condición de denegación de servicio. La severidad es baja porque la tasa de fuga está limitada por el intervalo de sondeo OTA configurado (por defecto una vez cada 24 horas), el efecto es gradual y se recupera con un reinicio, y solo las compilaciones con el cliente UpdateHub habilitado se ven afectadas. No hay impacto en la corrupción de memoria, divulgación de información o autenticación."
    }
  ],
  "affected": [
    {
      "source": "[email protected]",
      "affectedData": [
        {
          "vendor": "zephyrproject",
          "product": "zephyr",
          "defaultStatus": "unaffected",
          "collectionURL": "https://github.com/zephyrproject-rtos/zephyr",
          "packageName": "zephyr",
          "programFiles": [
            "subsys/mgmt/updatehub/updatehub.c"
          ],
          "versions": [
            {
              "version": "2.0.0",
              "lessThan": "4.4.2",
              "versionType": "semver",
              "status": "affected"
            }
          ]
        }
      ]
    }
  ],
  "metrics": {
    "cvssMetricV31": [
      {
        "source": "[email protected]",
        "type": "Secondary",
        "cvssData": {
          "version": "3.1",
          "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L",
          "baseScore": 3.7,
          "baseSeverity": "LOW",
          "attackVector": "NETWORK",
          "attackComplexity": "HIGH",
          "privilegesRequired": "NONE",
          "userInteraction": "NONE",
          "scope": "UNCHANGED",
          "confidentialityImpact": "NONE",
          "integrityImpact": "NONE",
          "availabilityImpact": "LOW"
        },
        "exploitabilityScore": 2.2,
        "impactScore": 1.4
      }
    ],
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "timestamp": "2026-08-12T18:50:29.995504Z",
          "id": "CVE-2026-11811",
          "options": [
            {
              "exploitation": "none"
            },
            {
              "automatable": "no"
            },
            {
              "technicalImpact": "partial"
            }
          ],
          "role": "CISA Coordinator",
          "version": "2.0.3"
        }
      }
    ]
  },
  "weaknesses": [
    {
      "source": "[email protected]",
      "type": "Secondary",
      "description": [
        {
          "lang": "en",
          "value": "CWE-772"
        }
      ]
    }
  ],
  "references": [
    {
      "url": "https://github.com/zephyrproject-rtos/zephyr/commit/29e3476501a65c0bcd469abd275749d324008ce2",
      "source": "[email protected]"
    },
    {
      "url": "https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-q3mh-4wj7-mq7f",
      "source": "[email protected]"
    }
  ]
}