curl --continue-at 选项与 --no-clobber 和 --remove-on-error 组合时的意外行为

报告指出curl在使用--continue-at选项时,会意外忽略--no-clobber选项,导致对现有文件进行追加写入;与--remove-on-error组合时,可能在早期错误时意外删除文件。该问题被认定为文档不清晰而非安全漏洞。

报告 #2859735 - curl –continue-at 混淆

提交者: nyymi
提交时间: 2024年11月22日 3:59am UTC
报告对象: curl

摘要

当curl命令与--continue-at选项一起使用时,--no-clobber选项会被意外忽略,curl会将输出追加到目标文件,即使该文件已存在。如果--continue-at--remove-on-error一起使用,可能导致在早期错误时意外删除文件。注意,当与--remote-name--remote-header-name组合时也会发生这种情况。

重现步骤

篡改文件,即使使用了--no-clobber

1
2
echo not to be touched > robots.txt
curl --no-clobber -C 1 -O https://curl.se/robots.txt

注意: 不使用-C 1时,输出会写入到robots.txt.<n>

结合--remove-on-error--continue-at删除文件:

1
2
echo something > important
curl --remove-on-error -C 1 -o important https://nonexisting.curl.se/

注意: 不使用-C 1时,文件不会被删除。

修复建议

阻止这些问题发生的最简单方法是禁止将--continue-at--no-clobber--remove-on-error组合使用。

影响

对现有文件进行意外修改或删除。

时间线

  • 2024年11月22日 4:03am UTC: nyymi 更新漏洞信息。

  • 2024年11月22日 4:10am UTC: nyymi 再次更新漏洞信息。

  • 2024年11月22日 4:53am UTC: bagder (curl staff) 发表评论,表示感谢报告,并承诺尽快调查。

  • 2024年11月23日 9:48am UTC: bagder 认为这更像是未记录区域/意外行为,而非纯粹的安全问题。

  • 2024年11月23日 11:57am UTC: nyymi 同意文档不清晰,建议澄清--continue-at选项以及其与--range的交互。

  • 2024年11月23日 1:55pm UTC: nyymi 倾向于认为这是文档问题,但建议curl命令在这些选项组合时应表现一致(例如报错)。

  • 2024年11月26日 2:21pm UTC: bagder 同意需要详细记录这些细节,建议提交为bug报告,不视为安全问题。

  • 2024年11月26日 3:43pm UTC: nyymi 关闭报告,状态改为“不适用”。

  • 14天前: bagder 请求披露此报告,遵循项目透明度政策。

  • 14天前: bagder 披露此报告。

报告详情

  • 报告ID: #2859735
  • 严重性: 中等 (4 ~ 6.9)
  • 披露时间: 2025年7月7日 10:18am UTC
  • 弱点: 业务逻辑错误
  • CVE ID: 无
  • 赏金: 无
  • 账户详情: 无
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计