curl · Report #1892351
CVE-2023-27534: SFTP path ~ resolving discrepancy
How it was found
Summary:
libcurl Curl_getworkingpath function resolves ~ as remote users' home directory. This routine behaves in an undocumented way for sftp protocol. In particular it is said that /~/ is converted to remote user's home directory (*1), while this isn't how the function actually behaves. This can lead to unexpected final path for the sftp access, and allow an attacker with partial path access to gain access to untended remote system path locations.
Steps To Reproduce:
- access
sftp://host/~a../other/file - remote path will result as:
/home/user/../other/file
It's notable that when ~a.. path component is checked for path traversal via normal unix path resolving rules, the path component is not considered accessing a parent directory, and thus will bypass path sanitization operations attempting to disallow access to parent directory. As an additional remark, in regular UNIXy world ~user/ specifies another users' home directory, which clearly is not supported by sftp. This adds to potential confusion.
Remediation
- In
Curl_getworkingpathconvert~insftppaths only when either/~/or/~(if it is the full path) is used. Reject~<something>paths (or don't convert them).
Supporting Material/References:
Impact
Bypassing application implemented path filtering.