Skip to content
Fencer Intel
no cvss —

JLSEC-2026-623 json

Insufficient HTTP/2 pseudo-header and Host/:authority validation 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/2 server's request validator passed only `:method`, `:path`, and `:authority` through a normalizer that rejects CR/LF/CTL but permits SP/HTAB and applies no host or token grammar. As a result a `:method` such as `"GET /admin?x="` was accepted, `:path` could carry interior whitespace, and `:authority` was never host-validated; on HTTP/1 downgrade these were written verbatim into the request line, enabling request smuggling past path-based ACLs. Separately, a request could carry both a benign `:authority` and a mismatched `Host` header, which the HTTP/1 serializer forwarded verbatim, so a proxy could authorize on `:authority` while forwarding a hostile `Host` to an origin.

### Impact

These gaps enabled request smuggling past path-based access controls and authority/Host confusion when HTTP/2 requests were downgraded or forwarded.

### Patches

Fixed in HTTP.jl v2.4.0. `:method` must match the RFC 9110 token charset, `:path` must not contain interior SP/HTAB, `:authority` must pass the host validator, and — per RFC 9113 §8.3.1 — when `:authority` is present every `Host` header value (checking all entries, not just the first) must equal it, otherwise the request is rejected as malformed.

Reported to the JuliaLang security team through Anthropic's Coordinated Vulnerability Disclosure program.

Patch / fix

  • julia HTTP 2.4.0

Is JLSEC-2026-623 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.