Proposed minimal Jammy fix, built and tested on top of
2.4.30-0ubuntu0.22.04.3:

    if (!ret && !ofs && b_size(srcbuf) &&
        !buf_room_for_htx_data(srcbuf)) {

The attached patch requires an allocated source buffer before treating
lack of HTX room as an oversized chunk-size line. In HAProxy 2.4 an
empty buffer can be released while waiting for the next line. Its zero
size also makes buf_room_for_htx_data() return zero, which the unadapted
backport incorrectly treats as a full buffer. This guard preserves the
oversized-line rejection for a real allocated buffer. It does not revert
CVE-2026-110354, CVE-2026-110353, or any other .3 security patch.

Executed comparison in disposable Ubuntu 22.04 amd64 containers, using
identical configurations and localhost synthetic backends:

                             official .2   official .3   .3 + guard
Valid response/body checks       200/200        60/200       200/200
Protocol/security checks          10/28          26/28         28/28
Original published reproducer     10/10           0/10         10/10

The original reproducer from comment #1 is unchanged: the corrected
binary returns HTTP 200 with the complete 426-byte body in all 10
checks; official .3 returns 502 in all 10.

Additional cases cover split chunk-size digits and CRLF, final chunks,
trailers, chunk extensions, empty bodies, 64-KiB streams, content-length
and close-delimited responses, valid chunked uploads, and one/two
threads. The 28 protocol checks include oversized request/response
chunk-size lines and extensions at 1024/16384-byte buffer sizes,
subsequent chunks, recovery, and initial/subsequent H2 prefaces. The
candidate returns 400 promptly for oversized requests; malformed
responses return 502 before headers are forwarded or abort the
incomplete stream promptly afterward. All rejection checks retain a
1.5-second bound against 3-second proxy timeouts. Fragmented H2 prefaces
after an H1 transaction return 400, while legitimate initial H2 upgrades
continue to work.

A separate read-only comparison against the affected application's
existing three backend nodes gave 30/30 expected responses for .2, 1/30
for .3, and 30/30 for the candidate. No production listener, package or
routing was changed for these tests.

Independent source reconstruction confirms the guard is the sole change
in h1_htx.c; mux_h1.c, all 13 packaged configuration/service files, and
compiled feature flags match official .3. The local unsigned candidate
is 2.4.30-0ubuntu0.22.04.3+lp2172897.1. This is a proposed fix for
maintainer review, not an official update; the full upstream
regression/fuzz suite was not run, and the candidate has not been
installed in production.

Please review this adaptation for a corrected Jammy security update. A
companion source/test bundle contains the localhost harness, original
reproducer, runner and executed synthetic results, without private
deployment details.

Patch SHA256:
714240f9fdde04d68c733c76a3eddc08a66d579d71a8dda93aeae890e1e13a40


** CVE added: https://cve.org/CVERecord?id=CVE-2026-110353

** CVE added: https://cve.org/CVERecord?id=CVE-2026-110354

** Patch added: "Proposed LP #2172897 Jammy allocated-buffer fix"
   
https://bugs.launchpad.net/ubuntu/+source/haproxy/+bug/2172897/+attachment/6014781/+files/lp2172897-allocated-chunk-buffer.patch

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2172897

Title:
  haproxy 2.4.30-0ubuntu0.22.04.3: CVE-2026-110354 backport causes
  intermittent 502 (PH) on valid chunked responses

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/haproxy/+bug/2172897/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to