It was discovered that libcurl did not properly process zero-length host names. If an attacker could trick an application using libcurl into processing zero-length host names, this could lead to an out-of-bounds read, and possibly cause that application to crash.
DescriptionVasyl Kaigorodov
2015-04-20 10:53:05 UTC
There is a private function in libcurl called `fix_hostname()` that removes a
trailing dot from the host name if there is one. The function is called after
the host name has been extracted from the URL libcurl has been told to act on.
If a URL is given with a zero-length host name, like in "http://:80" or just
":80", `fix_hostname()` will index the host name pointer with a -1 offset (as
it blindly assumes a non-zero length) and both read and assign that address.
At best, this gets unnoticed but can also lead to a crash or worse. We have
not researched further what kind of malicious actions that potentially this
could be used for.
We are not aware of any exploits of this flaw.
Affected versions: from libcurl 7.37.0 to and including 7.41.0
Acknowledgements:
Red Hat would like to thank Daniel Stenberg (curl upstream) for reporting this issue. Upstream acknowledges Hanno Böck as the original reporter.