HexBrain

Internet Bug Bounty · Report #1886139

HTTP multi-header compression denial of service

Validstatus
mediumseverity
5upvotes
24 Feb 2023disclosed

Summary

CVE-2023-23916: HTTP multi-header compression denial of service Project curl Security Advisory, February 15th 2023

VULNERABILITY curl supports "chained" HTTP compression algorithms, meaning that a server response can be compressed multiple times and potentially with different algorithms. The number of acceptable "links" in this "decompression chain" was capped, but the cap was implemented on a per-header basis allowing a malicious server to insert a virtually unlimited number of compression steps simply by using many headers.

The use of such a decompression chain could result in a "malloc bomb", making curl end up spending enormous amounts of allocated heap memory, or trying to and returning out of memory errors.

We are not aware of any exploit of this flaw.

INFO CVE-2023-23916 was introduced in commit dbcced8e32b50c06, shipped in curl 7.57.0.

Automatic decompression of content needs to be enabled per transfer. It is disabled by default and then nothing bad happens. This flaw exists with one or more of the compression algorithms built-in (gzip, brotli or zstd), but the individual algorithms have different "exploding" powers. Both Content-Encoding: and Transfer-Encoding: are affected over all HTTP versions. This flaw is almost identical to the previous CVE-2022-32206: HTTP compression denial of service, as the fix for that earlier flaw was incomplete. CWE-770: Allocation of Resources Without Limits or Throttling Severity: Medium

AFFECTED VERSIONS Affected versions: curl 7.57.0 to and including 7.87.0 Not affected versions: curl < 7.57.0 and curl > 7.87.0 libcurl is used by many applications, but not always advertised as such!

THE SOLUTION The amount of accepted "chained" algorithms is now capped to 5 in total, independently of the number of headers. A fix for CVE-2023-23916

RECOMMENDATIONS A - Upgrade curl to version 7.88.0 B - Apply the patch to your local version C - Do not enable automatic decompression

CREDITS Reported-by: Patrick Monnerat Patched-by: Patrick Monnerat Thanks a lot!

Full Security Advisory: https://curl.se/docs/CVE-2023-23916.html

How it was found

A server can send an HTTP response with many occurrences of Transfer-Encoding and/or Content-Encoding headers. Each listed encoding allocates a buffer. The number of encodings listed within each header is already limited but the number of headers is not, allowing an HTTP response to consume all available memory.

Impact

Consumes all available memory, resulting in a DoS.

This report was disclosed publicly on HackerOne and belongs to its author and the program. See the original