Hi, HAProxy 2.8.16 was released on 2025/10/03. It added 110 new commits after version 2.8.15.
It is not the usual announce message describing all bugs fixed by this release. Here, only the critical fixes about the mjson JSON decoder will be described. The formal announce message will come quickly after that, by replying to this mail, most probably next Monday. So, as said, an issue in the mjson JSON decoder causes number with large exponents to eat a lot of CPU and possibly even to trigger the watchdog and kill the process. It affects converters "json_query()", "jwt_header_query()", and "jwt_payload_query()". There's no work around for this because the issue is at a really low level in the decoder, so one cannot really count on a reasonable regex or such a thing to fix this. This bug was assigned CVE-2025-11230 and affects all versions featuring the JSON decoder, or 2.4 and above. Only an update will fix this. We'd like to thank Oula Kivalo for reporting the issue with a reproducer. As a note, we were notified that CVE-2023-30421 had already been assigned to the mjson library two years ago about the same issue but no fix had been issued and it was not mentioned in the project (though an issue about this was reported). If you rely on one of the converters above, you must definitely upgrade. Otherwise, stay tune for the official announce message to have more info about 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 (17): MINOR: quic: extend return value during TP parsing BUG/MINOR: quic: use proper error code on missing CID in TPs BUG/MINOR: quic: use proper error code on invalid server TP BUG/MINOR: quic: reject retry_source_cid TP on server side BUG/MINOR: quic: use proper error code on invalid received TP value BUG/MINOR: quic: fix TP reject on invalid max-ack-delay BUG/MINOR: quic: reject invalid max_udp_payload size BUG/MINOR: mux-quic: do not decode if conn in error BUG/MINOR: config/server: reject QUIC addresses DOC: list missing global QUIC settings BUG/MINOR: mux-h1: fix wrong lock label BUG/MINOR: quic: do not emit probe data if CONNECTION_CLOSE requested MINOR: doc: add missing statistics column MINOR: doc: add missing statistics column BUG/MINOR: quic: fix room check if padding requested OPTIM: check: do not delay MUX for ALPN if SSL not active BUG/MEDIUM: checks: fix ALPN inheritance from server Aurelien DARRAGON (10): MINOR: applet: add appctx_schedule() macro BUG/MINOR: dns: add tempo between 2 connection attempts for dns servers CLEANUP: dns: remove unused dns_stream_server struct member BUG/MINOR: dns: prevent ds accumulation within dss BUG/MINOR: proxy: only use proxy_inc_fe_cum_sess_ver_ctr() with frontends BUG/MINOR: cli: fix too many args detection for commands BUG/MINOR: threads: fix soft-stop without multithreading support BUG/MINOR: sink: detect and warn when using "send-proxy" options with ring servers DOC: config: restore default values for resolvers hold directive BUG/MINOR: hlua: take default-path into account with lua-load-per-thread Christopher Faulet (35): BUG/MINOR: cli: Issue an error when too many args are passed for a command BUG/MINOR: mux-h1: Don't pretend connection was released for TCP>H1>H2 upgrade BUG/MINOR: mux-h1: Fix trace message in h1_detroy() to not relay on connection BUG/MINOR: hlua: Fix Channel:data() and Channel:line() to respect documentation MEDIUM: hlua: Add function to change the body length of an HTTP Message BUG/MINOR: mux-h2: Reset streams with NO_ERROR code if full response was already sent BUG/MINOR: h3: Set HTX flags corresponding to the scheme found in the request REGTESTS: Make the script testing conditional set-var compatible with Vtest2 CI: vtest: Rely on VTest2 to run regression tests REGTESTS: Explicitly allow failing shell commands in some scripts BUG/MEDIUM: httpclient: Throw an error if an lua httpclient instance is reused DOC: hlua: Add a note to warn user about httpclient object reuse BUG/MEDIUM: check: Requeue healthchecks on I/O events to handle check timeout BUG/MEDIUM: check: Set SOCKERR by default when a connection error is reported BUG/MINOR: stream: Avoid recursive evaluation for unique-id based on itself BUG/MINOR: log: Be able to use %ID alias at anytime of the stream's evaluation BUG/MEDIUM: hlua: Forbid any L6/L7 sample fetche functions from lua services BUG/MEDIUM: mux-h2: Properly handle connection error during preface sending BUG/MINOR: hlua: Skip headers when a receive is performed on an HTTP applet BUG/MEDIUM: hlua: Report to SC when data were consumed on a lua socket BUG/MEDIUM: hlua: Report to SC when output data are blocked on a lua socket BUG/MEDIUM: dns: Reset reconnect tempo when connection is finally established BUG/MEDIUM: http-client: Don't wake http-client applet if nothing was xferred BUG/MEDIUM: http-client: Properly inc input data when HTX blocks are xferred BUG/MEDIUM: http-client: Ask for more room when request data cannot be xferred BUG/MINOR: http-client: Ignore 1XX interim responses in non-HTX mode BUG/MINOR: http-client: Reject any 101-switching-protocols response BUG/MEDIUM: http-client: Drain the request if an early response is received BUG/MEDIUM: http-client: Notify applet has more data to deliver until the EOM BUG/MINOR: applet: Don't trigger BUG_ON if the tid is not on appctx init BUG/MEDIUM: http-client: Test HTX_FL_EOM flag before commiting the HTX buffer BUG/MEDIUM: server: Duplicate healthcheck's alpn inherited from default server BUG/MINOR: server: Update healthcheck when server settings are changed via CLI BUG/MINOR: h3: Fix errors introduced because of failed backport Revert "BUG/MINOR: config/server: reject QUIC addresses" Frederic Lecaille (3): CLEANUP: quic: Useless BIO_METHOD initialization MINOR: quic: Add useful error traces about qc_ssl_sess_init() failures BUG/MINOR: quic: wrong QUIC_FT_CONNECTION_CLOSE(0x1c) frame encoding Lukas Tribus (3): DOC: ring: refer to newer RFC5424 DOC: management: fix typo in commit f4f93c56 DOC: config: recommend single quoting passwords Olivier Houchard (6): BUG/MEDIUM: fd: Use the provided tgid in fd_insert() to get tgroup_info BUG/MEDIUM: threads: Disable the workaround to load libgcc_s on macOS BUG/MEDIUM: ssl: Fix 0rtt to the server BUG/MEDIUM: ssl: fix build with AWS-LC BUG/MEDIUM: h1: Allow reception if we have early data BUG/MEDIUM: ssl: create the mux immediately on early data Remi Tricot-Le Breton (4): BUG/MINOR: jwt: Copy input and parameters in dedicated buffers in jwt_verify converter DOC: Fix 'jwt_verify' converter doc BUG/MINOR: init: Initialize random seed earlier in the init process BUG/MINOR: ocsp: Crash when updating CA during ocsp updates Valentine Krasnobaeva (8): BUG/MINOR: limits: compute_ideal_maxconn: don't cap remain if fd_hard_limit=0 BUG/MINOR: init: relax LSTCHK_NETADM checks for non root MINOR: compiler: add __nonstring macro DOC: config: prefer-last-server: add notes for non-deterministic algorithms BUG/MINOR: halog: exit with error when some output filters are set simultaneosly BUG/MINOR: stick-table: cap sticky counter idx with tune.nb_stk_ctr instead of MAX_SESS_STKCTR BUG/MINOR: acl: set arg_list->kw to aclkw->kw string literal if aclkw is found BUG/MINOR: resolvers: always normalize FQDN from response William Lallemand (6): BUG/MEDIUM: ssl/clienthello: ECDSA with ssl-max-ver TLSv1.2 and no ECDSA ciphers DOC: configuration: add details on prefer-client-ciphers DOC: management: clarify usage of -V with -c DOC: unreliable sockpair@ on macOS DOC: configuration: confuse "strict-mode" with "zero-warning" BUG/MEDIUM: ssl: ca-file directory mode must read every certificates of a file Willy Tarreau (16): BUG/MAJOR: listeners: transfer connection accounting when switching listeners DOC: config: recommend disabling libc-based resolution with resolvers BUG/MINOR: h3: don't insert more than one Host header BUILD: makefile: enable backtrace by default on musl DOC: hlua: fix a few typos in HTTPMessage.set_body_len() documentation MINOR: http: add a function to validate characters of :authority BUG/MEDIUM: h2/h3: reject some forbidden chars in :authority before reassembly BUG/MEDIUM: h1/h2/h3: reject forbidden chars in the Host header field SCRIPTS: drop the HTML generation from announce-release BUG/MINOR: listener: really assign distinct IDs to shards BUILD: compat: always set _POSIX_VERSION to ease comparisons BUG/MINOR: haproxy: be sure not to quit too early on soft stop BUILD: acl: silence a possible null deref warning in parse_acl_expr() BUG/MINOR: activity: fix reporting of task latency DOC: config: clarify some known limitations of the json_query() converter BUG/CRITICAL: mjson: fix possible DoS when parsing numbers zhanhb (2): BUG/MINOR: h2: forbid 'Z' as well in header field names checks BUG/MINOR: h3: forbid 'Z' as well in header field names checks --- Christopher Faulet

