curl / Docs / curl CVEs / HTTP/2 push headers memory-leak
Awarded 2540 USD

CVE-2024-2398

HTTP/2 push headers memory-leak

Project curl Security Advisory, March 27 2024 - Permalink

VULNERABILITY

When an application tells libcurl it wants to allow HTTP/2 server push, and the amount of received headers for the push surpasses the maximum allowed limit (1000), libcurl aborts the server push. When aborting, libcurl inadvertently does not free all the previously allocated headers and instead leaks the memory.

Further, this error condition fails silently and is therefore not easily detected by an application.

INFO

If a server sends many PUSH_PROMISE frames with an excessive amount of headers, this can lead to multiple megabytes of memory leaked per response.

HTTP/2 server push is a relatively rarely used feature.

The Common Vulnerabilities and Exposures (CVE) project has assigned the name CVE-2024-2398 to this issue.

CWE-772: Missing Release of Resource after Effective Lifetime

Severity: Medium

AFFECTED VERSIONS

libcurl is used by many applications, but not always advertised as such!

This flaw is also accessible using the curl command line tool.

SOLUTION

Starting in curl 8.7.0, the entire set of headers is freed appropriately on errors.

RECOMMENDATIONS

A - Upgrade curl to version 8.7.0

B - Apply the patch to your local version

C - Make sure HTTP/2 push is not used

TIMELINE

This issue was reported to the curl project on March 5, 2024. We contacted distros@openwall on March 19, 2024.

curl 8.7.0 was released on March 27 2024 around 07:00 UTC, coordinated with the publication of this advisory.

The curl security team is not aware of any active exploits using this vulnerability.

CREDITS

Thanks a lot!