Hi,

HAProxy 2.8.20 was released on 2026/03/20. It added 16 new commits after
version 2.8.19. The most notable changes are in the HTTP/3 and HTTP/2
parsers, mixed with a serie of less important ones in the rest of the
code.

HTTP/3 is responsible to check that the received payload size is equal
to the content-length header if advertised. This prevents any risk of
desynchronization with the backend side which could be exploited for
request smuggling. This check is already performed most of the times,
but it was missing when the stream was closed with an empty STREAM
frame. This major flaw has been reported by Martino Spagnuolo. Thanks to
him, a proper fix has been integrated with the necessary check now also
performed when parsing empty frames. A CVE will be requested soon.

Another issue in the HTTP/3 parser was the manipulation of unaligned
non-DATA frames which resulted in undefined behavior. In practice,
currently this condition never happens in a real-case scenario. As such,
the safest solution is implemented for now with the connection
immediately closed and glitch counter incremented.

HTTP/2 and HTTP/3 parsers are also improved together to ensure any
partial headers or trailers are properly removed on error from the HTX
message. Also, the accounting for maximum trailers was not correct.

An interoperability issue has been found in HTTP/2 multiplexer. The
handling of GOAWAY and WINDOW_UPDATE is corrected to properly ignore the
R bit when reading the stream ID as specified by the standard. This
could have cause haproxy to ignore a received GOAWAY frame and continue
to open new streams. This issue has been reported by Haruto Kimura and
fixed thanks to him.

Parser for the peers protocol is strengthened. Now received key type is
always checked for conformity to prevent any risk of crash. In practice,
as the peer protocol is only used in trusted network, the risk remains
very low though. Thanks again to Haruto Kimura for having also found
this one.

Several minor fixes are related to the master process and the reload
operation. The most important one is the correction of a file-descriptor
leak present since 3.1 which can occur during the transfer of FDs via
sockpair from a worker process to the master.

Thanks to everyone who contributed to this release,

Please find the usual URLs below :
   Site index       : https://www.haproxy.org/
   Documentation    : https://docs.haproxy.org/
   Wiki             : https://github.com/haproxy/wiki/wiki
   Discourse        : https://discourse.haproxy.org/
   Slack channel    : https://slack.haproxy.org/
   Issue tracker    : https://github.com/haproxy/haproxy/issues
   Q&A from devs    : https://github.com/orgs/haproxy/discussions
   Sources          : https://www.haproxy.org/download/2.8/src/
   Git repository   : https://git.haproxy.org/git/haproxy-2.8.git/
   Git Web browsing : https://git.haproxy.org/?p=haproxy-2.8.git
   Changelog        : https://www.haproxy.org/download/2.8/src/CHANGELOG
   Dataplane API    : 
https://github.com/haproxytech/dataplaneapi/releases/latest
   Pending bugs     : https://www.haproxy.org/l/pending-bugs
   Reviewed bugs    : https://www.haproxy.org/l/reviewed-bugs
   Code reports     : https://www.haproxy.org/l/code-reports
   Latest builds    : https://www.haproxy.org/l/dev-packages

---
Complete changelog :
Amaury Denoyelle (2):
      BUG/MAJOR: h3: check body size with content-length on empty FIN
      BUG/MEDIUM: h3: reject unaligned frames except DATA

Christopher Faulet (5):
      BUG/MINOR: h2/h3: Only test number of trailers inserted in HTX message
      MINOR: htx: Add function to truncate all blocks after a specific block
      BUG/MINOR: h2/h3: Never insert partial headers/trailers in an HTX message
      BUG/MINOR: http-ana: Swap L7 buffer with request buffer by hand
      BUG/MINOR: stream: Fix crash in stream dump if the current rule has no 
keyword

Tim Duesterhus (1):
      BUG/MINOR: tcpcheck: Fix typo in error error message for `http-check 
expect`

Tom Braarup (1):
      DOC: configuration: http-check expect example typo

William Lallemand (4):
      CI: github: treat vX.Y.Z release tags as stable like haproxy-* branches
      BUG/MINOR: mworker: fix typo &= instead of & in proc list serialization
      BUG/MINOR: sockpair: set FD_CLOEXEC on fd received via SCM_RIGHTS
      BUG/MINOR: mjson: make mystrtod() length-aware to prevent out-of-bounds 
reads

Willy Tarreau (3):
      BUG/MEDIUM: peers: enforce check on incoming table key type
      BUG/MINOR: mux-h2: properly ignore R bit in GOAWAY stream ID
      BUG/MINOR: mux-h2: properly ignore R bit in WINDOW_UPDATE increments

-- 
Amaury Denoyelle


Reply via email to