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-Encodingon 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
- TinyWeb GitHub Repository
- GitHub Security Advisory GHSA-56x3-254q-j68q
- Fix Commit 06efa04
- Fix Pull Request #5
- CWE-444: Inconsistent Interpretation of HTTP Requests (HTTP Request Smuggling)
- RFC 9112 Section 3.3.1 - Message Body Length and Transfer-Encoding
- CVE-2026-28497: related request-smuggling fix (GHSA-rp8j-cx7r-mw9f), fixed in v2.03
- TinyWeb Socket Counter Imbalance Re-enables Slowloris Connection Exhaustion (GHSA-rprm-fpv2-mwwf)
- TinyWeb Log Injection via Control Characters in Request URI (GHSA-wxxh-8845-3c89)
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 |