CVE-2022-32205
Set-Cookie denial of service
Project curl Security Advisory, June 27th 2022 - Permalink
VULNERABILITY
A malicious server can serve excessive amounts of
Set-Cookie:
headers in a HTTP response to curl and curl
stores all of them. A sufficiently large amount of (big) cookies make
subsequent HTTP requests to this, or other servers to which the cookies
match, create requests that become larger than the threshold that curl
uses internally to avoid sending crazy large requests (1048576 bytes)
and instead returns an error.
This denial state might remain for as long as the same cookies are
kept, match and have not expired. Due to cookie matching rules, a server
on foo.example.com
can set cookies that also would match
for bar.example.com
, making it it possible for a "sister
server" to effectively cause a denial of service for a sibling site on
the same second level domain using this method.
INFO
CVE-2022-32205 was introduced in commit ed35d6590e72c23c, shipped in curl 7.71.0 with the introduction of the "dynbuf" internally. Before this change, curl had no limit in how large HTTP request it could generate.
CWE-770: Allocation of Resources Without Limits or Throttling
Severity: Low
AFFECTED VERSIONS
- Affected versions: curl 7.71.0 to and including 7.83.1
- Not affected versions: curl < 7.71.0 and curl >= 7.84.0
- Introduced-in: https://github.com/curl/curl/commit/ed35d6590e72c23c
libcurl is used by many applications, but not always advertised as such!
SOLUTION
We introduce several new limits and thresholds for cookies:
Send no more than 150 cookies per request
Cap the max length used for an outgoing
Cookie:
header to 8KCap the max number of accepted
Set-Cookie:
header fields to 50Fixed-in: https://github.com/curl/curl/commit/48d7064a49148f0394
RECOMMENDATIONS
A - Upgrade curl to version 7.84.0
B - Apply the patch to your local version
C - Do not use cookies
TIMELINE
This issue was reported to the curl project on May 13, 2022. We contacted distros@openwall on June 20.
libcurl 7.84.0 was released on June 27 2022, coordinated with the publication of this advisory.
CREDITS
- Reported-by: Harry Sintonen
- Patched-by: Daniel Stenberg
Thanks a lot!