ANT-2026-CN279YCX
HTTP/1 request smuggling via bare-LF, lenient chunk size, and TE/CL handling in HTTP.jl server
Description
The HTTP/1 server request parser had three framing primitives that could make HTTP.jl disagree with a fronting proxy about message boundaries on a reused keep-alive connection. (1) _readline_crlf tolerated a bare LF on its buffered fast path but required CRLF on the slow path, so the accepted header grammar depended on TCP segmentation and an absorbed bare LF could silently merge headers. (2) _parse_chunk_size delegated to Base.parse(Int64, ...; base=16), which tolerates a leading sign, a 0x prefix, and whitespace padding (including a trailing bare CR). (3) For HTTP/1.0, Transfer-Encoding was stripped with a fallback to Content-Length while the connection could stay open, and a request carrying both Transfer-Encoding and Content-Length was silently treated as chunked.
Impact
These parsing discrepancies enabled HTTP request smuggling past a fronting proxy on pooled/keep-alive connections.
Patches
Fixed in HTTP.jl v2.4.0. Both line-reading paths now require a strict CRLF and reject a bare LF; chunk sizes use a strict byte-by-byte 1*HEXDIG parser (rejecting signs, prefixes, and whitespace); HTTP/1.0 messages carrying Transfer-Encoding are rejected; and any request carrying both Transfer-Encoding and Content-Length is rejected. All rejections surface as a 400 with the connection force-closed so no ambiguous trailing bytes remain.
Reported to the JuliaLang security team through Anthropic's Coordinated Vulnerability Disclosure program.
What each source reports
OSVJLSEC-2026-618No score
HTTP/1 request smuggling via bare-LF, lenient chunk size, and TE/CL handling in HTTP.jl server
Description
The HTTP/1 server request parser had three framing primitives that could make HTTP.jl disagree with a fronting proxy about message boundaries on a reused keep-alive connection. (1) _readline_crlf tolerated a bare LF on its buffered fast path but required CRLF on the slow path, so the accepted header grammar depended on TCP segmentation and an absorbed bare LF could silently merge headers. (2) _parse_chunk_size delegated to Base.parse(Int64, ...; base=16), which tolerates a leading sign, a 0x prefix, and whitespace padding (including a trailing bare CR). (3) For HTTP/1.0, Transfer-Encoding was stripped with a fallback to Content-Length while the connection could stay open, and a request carrying both Transfer-Encoding and Content-Length was silently treated as chunked.
Impact
These parsing discrepancies enabled HTTP request smuggling past a fronting proxy on pooled/keep-alive connections.
Patches
Fixed in HTTP.jl v2.4.0. Both line-reading paths now require a strict CRLF and reject a bare LF; chunk sizes use a strict byte-by-byte 1*HEXDIG parser (rejecting signs, prefixes, and whitespace); HTTP/1.0 messages carrying Transfer-Encoding are rejected; and any request carrying both Transfer-Encoding and Content-Length is rejected. All rejections surface as a 400 with the connection force-closed so no ambiguous trailing bytes remain.
Reported to the JuliaLang security team through Anthropic's Coordinated Vulnerability Disclosure program.
- Record
JLSEC-2026-618- Updated
- 2026-11-02
Affected packages
| Package | Affected | Fixed |
|---|---|---|
HTTPJulia | before 2.4.0 | 2.4.0 |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
ANT-2026-CN279YCX is a vulnerability with no CVSS score yet in HTTP, published June 23, 2026. No source lists public exploit code. Fixed in HTTP 2.4.0.