libcurl may read outside of a heap allocated buffer when doing FTP. When libcurl connects to an FTP server and successfully logs in (anonymous or not), it asks the server for the current directory with the PWD command. The server then responds with a 257 response containing the path, inside double quotes. The returned path name is then kept by libcurl for subsequent uses. Due to a flaw in the string parser for this directory name, a directory name passed like this but without a closing double quote would lead to libcurl not adding a trailing NUL byte to the buffer holding the name. When libcurl would then later access the string, it could read beyond the allocated heap buffer and crash or wrongly access data beyond the buffer, thinking it was part of the path. A malicious server could abuse this fact and effectively prevent libcurl-based clients to work with it - the PWD command is always issued on new FTP connections and the mistake has a high chance of causing a segfault. The simple fact that this has issue remained undiscovered for this long could suggest that malformed PWD responses are rare in benign servers. We are not aware of any exploit of this flaw. This bug was introduced in commit 415d2e7cb7, March 2005. In libcurl version 7.56.0, the parser always zero terminates the string but also rejects it if not terminated properly with a final double quote.
{
"extracted_events": [
{
"introduced": "7.7"
},
{
"last_affected": "7.7"
},
{
"introduced": "7.7.1"
},
{
"last_affected": "7.7.1"
},
{
"introduced": "7.7.2"
},
{
"last_affected": "7.7.2"
},
{
"introduced": "7.7.3"
},
{
"last_affected": "7.7.3"
},
{
"introduced": "7.8"
},
{
"last_affected": "7.8"
},
{
"introduced": "7.8.1"
},
{
"last_affected": "7.8.1"
},
{
"introduced": "7.9"
},
{
"last_affected": "7.9"
},
{
"introduced": "7.9.1"
},
{
"last_affected": "7.9.1"
},
{
"introduced": "7.9.2"
},
{
"last_affected": "7.9.2"
},
{
"introduced": "7.9.3"
},
{
"last_affected": "7.9.3"
},
{
"introduced": "7.9.4"
},
{
"last_affected": "7.9.4"
},
{
"introduced": "7.9.5"
},
{
"last_affected": "7.9.5"
},
{
"introduced": "7.9.6"
},
{
"last_affected": "7.9.6"
},
{
"introduced": "7.9.7"
},
{
"last_affected": "7.9.7"
},
{
"introduced": "7.9.8"
},
{
"last_affected": "7.9.8"
},
{
"introduced": "7.10"
},
{
"last_affected": "7.10"
},
{
"introduced": "7.10.1"
},
{
"last_affected": "7.10.1"
},
{
"introduced": "7.10.2"
},
{
"last_affected": "7.10.2"
},
{
"introduced": "7.10.3"
},
{
"last_affected": "7.10.3"
},
{
"introduced": "7.10.4"
},
{
"last_affected": "7.10.4"
},
{
"introduced": "7.10.5"
},
{
"last_affected": "7.10.5"
},
{
"introduced": "7.10.6"
},
{
"last_affected": "7.10.6"
},
{
"introduced": "7.10.7"
},
{
"last_affected": "7.10.7"
},
{
"introduced": "7.10.8"
},
{
"last_affected": "7.10.8"
},
{
"introduced": "7.11.0"
},
{
"last_affected": "7.11.0"
},
{
"introduced": "7.11.1"
},
{
"last_affected": "7.11.1"
},
{
"introduced": "7.11.2"
},
{
"last_affected": "7.11.2"
},
{
"introduced": "7.12.0"
},
{
"last_affected": "7.12.0"
},
{
"introduced": "7.12.1"
},
{
"last_affected": "7.12.1"
},
{
"introduced": "7.12.2"
},
{
"last_affected": "7.12.2"
},
{
"introduced": "7.12.3"
},
{
"last_affected": "7.12.3"
},
{
"introduced": "7.13.0"
},
{
"last_affected": "7.13.0"
},
{
"introduced": "7.13.1"
},
{
"last_affected": "7.13.1"
},
{
"introduced": "7.13.2"
},
{
"last_affected": "7.13.2"
},
{
"introduced": "7.14.0"
},
{
"last_affected": "7.14.0"
},
{
"introduced": "7.14.1"
},
{
"last_affected": "7.14.1"
},
{
"introduced": "7.15.0"
},
{
"last_affected": "7.15.0"
},
{
"introduced": "7.15.1"
},
{
"last_affected": "7.15.1"
},
{
"introduced": "7.15.2"
},
{
"last_affected": "7.15.2"
},
{
"introduced": "7.15.3"
},
{
"last_affected": "7.15.3"
},
{
"introduced": "7.15.4"
},
{
"last_affected": "7.15.4"
},
{
"introduced": "7.15.5"
},
{
"last_affected": "7.15.5"
},
{
"introduced": "7.16.0"
},
{
"last_affected": "7.16.0"
},
{
"introduced": "7.16.1"
},
{
"last_affected": "7.16.1"
},
{
"introduced": "7.16.2"
},
{
"last_affected": "7.16.2"
},
{
"introduced": "7.16.3"
},
{
"last_affected": "7.16.3"
},
{
"introduced": "7.16.4"
},
{
"last_affected": "7.16.4"
},
{
"introduced": "7.17.0"
},
{
"last_affected": "7.17.0"
},
{
"introduced": "7.17.1"
},
{
"last_affected": "7.17.1"
},
{
"introduced": "7.18.0"
},
{
"last_affected": "7.18.0"
},
{
"introduced": "7.18.1"
},
{
"last_affected": "7.18.1"
},
{
"introduced": "7.18.2"
},
{
"last_affected": "7.18.2"
},
{
"introduced": "7.19.0"
},
{
"last_affected": "7.19.0"
},
{
"introduced": "7.19.1"
},
{
"last_affected": "7.19.1"
},
{
"introduced": "7.19.2"
},
{
"last_affected": "7.19.2"
},
{
"introduced": "7.19.3"
},
{
"last_affected": "7.19.3"
},
{
"introduced": "7.19.4"
},
{
"last_affected": "7.19.4"
},
{
"introduced": "7.19.5"
},
{
"last_affected": "7.19.5"
},
{
"introduced": "7.19.6"
},
{
"last_affected": "7.19.6"
},
{
"introduced": "7.19.7"
},
{
"last_affected": "7.19.7"
},
{
"introduced": "7.20.0"
},
{
"last_affected": "7.20.0"
},
{
"introduced": "7.20.1"
},
{
"last_affected": "7.20.1"
},
{
"introduced": "7.21.0"
},
{
"last_affected": "7.21.0"
},
{
"introduced": "7.21.1"
},
{
"last_affected": "7.21.1"
},
{
"introduced": "7.21.2"
},
{
"last_affected": "7.21.2"
},
{
"introduced": "7.21.3"
},
{
"last_affected": "7.21.3"
},
{
"introduced": "7.21.4"
},
{
"last_affected": "7.21.4"
},
{
"introduced": "7.21.5"
},
{
"last_affected": "7.21.5"
},
{
"introduced": "7.21.6"
},
{
"last_affected": "7.21.6"
},
{
"introduced": "7.21.7"
},
{
"last_affected": "7.21.7"
},
{
"introduced": "7.22.0"
},
{
"last_affected": "7.22.0"
},
{
"introduced": "7.23.0"
},
{
"last_affected": "7.23.0"
},
{
"introduced": "7.23.1"
},
{
"last_affected": "7.23.1"
},
{
"introduced": "7.24.0"
},
{
"last_affected": "7.24.0"
},
{
"introduced": "7.25.0"
},
{
"last_affected": "7.25.0"
},
{
"introduced": "7.26.0"
},
{
"last_affected": "7.26.0"
},
{
"introduced": "7.27.0"
},
{
"last_affected": "7.27.0"
},
{
"introduced": "7.28.0"
},
{
"last_affected": "7.28.0"
},
{
"introduced": "7.28.1"
},
{
"last_affected": "7.28.1"
},
{
"introduced": "7.29.0"
},
{
"last_affected": "7.29.0"
},
{
"introduced": "7.30.0"
},
{
"last_affected": "7.30.0"
},
{
"introduced": "7.31.0"
},
{
"last_affected": "7.31.0"
},
{
"introduced": "7.32.0"
},
{
"last_affected": "7.32.0"
},
{
"introduced": "7.33.0"
},
{
"last_affected": "7.33.0"
},
{
"introduced": "7.34.0"
},
{
"last_affected": "7.34.0"
},
{
"introduced": "7.35.0"
},
{
"last_affected": "7.35.0"
},
{
"introduced": "7.36.0"
},
{
"last_affected": "7.36.0"
},
{
"introduced": "7.37.0"
},
{
"last_affected": "7.37.0"
},
{
"introduced": "7.37.1"
},
{
"last_affected": "7.37.1"
},
{
"introduced": "7.38.0"
},
{
"last_affected": "7.38.0"
},
{
"introduced": "7.39"
},
{
"last_affected": "7.39"
},
{
"introduced": "7.40.0"
},
{
"last_affected": "7.40.0"
},
{
"introduced": "7.41.0"
},
{
"last_affected": "7.41.0"
},
{
"introduced": "7.42.0"
},
{
"last_affected": "7.42.0"
},
{
"introduced": "7.42.1"
},
{
"last_affected": "7.42.1"
},
{
"introduced": "7.43.0"
},
{
"last_affected": "7.43.0"
},
{
"introduced": "7.44.0"
},
{
"last_affected": "7.44.0"
},
{
"introduced": "7.45.0"
},
{
"last_affected": "7.45.0"
},
{
"introduced": "7.46.0"
},
{
"last_affected": "7.46.0"
},
{
"introduced": "7.47.0"
},
{
"last_affected": "7.47.0"
},
{
"introduced": "7.47.1"
},
{
"last_affected": "7.47.1"
},
{
"introduced": "7.48.0"
},
{
"last_affected": "7.48.0"
},
{
"introduced": "7.49.0"
},
{
"last_affected": "7.49.0"
},
{
"introduced": "7.49.1"
},
{
"last_affected": "7.49.1"
},
{
"introduced": "7.50.0"
},
{
"last_affected": "7.50.0"
},
{
"introduced": "7.50.1"
},
{
"last_affected": "7.50.1"
},
{
"introduced": "7.50.2"
},
{
"last_affected": "7.50.2"
},
{
"introduced": "7.50.3"
},
{
"last_affected": "7.50.3"
},
{
"introduced": "7.51.0"
},
{
"last_affected": "7.51.0"
},
{
"introduced": "7.52.0"
},
{
"last_affected": "7.52.0"
},
{
"introduced": "7.52.1"
},
{
"last_affected": "7.52.1"
},
{
"introduced": "7.53.0"
},
{
"last_affected": "7.53.0"
},
{
"introduced": "7.53.1"
},
{
"last_affected": "7.53.1"
},
{
"introduced": "7.54.0"
},
{
"last_affected": "7.54.0"
},
{
"introduced": "7.54.1"
},
{
"last_affected": "7.54.1"
},
{
"introduced": "7.55.0"
},
{
"last_affected": "7.55.0"
},
{
"introduced": "7.55.1"
},
{
"last_affected": "7.55.1"
}
],
"cpe": [
"cpe:2.3:a:haxx:libcurl:7.7:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.7.1:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.7.2:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.7.3:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.8:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.8.1:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.9:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.9.1:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.9.2:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.9.3:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.9.4:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.9.5:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.9.6:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.9.7:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.9.8:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.10:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.10.1:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.10.2:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.10.3:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.10.4:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.10.5:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.10.6:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.10.7:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.10.8:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.11.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.11.1:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.11.2:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.12.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.12.1:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.12.2:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.12.3:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.13.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.13.1:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.13.2:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.14.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.14.1:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.15.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.15.1:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.15.2:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.15.3:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.15.4:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.15.5:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.16.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.16.1:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.16.2:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.16.3:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.16.4:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.17.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.17.1:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.18.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.18.1:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.18.2:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.19.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.19.1:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.19.2:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.19.3:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.19.4:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.19.5:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.19.6:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.19.7:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.20.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.20.1:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.21.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.21.1:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.21.2:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.21.3:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.21.4:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.21.5:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.21.6:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.21.7:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.22.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.23.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.23.1:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.24.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.25.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.26.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.27.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.28.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.28.1:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.29.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.30.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.31.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.32.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.33.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.34.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.35.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.36.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.37.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.37.1:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.38.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.39:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.40.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.41.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.42.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.42.1:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.43.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.44.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.45.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.46.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.47.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.47.1:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.48.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.49.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.49.1:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.50.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.50.1:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.50.2:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.50.3:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.51.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.52.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.52.1:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.53.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.53.1:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.54.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.54.1:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.55.0:*:*:*:*:*:*:*",
"cpe:2.3:a:haxx:libcurl:7.55.1:*:*:*:*:*:*:*"
],
"source": "CPE_STRING"
}