IT SBIT Services
Schneeberger
DEEN
CVE tracker

Zephyr HTTP server: Out-of-bounds write in HTTP/2 static file handler

CVE-2026-82391Critical 9.1

← All vulnerabilities

Summary

The HTTP/2 static-filesystem handler of the Zephyr HTTP server overwrites the connection receive-length counter with the size of the requested file. An unauthenticated HTTP/2 GET for any file under the web root can therefore corrupt memory in the device, with no TLS or credentials required. The impact is at least a crash or hang of the device, and code execution is considered plausible but is not confirmed. The condition applies only to applications that register a static-filesystem resource with CONFIG_FILE_SYSTEM=y and have HTTP/2 enabled, which is the default.

Affected

  • Zephyr 4.0.0 up to but excluding 4.3.2
  • Zephyr 4.4.0 up to but excluding 4.5.0
  • Default configuration is not affected per the CNA record

Fixed in

  • Zephyr 4.3.2
  • Zephyr 4.5.0
  • Zephyr 4.4.x: Unknown, check the Zephyr release page

Workaround

Unknown. No official workaround. Disabling HTTP/2 (CONFIG_HTTP_SERVER_VERSION_2) or not registering static-filesystem resources would likely remove the exposure, but this is untested.

Exploitation

  • No confirmed exploitation in the wild found
  • No public proof of concept found
  • CISA KEV status: Unknown

Our recommendation

  • Inventory Zephyr-based devices and their firmware versions, and ask device vendors whether Zephyr is used
  • Update to a fixed version (4.3.2 or 4.5.0) or obtain a fixed firmware from the vendor
  • Until patched, restrict device web interfaces to internal networks and do not expose them directly to the internet
  • Monitor device logs for unusual HTTP/2 requests and crashes or reboots

Public exploits

PoC-in-GitHub, Metasploit and Exploit-DB list nothing for this CVE.

Research sources

Researched and written up in English and German by an AI (Claude by Anthropic) based on NVD, CISA, EPSS and the sources listed. The vendor information is authoritative. Researched on 10 Nov 2026, 23:37.

Original description (NVD)

The HTTP/2 front-end of the Zephyr HTTP server aliased connection receive state as a scratch output. In subsys/net/lib/http/http_server_http2.c, handle_http2_static_fs_resource() passed &client->data_len as the file_size out-parameter of http_server_find_file(). client->data_len is the count of unprocessed bytes remaining in the fixed-size per-connection receive buffer client->buffer[CONFIG_HTTP_SERVER_CLIENT_BUFFER_SIZE] (256 bytes by default), an invariant every frame handler and the socket receive path rely on. Serving any static file therefore replaced that bounded value with the file's on-disk size, and nothing resets it afterwards. The defect is reached by an unauthenticated HTTP/2 GET for any file under the web root, in applications that register a static-filesystem resource (HTTP_RESOURCE_TYPE_STATIC_FS) with CONFIG_FILE_SYSTEM=y; CONFIG_HTTP_SERVER_VERSION_2 is enabled by default and no TLS or credentials are required on this path. Once client->data_len exceeds the buffer size, the frame dispatch loop in subsys/net/lib/http/http_server_core.c keeps parsing past the end of the received data, and the peer controls the bytes at client->cursor, so it can choose which fabricated frame the state machine consumes next by appending bytes after its request. The inflated length defeats the only guards on the buffer. parse_http_frame_header() and the per-frame handlers read and skip up to a 24-bit frame length beyond the buffer (out-of-bounds read); the compaction memmove(client->buffer, client->cursor, client->data_len) at the end of request handling copies the file-size number of bytes into the 256-byte buffer, overflowing the rest of struct http_client_ctx — including the current_detail/current_stream pointers, the parser_settings function-pointer table and the inactivity_timer work handler — and the adjacent client contexts in static memory; and the subsequent zsock_recv(client->fd, client->buffer + client->data_len, sizeof(client->buffer) - client->data_len, 0) underflows its size argument, writing attacker-supplied data of attacker-chosen length out of bounds. The impact is remote memory corruption in the server's single address space: at minimum a crash or hang of the device, and plausibly control-data overwrite leading to code execution. The HTTP/1 and HTTP/3 static-filesystem handlers already used a local variable and are unaffected; the fix makes the HTTP/2 handler use a local size_t file_size as well.

NVD references (2)

Sources

The tracker combines official, freely usable data sources – updated continuously:

This product uses data from the NVD API but is not endorsed or certified by the NVD. EPSS data © FIRST.org.

Affected? We can help.

We check whether your systems are affected, install updates and close the gap – continuously with the System Health Checker if you wish.