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.
{
"cna_assigner": "zephyr",
"cwe_ids": [
"CWE-787"
],
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/82xxx/CVE-2026-82391.json"
}{
"extracted_events": [
{
"range": [
{
"introduced": "4.0.0"
},
{
"fixed": "4.3.2"
}
],
"source": "AFFECTED_FIELD",
"strategy": "StandardRange"
},
{
"range": [
{
"introduced": "4.4.0"
},
{
"fixed": "4.5.0"
}
],
"source": "AFFECTED_FIELD",
"strategy": "StandardRange"
},
{
"range": [
{
"fixed": "4e0a5f38b14dba5891fb558c49a526f9f6a3cc29"
}
],
"source": "REFERENCES_COMMIT"
}
]
}
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-82391.json"
[
{
"deprecated": false,
"digest": {
"function_hash": "96353323809734983777847158738994580425",
"length": 2339
},
"id": "CVE-2026-82391-202e3164",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/zephyrproject-rtos/zephyr/commit/4e0a5f38b14dba5891fb558c49a526f9f6a3cc29",
"target": {
"file": "subsys/net/lib/http/http_server_http2.c",
"function": "handle_http2_static_fs_resource"
}
},
{
"deprecated": false,
"digest": {
"line_hashes": [
"331692616837336972599785128611646034949",
"260623531537493707532267351409005993642",
"18818221601573250247411496270655769857",
"308408105724144282773669065855376840152",
"87762761422018736715924864930395315827",
"234347326583590443185872953237463286428",
"252575363533289693373843599634549722435",
"267674360358781166785226984046099484572",
"268061566255039288647723987588808641108",
"72663869987188859900253768142706743234",
"118946166383827959429370400391752725424",
"17708829465746509409391368135409961996",
"170343655114912040971039772558541815454",
"47535072411875479813687998956482112336",
"338974072496433971192570751942242052744"
],
"threshold": 0.9
},
"id": "CVE-2026-82391-706f02a2",
"signature_type": "Line",
"signature_version": "v1",
"source": "https://github.com/zephyrproject-rtos/zephyr/commit/4e0a5f38b14dba5891fb558c49a526f9f6a3cc29",
"target": {
"file": "subsys/net/lib/http/http_server_http2.c"
}
}
]
"2026-11-11T13:25:19Z"