Skip to content
Fencer Intel
no cvss —

JLSEC-2026-618 json

HTTP/1 request smuggling via bare-LF, lenient chunk size, and TE/CL handling in HTTP.jl server

published 4mo ago modified 3mo ago

cvss
—
not scored
cisa kev
Not listed
not in CISA's catalog
epss
—
no score, EPSS covers CVEs only
public exploits
0
none known

Summary

### 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.

Patch / fix

  • julia HTTP 2.4.0

Is JLSEC-2026-618 in your dependencies? Fencer shows which of your repositories are affected as soon as an advisory lands, and opens the fix as a pull request.

Check with Fencer

Affected packages

ecosystem package affected fixed in
julia HTTP
<2.4.0
2.4.0

References

Sources

Fencer Intel keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.