TinyWeb HTTP Request Smuggling via Unsupported Transfer-Encoding

Security Advisory. Published: July 18, 2026. Fixed in TinyWeb v2.05 (July 18, 2026).

Summary

In versions up to and including 2.04, TinyWeb HTTP Server accepted requests carrying a Transfer-Encoding header without implementing any transfer coding. It did not reject such requests, so the body octets (for example a chunked payload) could be interpreted differently by TinyWeb than by an upstream proxy or cache. This inconsistent interpretation of the request enables HTTP request smuggling: a remote, unauthenticated attacker positioned behind a shared proxy or cache could desynchronize the request stream and have body octets reinterpreted as a pipelined request, potentially poisoning caches or bypassing front-end access controls.

Severity: Medium (CVSS 3.1 Base Score: 5.9)

Vulnerability Details

GitHub Security Advisory GHSA-56x3-254q-j68q
Vulnerability Type Inconsistent Interpretation of HTTP Requests / HTTP Request Smuggling (CWE-444)
Attack Type Remote
Attack Vector Network (unauthenticated HTTP request via a shared proxy or cache)
Vendor/Maintainer Maxim Masiutin
Product TinyWeb HTTP Server for Windows
Affected Versions Version 2.04 and below
Fixed Version 2.05 (July 18, 2026)
Impact HTTP Request Smuggling, Cache Poisoning, Access Control Bypass

CVSS Score

CVSS Version Score Severity Vector String
CVSS 3.1 5.9 Medium AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:N

Technical Details

Root Cause

TinyWeb does not implement any HTTP transfer coding. It determines the length of a request body from the Content-Length header only. When a request also carried a Transfer-Encoding header (for example Transfer-Encoding: chunked), TinyWeb ignored the transfer coding rather than rejecting the request. It therefore parsed the body octets according to its own rules, which do not match how a compliant proxy or cache that honors Transfer-Encoding would frame the same bytes.

Mechanism

When two HTTP components on the same connection disagree about where one request ends and the next begins, the request stream desynchronizes. An upstream proxy that honors Transfer-Encoding: chunked frames the body one way, while TinyWeb, ignoring the header, frames it another way. The trailing octets that TinyWeb does not consume as part of the first request body are then interpreted as the start of a second, pipelined request that the attacker fully controls.

Attack Scenarios

  • Cache poisoning: The smuggled inner request causes a cache in front of TinyWeb to store an attacker-influenced response for a resource requested by other users.
  • Access control bypass: A front-end that enforces access controls inspects only the outer request and forwards it, while TinyWeb acts on the smuggled inner request against a resource the front-end intended to protect.
  • Request stream desynchronization: Body octets are reinterpreted as a pipelined request, corrupting responses served to subsequent clients sharing the connection.

RFC Compliance

Per RFC 9112 Section 3.3.1, a server that does not implement the transfer coding named in a request must respond with 501 Not Implemented. Silently ignoring the header and processing the body by other means is the exact condition that permits request smuggling.

Fix Applied in Version 2.05

The problem has been patched in version 2.05. Any request with a non-empty Transfer-Encoding header now receives 501 Not Implemented, per RFC 9112 Section 3.3.1, so the ambiguous body can no longer be reinterpreted.

Workarounds

If upgrading to v2.05 is not immediately possible, consider the following mitigations:

  • Deploy TinyWeb only behind a proxy that normalizes or rejects Transfer-Encoding on requests it forwards.
  • Restrict access so that no untrusted intermediary shares a connection to the server.

Timeline

July 18, 2026 Vulnerability identified by Maxim Masiutin
July 18, 2026 Fix implemented and committed to master (v2.05)
July 18, 2026 Security advisory published (GHSA-56x3-254q-j68q)

References

Other TinyWeb CVEs

GHSA-rprm-fpv2-mwwf Socket Counter Imbalance Re-enables Slowloris (CWE-400) - Fixed in v2.05. CVSS 7.5 High. Advisory
GHSA-wxxh-8845-3c89 Log Injection via Control Characters in Request URI (CWE-117, CWE-93) - Fixed in v2.05. CVSS 5.3 Medium. Advisory
CVE-2026-29046 HTTP Header Control Character Injection into CGI Environment (CWE-113) - Fixed in v2.04. CVSS 8.8 High. Advisory
CVE-2026-28497 Integer Overflow / HTTP Request Smuggling (CWE-190, CWE-444) - Fixed in v2.03. CVSS 8.7 High. Advisory
CVE-2026-27633 Content-Length Memory Exhaustion (CWE-400) - Fixed in v2.02. CVSS 8.7 High. Advisory
CVE-2026-27630 Thread/Connection Exhaustion Slowloris (CWE-400) - Fixed in v2.02. CVSS 8.7 High. Advisory
CVE-2026-27613 CGI Parameter Injection (CWE-78, CWE-88) - Fixed in v2.01. CVSS 9.3 Critical. Advisory
CVE-2024-34199 Buffer Overflow (CWE-787) - Fixed in v1.99. CVSS 8.6 High. Advisory
CVE-2024-5193 CRLF Injection (CWE-93) - Fixed in v1.99. CVSS 5.3 Medium. Advisory
CVE-2004-2636 Path Traversal (CWE-22) - Fixed in v1.93. CVSS 5.0 Medium. Advisory
CVE-2003-1510 Denial of Service (CWE-400) - Fixed in v1.93. CVSS 7.8 High. Advisory