curl --continue-at 选项与文件操作冲突引发的意外行为分析

本文详细分析了curl工具中--continue-at选项与--no-clobber、--remove-on-error选项组合使用时出现的意外文件修改和删除行为,包括复现步骤、影响评估及官方回应,最终确认为文档缺陷而非安全漏洞。

curl –continue-at 混淆问题报告

摘要

当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日 03:59 UTC - nyymi向curl提交报告
  • 2024年11月22日 04:03 UTC - nyymi更新漏洞信息
  • 2024年11月22日 04:10 UTC - nyymi再次更新漏洞信息
  • 2024年11月22日 04:53 UTC - curl工作人员bagder回应,表示感谢并承诺调查
  • 2024年11月23日 09: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问题链接
  • 10天前 - bagder请求披露此报告
  • 9天前 - bagder披露此报告

报告详情

  • 报告ID: #2859735
  • 严重程度: 中等 (4 ~ 6.9)
  • 披露时间: 2025年7月7日 10:18 UTC
  • 弱点类型: 业务逻辑错误
  • CVE ID: 无
  • 赏金: 无

相关GitHub问题:

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计