CVE-2015-3144
hostname out of boundary memory access
Project curl Security Advisory, April 22 2015 - Permalink
VULNERABILITY
There is a private function in libcurl called
fix_hostname()
that removes a trailing dot from the
hostname if there is one. The function is called after the hostname has
been extracted from the URL libcurl has been told to act on.
If a URL is given with a zero-length hostname, like in "http://:80"
or just ":80", fix_hostname()
indexes the hostname 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.
INFO
This flaw can also be triggered with the curl command line tool.
The Common Vulnerabilities and Exposures (CVE) project has assigned the name CVE-2015-3144 to this issue.
CWE-124: Buffer Underwrite ('Buffer Underflow')
Severity: Medium
AFFECTED VERSIONS
- Affected versions: from libcurl 7.37.0 to and including 7.41.0
- Not affected versions: libcurl < 7.37.0 and libcurl >= 7.42.0
- Introduced-in: https://github.com/curl/curl/commit/5de8d8409
libcurl is used by many applications, but not always advertised as such!
SOLUTION
libcurl 7.42.0 better verifies the input string to the affected function.
RECOMMENDATIONS
We suggest you take one of the following actions immediately, in order of preference:
A - Upgrade to curl and libcurl 7.42.0
B - Apply the patch and rebuild libcurl
C - Avoid using URLs with zero-length hostnames!
TIMELINE
It was first reported to the curl project on April 16 2015. We contacted distros@openwall on April 17th.
libcurl 7.42.0 was released on April 22 2015, coordinated with the publication of this advisory.
CREDITS
- Reported-by: Hanno Böck
- Patched-by: Daniel Stenberg
Thanks a lot!