On 02 Apr 15:03, Willy Tarreau wrote:
> Hi,
> 
> HAProxy 2.1.4 was released on 2020/04/02. It added 99 new commits
> after version 2.1.3.
> 
> The main driver for this release is that it contains a fix for a serious
> vulnerability that was responsibly reported last week by Felix Wilhelm
> from Google Project Zero, affecting the HPACK decoder used for HTTP/2.
> CVE-2020-11100 was assigned to this issue.
> 
> There is no configuration-based workaround for 2.1 and above.


Is disabling HTTP2 a workaround?

Thanks.

> 
> This vulnerability makes it possible under certain circumstances to write
> to a wide range of memory locations within the process' heap, with the
> limitation that the attacker doesn't control the absolute address, so the
> most likely result and by a far margin will be a process crash, but it is
> not possible to completely rule out the faint possibility of a remote code
> execution, at least in a lab-controlled environment. Felix was kind enough
> to agree to delay the publication of his findings to the 20th of this month
> in order to leave enough time to haproxy users to apply updates. But please
> do not wait, as it is not very difficult to figure how to exploit the bug
> based on the fix. Distros were notified and will also have fixes available
> very shortly.
> 
> Three other important fixes are present in this version:
>   - a non-portable way of calculating a list pointer that breaks with
>     gcc 10 unless using -fno-tree-pta. This bug results in infinite loops
>     at random places in the code depending how the compiler decides to
>     optimize the code.
> 
>   - a bug in the way TLV fields are extracted from the PROXY protocol, as
>     they could be mistakenly looked up in the subsequent payload, even
>     though these would have limited effects since these ones would generally
>     be meaningless for the transported protocol, but could be used to hide a
>     source address from logging for example.
> 
>   - the "tarpit" rules were partially broken in that since 1.9 they wouldn't
>     prevent a connection from being sent to a server while the 500 response
>     is delivered to the client. Given that they are often used to block
>     suspicious activity it's problematic.
> 
> The rest is less important, but still relevant to some users. Among those
> noticeable I can enumerate:
>   - the O(N^2) ACL unique-id allocator that could take several minutes to
>     boot on certain very large configs was reworked to follow O(NlogN)
>     instead.
> 
>   - the default global maxconn setting when not set in the configuration was
>     incorrectly set to the process' soft limit instead of the hard limit,
>     resulting in much lower connection counts on some setups after upgrade
>     from 1.x to 2.x. It now properly follows the hard limit.
> 
>   - a new thread-safe random number generator that will avoid the risk that
>     the "uuid" sample fetch function returns the exact same UUID in several
>     threads.
> 
>   - issues in HTX mode affecting filters, namely cache and compression, that
>     could lead to data corruption.
> 
>   - alignment issues causing bus error on Sparc64 were addressed
> 
>   - fixed a rare case of possible segfault on soft-stop when a finishing 
> thread
>     flushes its pools while another one is freeing some elements.
> 
> 
> Please have a look at the changelog below for a more detailed list of fixes,
> and do not forget to update, either from the sources or from your regular
> distro channels.
> 
> Please find the usual URLs below :
>    Site index       : http://www.haproxy.org/
>    Discourse        : http://discourse.haproxy.org/
>    Slack channel    : https://slack.haproxy.org/
>    Issue tracker    : https://github.com/haproxy/haproxy/issues
>    Sources          : http://www.haproxy.org/download/2.1/src/
>    Git repository   : http://git.haproxy.org/git/haproxy-2.1.git/
>    Git Web browsing : http://git.haproxy.org/?p=haproxy-2.1.git
>    Changelog        : http://www.haproxy.org/download/2.1/src/CHANGELOG
>    Cyril's HTML doc : http://cbonte.github.io/haproxy-dconv/
> 
> Willy
> ---
> Complete changelog :
> Balvinder Singh Rawat (1):
>       DOC: correct typo in alert message about rspirep
> 
> Bjoern Jacke (1):
>       DOC: fix typo about no-tls-tickets
> 
> Björn Jacke (1):
>       DOC: improve description of no-tls-tickets
> 
> Carl Henrik Lunde (1):
>       OPTIM: startup: fast unique_id allocation for acl.
> 
> Christopher Faulet (26):
>       BUG/MINOR: mux-fcgi: Forbid special characters when matching PATH_INFO 
> param
>       MINOR: mux-fcgi: Make the capture of the path-info optional in pathinfo 
> regex
>       MINOR: http-htx: Add a function to retrieve the headers size of an HTX 
> message
>       MINOR: filters: Forward data only if the last filter forwards something
>       BUG/MINOR: filters: Count HTTP headers as filtered data but don't 
> forward them
>       BUG/MINOR: http-htx: Don't return error if authority is updated without 
> changes
>       BUG/MINOR: http-ana: Matching on monitor-uri should be case-sensitive
>       MINOR: http-ana: Match on the path if the monitor-uri starts by a /
>       BUG/MAJOR: http-ana: Always abort the request when a tarpit is triggered
>       BUG/MINOR: http-htx: Do case-insensive comparisons on Host header name
>       MINOR: contrib/prometheus-exporter: Add heathcheck status/code in 
> server metrics
>       MINOR: contrib/prometheus-exporter: Add the last heathcheck duration 
> metric
>       BUG/MINOR: filters: Use filter offset to decude the amount of forwarded 
> data
>       BUG/MINOR: filters: Forward everything if no data filters are called
>       MINOR: htx: Add a function to return a block at a specific offset
>       BUG/MEDIUM: cache/filters: Fix loop on HTX blocks caching the response 
> payload
>       BUG/MEDIUM: compression/filters: Fix loop on HTX blocks compressing the 
> payload
>       BUG/MINOR: http-ana: Reset request analysers on a response side error
>       BUG/MINOR: lua: Ignore the reserve to know if a channel is full or not
>       BUG/MINOR: http-rules: Preserve FLT_END analyzers on reject action
>       BUG/MINOR: http-rules: Fix a typo in the reject action function
>       BUG/MINOR: rules: Preserve FLT_END analyzers on silent-drop action
>       BUG/MINOR: rules: Increment be_counters if backend is assigned for a 
> silent-drop
>       MINOR: http-rules: Add a flag on redirect rules to know the rule 
> direction
>       MINOR: http-rules: Handle the rule direction when a redirect is 
> evaluated
>       BUG/MINOR: http-ana: Reset request analysers on error when waiting for 
> response
> 
> Daniel Corbett (1):
>       BUG/MINOR: stats: Fix color of draining servers on stats page
> 
> David Carlier (1):
>       BUILD: on ARM, must be linked to libatomic.
> 
> Emeric Brun (1):
>       BUG/MEDIUM: peers: resync ended with RESYNC_PARTIAL in wrong cases.
> 
> Frédéric Lécaille (1):
>       BUG/MINOR: peers: Use after free of "peers" section.
> 
> Ilya Shipitsin (4):
>       DOC: configuration.txt: fix various typos
>       DOC: assorted typo fixes in the documentation and Makefile
>       DOC: assorted typo fixes in the documentation
>       DOC: assorted typo fixes in the documentation
> 
> Jerome Magnin (4):
>       MINOR: ist: add an iststop() function
>       BUG/MINOR: http: http-request replace-path duplicates the query string
>       MINOR: listener: add so_name sample fetch
>       BUG/MINOR: http_ana: make sure redirect flags don't have overlapping 
> bits
> 
> Lukas Tribus (2):
>       BUG/MINOR: dns: ignore trailing dot
>       DOC: ssl: clarify security implications of TLS tickets
> 
> Miroslav Zagorac (1):
>       DOC: internals: Fix spelling errors in filters.txt
> 
> Olivier Houchard (8):
>       BUG/MEDIUM: muxes: Use the right argument when calling the destroy 
> method.
>       BUG/MEDIUM: mt_lists: Make sure we set the deleted element to NULL;
>       MINOR: mt_lists: Appease gcc.
>       BUG/MEDIUM: pools: Always update free_list in pool_gc().
>       MINOR: wdt: Move the definitions of WDTSIG and DEBUGSIG into 
> types/signal.h.
>       BUG/MEDIUM: wdt: Don't ignore WDTSIG and DEBUGSIG in 
> __signal_process_queue().
>       MINOR: memory: Change the flush_lock to a spinlock, and don't get it in 
> alloc.
>       BUG/MINOR: connections: Make sure we free the connection on failure.
> 
> Tim Duesterhus (5):
>       CLEANUP: cfgparse: Fix type of second calloc() parameter
>       BUG/MINOR: sample: Make sure to return stable IDs in the unique-id fetch
>       BUG/MINOR: pattern: Do not pass len = 0 to calloc()
>       BUG/MAJOR: proxy_protocol: Properly validate TLV lengths
>       DOC: proxy_protocol: Reserve TLV type 0x05 as PP2_TYPE_UNIQUE_ID
> 
> William Dauchy (1):
>       BUG/MINOR: namespace: avoid closing fd when socket failed in my_socketat
> 
> William Lallemand (2):
>       BUG/MINOR: peers: init bind_proc to 1 if it wasn't initialized
>       BUG/MINOR: peers: avoid an infinite loop with peers_fe is NULL
> 
> Willy Tarreau (38):
>       SCRIPTS: make announce-release executable again
>       SCRIPTS: announce-release: use mutt -H instead of -i to include the 
> draft
>       BUG/MEDIUM: shctx: make sure to keep all blocks aligned
>       MINOR: compiler: move CPU capabilities definition from config.h and 
> complete them
>       BUG/MEDIUM: ebtree: don't set attribute packed without unaligned access 
> support
>       BUILD: fix recent build failure on unaligned archs
>       BUG/MINOR: sample: fix the json converter's endian-sensitivity
>       BUG/MEDIUM: ssl: fix several bad pointer aliases in a few sample fetch 
> functions
>       BUG/MINOR: connection: make sure to correctly tag local PROXY 
> connections
>       MINOR: compiler: add new alignment macros
>       BUILD: ebtree: improve architecture-specific alignment
>       BUG/MINOR: h2: reject again empty :path pseudo-headers
>       BUG/MEDIUM: random: initialize the random pool a bit better
>       MINOR: tools: add 64-bit rotate operators
>       BUG/MEDIUM: random: implement a thread-safe and process-safe PRNG
>       MINOR: backend: use a single call to ha_random32() for the random LB 
> algo
>       BUG/MINOR: checks/threads: use ha_random() and not rand()
>       BUG/MAJOR: list: fix invalid element address calculation
>       MINOR: debug: report the task handler's pointer relative to main
>       BUG/MEDIUM: debug: make the debug_handler check for the thread in 
> threads_to_dump
>       MINOR: haproxy: export main to ease access from debugger
>       BUILD: tools: remove obsolete and conflicting trace() from standard.c
>       BUG/MINOR: wdt: do not return an error when the watchdog couldn't be 
> enabled
>       DOC: fix incorrect indentation of http_auth_*
>       BUG/MINOR: init: make the automatic maxconn consider the max of 
> soft/hard limits
>       REGTEST: make the PROXY TLV validation depend on version 2.2
>       BUILD: wdt: only test for SI_TKILL when compiled with thread support
>       BUG/MEDIUM: random: align the state on 2*64 bits for ARM64
>       BUG/MINOR: haproxy: always initialize sleeping_thread_mask
>       BUG/MINOR: listener/mq: do not dispatch connections to remote threads 
> when stopping
>       BUG/MINOR: haproxy/threads: try to make all threads leave together
>       BUILD: makefile: fix regex syntax in ARM platform detection
>       BUILD: makefile: fix expression again to detect ARM platform
>       REGTESTS: use "command -v" instead of "which"
>       REGTEST: increase timeouts on the seamless-reload test
>       BUG/MINOR: haproxy/threads: close a possible race in soft-stop detection
>       BUILD: ssl: only pass unsigned chars to isspace()
>       BUG/CRITICAL: hpack: never index a header into the headroom after 
> wrapping
> 
> ---
> 

-- 
 (o-    Julien Pivotto
 //\    Open-Source Consultant
 V_/_   Inuits - https://www.inuits.eu

Attachment: signature.asc
Description: PGP signature

Reply via email to