CVE-2026-10849
Heap out-of-bounds write in Zephyr hawkBit OTA client when terminating server response body
Description
The hawkBit device management client in subsys/mgmt/hawkbit accumulates the body of an HTTP response from the update server into a heap buffer in response_json_cb() (subsys/mgmt/hawkbit/hawkbit.c). The buffer is sized to hold the received body bytes but reserves no space for a terminating NUL. When the full response has arrived, the code writes response_data[downloaded_size] = '\0' — and whenever the accumulated body length equals the allocation, that terminator lands one byte past the end of the heap object (a heap-based out-of-bounds write, CWE-122 / CWE-787). The body length and fragmentation are taken directly from the parsed HTTP response (rsp->body_frag_start / rsp->body_frag_len) and are fully controlled by the remote hawkBit server, which chooses its own response length. The precise trigger depends on how the buffer grows, and both forms are remotely reachable. Since v4.0.0 the reallocation is sized to exactly downloaded_size + body_len, so any response body larger than the 1100-byte initial buffer makes the out-of-bounds write deterministic; such response sizes are normal for hawkBit deployment metadata. Before v4.0.0 the buffer grew by doubling and the growth check ((downloaded_size + body_len) > response_buffer_size) is false at equality, so a response body whose length is exactly the current allocation — 1100 bytes with the default initial buffer — skips the reallocation entirely and writes the terminator at response_data[1100] of an 1100-byte object. The HTTP length-mismatch check does not catch this, because the declared and received lengths genuinely agree. Either form is reachable by a malicious, compromised, or man-in-the-middle update server (TLS is optional and, when enabled, does not protect against a hostile server), with no authentication of response content and no client-side length cap protecting the write. The out-of-bounds write is a fixed single NUL byte immediately following the allocation, corrupting adjacent allocator metadata or the next allocation. The practical impact is heap corruption leading to denial of service (fault on a subsequent allocation or free), with the bounded, allocator-dependent possibility of further corruption. The fix sizes the buffer to the body length plus one and copies with memcpy, ensuring the terminator always lands within the allocation.
INFO
Published Date :
Aug. 3, 2026, 10:16 p.m.
Last Modified :
Oct. 23, 2026, 9:10 p.m.
Remotely Exploit :
No
Source :
[email protected]
Affected Products
The following products are affected by CVE-2026-10849
vulnerability.
Even if cvefeed.io is aware of the exact versions of the
products
that
are
affected, the information is not represented in the table below.
CVSS Scores
| Score | Version | Severity | Vector | Exploitability Score | Impact Score | Source |
|---|---|---|---|---|---|---|
| CVSS | 134c704f-9b21-4f2e-91b3-4a467353bcc0 | |||||
| CVSS 3.1 | HIGH | e2e69745-5e70-4e92-8431-deb5529a81ad | ||||
| CVSS 3.1 | HIGH | [email protected] | ||||
| CVSS 3.1 | HIGH | MITRE-CVE | ||||
| CVSS 3.1 | HIGH | [email protected] |
Solution
- Size buffer to body length plus one byte.
- Copy response body using memcpy.
- Ensure terminator lands within allocated buffer.
- Apply vendor patch for hawkBit device management client.
References to Advisories, Solutions, and Tools
Here, you will find a curated list of external links that provide in-depth
information, practical solutions, and valuable tools related to
CVE-2026-10849.
| URL | Resource |
|---|---|
| https://github.com/zephyrproject-rtos/zephyr/commit/59d7ab58d853489e6134081cadb11733730264ac | Patch |
| https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-39h3-7phx-pwhv | Exploit Patch Vendor Advisory |
CWE - Common Weakness Enumeration
While CVE identifies
specific instances of vulnerabilities, CWE categorizes the common flaws or
weaknesses that can lead to vulnerabilities. CVE-2026-10849 is
associated with the following CWEs:
Common Attack Pattern Enumeration and Classification (CAPEC)
Common Attack Pattern Enumeration and Classification
(CAPEC)
stores attack patterns, which are descriptions of the common attributes and
approaches employed by adversaries to exploit the CVE-2026-10849
weaknesses.
We scan GitHub repositories to detect new proof-of-concept exploits. Following list is a collection of public exploits and proof-of-concepts, which have been published on GitHub (sorted by the most recently updated).
Results are limited to the first 15 repositories due to potential performance issues.
The following list is the news that have been mention
CVE-2026-10849 vulnerability anywhere in the article.
The following table lists the changes that have been made to the
CVE-2026-10849 vulnerability over time.
Vulnerability history details can be useful for understanding the evolution of a vulnerability, and for identifying the most recent changes that may impact the vulnerability's severity, exploitability, or other characteristics.
-
CVE Translated by [email protected]
Oct. 23, 2026
Action Type Old Value New Value Added Translation Title: zephyr de zephyrproject, Description: El cliente de gestión de dispositivos hawkBit en subsys/mgmt/hawkbit acumula el cuerpo de una respuesta HTTP del servidor de actualización en un búfer de pila en response_json_cb() (subsys/mgmt/hawkbit/hawkbit.c). El búfer está dimensionado para contener los bytes del cuerpo recibidos, pero no reserva espacio para un NUL de terminación. Cuando ha llegado la respuesta completa, el código escribe response_data[downloaded_size] = ’\0’ - y siempre que la longitud del cuerpo acumulado sea igual a la asignación, ese terminador cae un byte más allá del final del objeto de pila (una escritura fuera de límites basada en pila, CWE-122 / CWE-787). La longitud del cuerpo y la fragmentación se toman directamente de la respuesta HTTP analizada (rsp -> body_frag_start / rsp -> body_frag_len) y están totalmente controladas por el servidor hawkBit remoto, que elige su propia longitud de respuesta. El disparador preciso depende de cómo crece el búfer, y ambas formas son accesibles de forma remota. Desde la v4.0.0 la reasignación se dimensiona exactamente a downloaded_size + body_len, por lo que cualquier cuerpo de respuesta mayor que el búfer inicial de 1100 bytes hace que la escritura fuera de límites sea determinista; tales tamaños de respuesta son normales para los metadatos de despliegue de hawkBit. Antes de la v4.0.0 el búfer crecía duplicándose y la comprobación de crecimiento ((downloaded_size + body_len) > response_buffer_size) es falsa en la igualdad, por lo que un cuerpo de respuesta cuya longitud es exactamente la asignación actual - 1100 bytes con el búfer inicial predeterminado - omite la reasignación por completo y escribe el terminador en response_data[1100] de un objeto de 1100 bytes. La comprobación de falta de coincidencia de longitud HTTP no detecta esto, porque las longitudes declaradas y recibidas coinciden genuinamente. Cualquiera de las formas es alcanzable por un servidor de actualización malicioso, comprometido o man-in-the-middle (TLS es opcional y, cuando está habilitado, no protege contra un servidor hostil), sin autenticación del contenido de la respuesta y sin límite de longitud del lado del cliente que proteja la escritura. La escritura fuera de límites es un único byte NUL fijo inmediatamente después de la asignación, corrompiendo los metadatos adyacentes del asignador o la siguiente asignación. El impacto práctico es la corrupción de la pila que lleva a la denegación de servicio (fallo en una asignación o liberación posterior), con la posibilidad limitada y dependiente del asignador de una mayor corrupción. La solución dimensiona el búfer a la longitud del cuerpo más uno y copia con memcpy, asegurando que el terminador siempre caiga dentro de la asignación. -
CVE Modified by [email protected]
Sep. 01, 2026
Action Type Old Value New Value Added Affected Affected value modified. <a href="https://github.com/CVEProject/cvelistV5/blob/main/cves/2026/10xxx/CVE-2026-10849.json">CVE-2026-10849</a> Added Reference https://github.com/zephyrproject-rtos/zephyr/commit/59d7ab58d853489e6134081cadb11733730264ac Added Reference https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-39h3-7phx-pwhv Removed Reference https://github.com/zephyrproject-rtos/zephyr/commit/59d7ab58d853489e6134081cadb11733730264ac Removed Reference https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-39h3-7phx-pwhv Removed Reference Type https://github.com/zephyrproject-rtos/zephyr/commit/59d7ab58d853489e6134081cadb11733730264ac Types: Patch Removed Reference Type https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-39h3-7phx-pwhv Types: Exploit, Patch, Vendor Advisory -
Initial Analysis by [email protected]
Aug. 09, 2026
Action Type Old Value New Value Added CVSS V3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H Added CPE Configuration OR *cpe:2.3:o:zephyrproject:zephyr:*:*:*:*:*:*:*:* versions from (including) 2.4.0 up to (excluding) 4.5.0 Added Reference Type Zephyr Project: https://github.com/zephyrproject-rtos/zephyr/commit/59d7ab58d853489e6134081cadb11733730264ac Types: Patch Added Reference Type Zephyr Project: https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-39h3-7phx-pwhv Types: Exploit, Patch, Vendor Advisory -
CVE Modified by 134c704f-9b21-4f2e-91b3-4a467353bcc0
Aug. 04, 2026
Action Type Old Value New Value Added SSVC {'id': 'CVE-2026-10849', 'role': 'CISA Coordinator', 'options': [{'exploitation': 'none'}, {'automatable': 'yes'}, {'technicalImpact': 'partial'}], 'version': '2.0.3', 'timestamp': '2026-08-04T19:29:17.471804Z'} -
New CVE Received by [email protected]
Aug. 03, 2026
Action Type Old Value New Value Added Affected [{'vendor': 'zephyrproject', 'product': 'zephyr', 'versions': [{'status': 'affected', 'version': '2.4.0', 'lessThan': '4.5.0', 'versionType': 'semver'}], 'packageName': 'zephyr', 'programFiles': ['subsys/mgmt/hawkbit/hawkbit.c'], 'collectionURL': 'https://github.com/zephyrproject-rtos/zephyr', 'defaultStatus': 'unaffected'}] Added Description The hawkBit device management client in subsys/mgmt/hawkbit accumulates the body of an HTTP response from the update server into a heap buffer in response_json_cb() (subsys/mgmt/hawkbit/hawkbit.c). The buffer is sized to hold the received body bytes but reserves no space for a terminating NUL. When the full response has arrived, the code writes response_data[downloaded_size] = '\0' — and whenever the accumulated body length equals the allocation, that terminator lands one byte past the end of the heap object (a heap-based out-of-bounds write, CWE-122 / CWE-787). The body length and fragmentation are taken directly from the parsed HTTP response (rsp->body_frag_start / rsp->body_frag_len) and are fully controlled by the remote hawkBit server, which chooses its own response length. The precise trigger depends on how the buffer grows, and both forms are remotely reachable. Since v4.0.0 the reallocation is sized to exactly downloaded_size + body_len, so any response body larger than the 1100-byte initial buffer makes the out-of-bounds write deterministic; such response sizes are normal for hawkBit deployment metadata. Before v4.0.0 the buffer grew by doubling and the growth check ((downloaded_size + body_len) > response_buffer_size) is false at equality, so a response body whose length is exactly the current allocation — 1100 bytes with the default initial buffer — skips the reallocation entirely and writes the terminator at response_data[1100] of an 1100-byte object. The HTTP length-mismatch check does not catch this, because the declared and received lengths genuinely agree. Either form is reachable by a malicious, compromised, or man-in-the-middle update server (TLS is optional and, when enabled, does not protect against a hostile server), with no authentication of response content and no client-side length cap protecting the write. The out-of-bounds write is a fixed single NUL byte immediately following the allocation, corrupting adjacent allocator metadata or the next allocation. The practical impact is heap corruption leading to denial of service (fault on a subsequent allocation or free), with the bounded, allocator-dependent possibility of further corruption. The fix sizes the buffer to the body length plus one and copies with memcpy, ensuring the terminator always lands within the allocation. Added CVSS V3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:H Added CWE CWE-787 Added CWE CWE-122 Added Reference https://github.com/zephyrproject-rtos/zephyr/commit/59d7ab58d853489e6134081cadb11733730264ac Added Reference https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-39h3-7phx-pwhv