curl --continue-at 选项与文件操作冲突导致意外行为

本文详细描述了curl工具在使用--continue-at选项时与--no-clobber和--remove-on-error选项组合出现的意外行为,包括文件被意外修改或删除的问题,并提供了复现步骤和讨论过程。

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

摘要

当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日 3:59 UTC - nyymi 提交报告给curl。
  • 2024年11月22日 4:03 UTC - nyymi 更新漏洞信息。
  • 2024年11月22日 4:10 UTC - nyymi 再次更新漏洞信息。
  • 2024年11月22日 4:53 UTC - bagder (curl staff) 发表评论,表示感谢并将调查。
  • 2024年11月23日 9:48 UTC - bagder 认为这更像是未记录区域/意外行为而非安全问题。
  • 2024年11月23日 11:57 UTC - nyymi 同意文档不清晰,建议澄清--continue-at--range的交互。
  • 2024年11月23日 13:55 UTC - nyymi 认为curl命令应保持一致行为,建议报错而非当前行为。
  • 2024年11月26日 14:21 UTC - bagder 同意需要完善文档,但不认为是安全问题。
  • 2024年11月26日 15:43 UTC - nyymi 关闭报告,状态改为"不适用"。
  • 2024年11月26日 16:10 UTC - nyymi 提供相关GitHub问题链接。
  • 2025年7月6日 21:18 UTC - bagder 请求披露此报告。
  • 2025年7月7日 10:18 UTC - bagder 披露此报告。

报告详情

  • 报告日期: 2024年11月22日 3:59 UTC
  • 报告者: nyymi
  • 报告对象: curl
  • 报告ID: #2859735
  • 严重性: 中等 (4 ~ 6.9)
  • 披露日期: 2025年7月7日 10:18 UTC
  • 弱点: 业务逻辑错误
  • CVE ID: 无
  • 奖金: 无
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计