资讯 curl 8.23.0 一次修复 24 个 CVE:SMB 协议移除、符号改名与 --no-clobber 改动

2026-10-30 21:07:06

curl 8.23.0 一次修复 24 个 CVE:SMB 协议移除、符号改名与 --no-clobber 改动

curl 8.23.0 于 2026 年 10 月 14 日发布,作者 Daniel Stenberg。完整变更记录见 curl.se/ch/8.23.0.html,GitHub 上的 tag 为 curl-8_23_0。

发布数字

  • 第 277 个版本,距上一个版本 42 天(累计 10,929 天)
  • 281 个 bugfix(累计 14,770),476 个 commit(累计 40,084)
  • 4 项变更
  • 0 个新增公开 libcurl 函数(累计 100)、0 个新增 curl_easy_setopt() 选项(累计 312)、0 个新增命令行选项(累计 278)
  • 84 位贡献者(58 位新面孔,累计 3,844);45 位作者(28 位新,累计 1,546)
  • 24 个安全修复(累计 239)

24 个安全修复意味着什么

官方公告原文只说了一句:这次公布不少于 24 个已修复漏洞,数量太多,所以不再逐条列出,请到 curl 官网的安全页面查看。对使用者而言,这个数字的实际含义是:8.23.0 之前的版本同时带着 24 个已知问题,升级不是“要不要”的问题,而是“多快”的问题。

按脚本执行的工程做法:

  • 本周期内完成升级:把这批 CVE 当作有明确时间窗的补丁批次处理,而不是等下一个维护窗口。
  • 脚本里固定版本的镜像必须重建:FROM curlimages/curl:8.22.0 这类写死 tag 的 Dockerfile、CI 基础镜像、内部封装的 tar 包,都不会自动跟着升。tag 不改,漏洞就一直在。改 tag 后重新构建,并确认新镜像里 curl -V 显示 8.23.0。
# 升级后确认版本
curl -V
curl --version

SMB(S) 支持被彻底移除

curl 和 libcurl 都不再支持 SMB/SMBs 协议。这不是默认关闭,而是从代码里删除了。

原来用 curl 拉 smb:// 的脚本、备份任务、定时拉取作业,升级后会直接失败:

# 8.23.0 之前
curl -u user:pass smb://fileserver/share/backup.tar.gz -o backup.tar.gz

8.23.0 上这条命令会因为协议不被支持而报错。替代方案是 smbclient:

smbclient //fileserver/share -U 'user%pass' -c 'get backup.tar.gz backup.tar.gz'

迁移前先扫一遍脚本里有没有残留的 SMB 调用:

grep -rn 'smb://\|smbs://' /path/to/scripts

CURL_GLOBAL_WIN32 改名为 CURL_GLOBAL_WINSOCK

配合 curl_global_init() 使用的符号 CURL_GLOBAL_WIN32 已废弃,新名字是语义更准确的 CURL_GLOBAL_WINSOCK。

老代码仍引用旧符号时属于废弃用法:编译一般能过,但会出 deprecation 警告;如果构建里开了 -Werror,警告会直接变成编译失败。源码里全局替换,并确认没有同时在用新旧两个名字,就能避免这类兼容问题。

/* 旧 */
curl_global_init(CURL_GLOBAL_WIN32);

/* 新 */
curl_global_init(CURL_GLOBAL_WINSOCK);

--no-clobber 的两处改进

--no-clobber 改动了两点:

  1. 编号插在扩展名之前,产出 file-1.txt,不再是 file.txt-1。
  2. 放弃前尝试的编号上限提高到 9999,文件同名冲突多的时候不容易提前失败。
curl -O --no-clobber https://example.com/file.txt   # file.txt
curl -O --no-clobber https://example.com/file.txt   # file-1.txt

脚本里如果对下载后的文件名做了字符串匹配或重命名,需要跟着改,尤其是原来按 file.txt-1 这种形式写的规则。

自查与版本固定

查看当前版本和编译进来的协议列表:

curl --version
curl -V

curl -V 输出的 Protocols: 一行就是支持清单,升级后可以直接确认 SMB 是否已经消失:

curl -V | grep -i smb        # 无输出表示已不支持

需要固定版本的场景,包管理器侧锁定到明确版本(实际版本号以所用仓库为准):

apt-cache policy curl        # 查看仓库里可用的版本
sudo apt-get install curl=

容器和脚本里固定 tag,升级时显式改 tag 并重建,不要让“固定版本”变成“固定漏洞”。

本次共合并 260 多个 bugfix,其余条目见 8.23.0 的 changelog。

复制全文 生成海报 curl 安全公告 Shell 运维

推荐文章

程序员茄子在线接单