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.
{
"severity": "Medium",
"package": "curl",
"URL": "https://curl.se/docs/CVE-2015-3144.json",
"www": "https://curl.se/docs/CVE-2015-3144.html",
"CWE": {
"id": "CWE-124",
"desc": "Buffer Underwrite ('Buffer Underflow')"
},
"last_affected": "7.41.0",
"affects": "both"
}[
{
"signature_version": "v1",
"source": "https://github.com/curl/curl.git/commit/0583e87ada7a3cfb10904ae4ab61b339582c5bd3",
"id": "CURL-CVE-2015-3144-285a442b",
"digest": {
"function_hash": "302857014196003819835645927753951719924",
"length": 1215.0
},
"target": {
"file": "lib/url.c",
"function": "fix_hostname"
},
"signature_type": "Function",
"deprecated": false
},
{
"signature_version": "v1",
"source": "https://github.com/curl/curl.git/commit/0583e87ada7a3cfb10904ae4ab61b339582c5bd3",
"id": "CURL-CVE-2015-3144-dd778062",
"digest": {
"threshold": 0.9,
"line_hashes": [
"270878377318186174494843635834225150969",
"46407169664050383391727544247789172485",
"51621819899399844632954616211039468642",
"118193069924792380754011537934000253690"
]
},
"target": {
"file": "lib/url.c"
},
"signature_type": "Line",
"deprecated": false
}
]