报告 #3379102 - SFTP引用语法缺乏强制验证可能导致操作错误对象
摘要
curl支持使用-Q或--quote(以及libcurl的CURLOPT_QUOTE)为FTP和SFTP连接指定要执行的"命令"。SFTP支持对文件系统对象执行操作的命令。当对象路径包含文件名时,调用方应该引用参数(例如:-Q 'chmod 777 "/tmp/example file"')。然而,由于libcurl引用命令解析器会忽略额外参数,省略引号(或尝试使用shell引用)将允许命令执行,并且操作将尝试作用于非预期对象。
curl手册提到"文件名可以用shell风格引用以嵌入空格或特殊字符"。这一陈述具有误导性,因为shell允许更多引用空格的方式,例如使用\,而curl不支持这种方式。这可能导致应用程序开发者假设shell引用规则适用。如果某些软件信任文档并假设shell引用规则适用而生成引用命令,则可能导致操作在非预期对象上执行。
本报告的研究和生成未使用任何AI。
受影响版本
curl 8.16.0
重现步骤
在目标服务器上:
|
|
结果:/tmp/example被修改为具有777权限,而不是预期的/tmp/example file。
另一个示例:
在目标服务器上:
|
|
结果:/tmp/example\被修改为具有777权限,而不是预期的/tmp/example file。
修复方案
调整lib/vssh/libssh2.c中的sftp_quote和lib/vssh/libssh.c中的myssh_in_SFTP_QUOTE引用解析器,在命令给出过多参数时报错(表明调用方错误地尝试给出带空格但未正确引用的路径)。
修复文档,不再声称支持shell风格引用。
影响
操作在错误对象上执行,带来相关的安全影响(非预期的信息泄露、数据丢失)。
时间线
- 13天前:nyymi向curl提交报告
- 13天前:bagder(curl工作人员)回复确认收到报告
- 12天前:nyymi补充说明可利用场景
- 11天前:bagder认为这不太可能是安全问题
- 11天前:nyymi关闭报告并将状态改为"不适用"
- 11天前:报告被公开披露
- 11天前:bagder开始通过PR #19025澄清文档
报告详情
报告时间:2025年10月10日 17:40 UTC
报告者:nyymi
报告对象:curl
严重性:无评级
弱点:输入语法正确性验证不当
CVE ID:无
赏金:无