HSEC-2026-0013

HTTP Request Smuggling in warp

warp's HTTP/1.x request parser accepted request framing that RFC 9112 requires recipients to refuse, so a request could frame one way for a front-end proxy reading it and another way for warp behind it. Whoever reads such a request the other way sees one request where the other sees two, which smuggles a request past the proxy: past access control, request validation, logging, or WAF rules. warp's HTTP/2 support delegates parsing to the http2 package and is not affected.

Six defects were fixed in warp 3.4.17:

Exploitation of the framing defects requires a front-end — reverse proxy, load balancer, WAF — that parses the ambiguous request differently from warp; the truncated-chunk defect also affects directly exposed servers.

Resolution

warp 3.4.17 validates the framing and refuses requests it cannot frame reliably, raising InvalidRequest with the new constructors UnsupportedTransferEncoding, AmbiguousBodyLength, BadFieldName, BadHeaderLine and BadChunkedBody; the default exception response is 400, or 501 for a transfer coding warp cannot decode.

Users are advised to upgrade to warp 3.4.17 or later. The lax parsing is verified back to warp 1.3.3, the oldest source retained in the upstream repository's tags; older release series are unsupported and should be upgraded regardless.

Info

Published
November 04, 2026
Modified
November 04, 2026
CAPECs
33
CWEs
444
Keywords
http, request-smuggling, framing, chunked, transfer-encoding, proxy
Aliases
< none >
Related
< none >
References
[REPORT] https://github.com/yesodweb/wai/issues/1129
[FIX] https://github.com/yesodweb/wai/compare/warp-3.4.16...warp-3.4.17
[PACKAGE] https://hackage.haskell.org/package/warp

Affected

@hackage/warp
CVSS
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L
Versions
>=1.3.3 && <3.4.17
Declarations
< none >
Affected APIs
< none >