AI 年度盘点与2025发展趋势展望,50+案例解析亮相AICon 了解详情
写点什么

我们很高兴在 curl 25 岁生日之际发布 curl 8.0

  • 2023-03-24
    北京
  • 本文字数:2647 字

    阅读完需:约 9 分钟

我们很高兴在 curl 25 岁生日之际发布curl 8.0

作为当今用途最广的开源项目之一,curl 在全世界有超过 100 亿的安装。从红帽 Linux、Debian 再到 Mac OS、Windows 10、iOS 和 Android,甚至包括任天堂 Switch、Xbox 和索尼 PS5 以及电脑游戏、媒体播放器和机顶盒等,都不乏 curl 的身影。

 

curl 的官方生日是 1998 年 3 月 20 日,这一天,第一个可构建出工具名为 curl 的 tar 包发布。今年是 curl 诞生 25 周年,curl 首席开发者 Daniel Stenberg 的发布公告,官方表示这可能是他们做过的最好的 curl 版本。

 

虽然头顶主要版本的编号,但 8.0.0 并未做出任何突破性的变更或升级。原本此次是要作为次要版本推出的,主要降低管理难度,但恰逢 curl 诞生 25 周年,所以决定用 8.0.0 的名头表示庆贺。这次的版本不含任何 API 或 ABI 中断。


用数字说话


  • 第 215 次发布

  • 1 项变更

  • 历时 28 天(项目总周期已达 9131 天)

  • 修复 130 个 bug(总计修复 8820 个 bug)

  • 189 项提交(总计 30042 项提交)

  • 0 个新的公共 libcurl 函数(总计 91 个)

  • 0 个新的 curl_easy_setopt()选项(总计 302 个)

  • 0 个新的 curl 命令行选项(总计 250 个)

  • 42 位贡献者,23 位新贡献者(总计 2841 位)

  • 21 位作者,5 位新作者(总计 1125 位)

  • 6 项安全修复(总计 141 项)

 

安全性


此次披露了 6 个新漏洞,其中 5 个严重程度为,1 个为

 

CVE-2023-27533: TELNET 选项 IAC 注入


curl 支持使用 TELNET 协议进行通信;作为其中一环,curl 允许用户传递用户名和“telnet 选项”以进行服务器协商。

 

由于缺少适当的输入清理和记录功能,curl 会将用户名和 telnet 选项传递给所提供的服务器。因此,用户可能故意违背应用程序的设计初衷,借此篡改传递内容或执行选项协商。特别是在应用程序允许用户提供数据或部分数据的情况下。

CVE-2023-27534: SFTP 路径~解析错误


curl 支持 SFTP 传输。curl 的 SFTP 实现会在 URL 的路径组件中提供一项特殊功能:将波浪号(~)字符作为路径中的首个路径元素时,代表相对于用户主目录的路径。之所以支持这种用法,是因为 RFC 草案曾经提出过这种 SFTP URL 工作方式。

 

但受 bug 影响,对 SFTP 路径中波浪号的处理出现了意外错误:不仅在单独将波浪号作为首个路径元素时会予以替换,在作为首个元素的前缀时也会错误替换。

 

以/~2/foo 路径为例,当使用用户 dan(主目录为/home/dan)访问服务器时,该路径会错误访问文件/home/dan2/foo。

 

这个 bug 可能被用于回避过滤或实施其他恶意操作。

CVE-2023-27535: FTP 过连接重用


即使一个或多个选项已经变更,libcurl 仍会重用之前创建的 FTP 连接,这可能导致实际用户发生变化,最终利用错误凭证进行二次传输。

 

libcurl 会将之前使用过的连接保存在连接池中,以便后续传输与其中的连接匹配时加以重用。但配置匹配检查中遗漏了几个 FTP 设置,因此导致匹配率过高。遗漏的设置具体为 CURLOPT_FTP_ACCOUNT, CURLOPT_FTP_ALTERNATIVE_TO_USERCURLOPT_FTP_SSL_CCC 以及CURLOPT_USE_SSL级别。

CVE-2023-27536: GSS 委派过连接重用


即使 GSS 委派(CURLOPT_GSSAPI_DELEGATION)选项已经变更,libcurl 仍会重用先前创建的连接,可能导致在二次传输中更改用户权限。

 

libcurl 会将之前使用过的连接保存在连接池中,以便后续传输与其中的连接匹配时加以重用。但配置匹配检查并未纳入 GSS 委派设置,因此导致匹配率过高,会影响到 krb5/kerberos/negotiate/GSSAPI 的传输。

CVE-2023-27537: HSTS 的 double-free 漏洞


libcurl 支持在单独的“句柄”之间共享 HSTS 数据。但引入这种共享机制时并未考虑到跨单独线程的共享行为,而且说明文档中也未强调这种情况。

 

由于缺乏互斥锁或线程锁,在两个线程之间共享相同的 HSTS 数据最终可能导致 double-free 或 use-after-free 漏洞。

CVE-2023-27538: SSH 连接过重用


即使 SSH 相关选项已经变更,libcurl 仍会重用这些应被禁止重用的原有连接。

 

libcurl 会将之前使用过的连接保存在连接池中,以便后续传输与其中的连接匹配时加以重用。但由于配置匹配检查中遗漏了 2 项 SSH 设置,因此导致匹配率过高。

 

变更


8.0.0 版本中只有一项实际“变更”——首个不再支持在非 64 位数据类型系统上构建的 curl 版本。curl 现在要求 “long long”或存在等效项。

 

Bug 修复


8.0.0 的发布周期仅相当于常规周期的一半,但我们仍然合并了大量 bug 修复成果。下面来看值得重点介绍的几项关键修复。

 

构建: 弃用 XC_AMEND_DISTCLEAN 宏


单看描述好像不容易理解。这项变更删除了一个旧有 autotools 宏,该宏有时会导致 configure 将 Makefile“膨胀”至几 GB 大小。

 

连接: 修复 time_connect 与 time_appconnect 计时器统计信息


引入新的 h2/h3 连接方法后的回归。

 

curl.1: 列出所有“全局选项”


在使用--next 后仍然存在的命令行选项被称为“全局选项”,现在手册页面已经列出所有全局选项供大家查看。

 

为此,8.0.0 版本提供新的元数据“tag”,用于标记相应 docs 文件中的各全局选项。

 

ftp: 带 SSL 的活动模式,添加过滤器


回归:之前,活动模式下的 FTPS 未正确设置数据连接。

 

在多个解析器替换 sscanf()


对 sscanf()的调用由上个版本中的 24 次,精简到此版本中的 4 次。

 

协议头:使 curl_easy_header 和 nextheader 返回不同的缓冲区。

http2 bug 修复


  • 并行操作期间的错误处理

  • 修复了连接重用过期间 http2 的先验知识

  • RST 与 GOAWAY 能更好地识别某些传输

  • 避免上传忙循环

 

http: 不再为短 PUT 请求发送 100-continue


现在的处理方式与 curl 长期以来处理 POST 的方式更趋一致。

 

http: 修复 unix 域套接字在 https 连接中的使用


一项回退修复。

 

multi: 让 multi_perform 忽略/解除忽略信号频率的降低


当对很长的单个传输列表进行迭代“处理”时,可以尽可能保留先前状态以避免产生大量忽略/解除忽略序列。

 

multi: 从主链表中删除句柄


为了加快对大量被添加至多句柄中的待处理或已完成的简单句柄的处理速度,现在将这些简单句柄从主链表中移出至单独的队列当中。

 

rand: 可使用 arc4random 作为回退


如果平台能够支持,则 curl 构建可在没有 TLS 库的情况下变得更好随机。

 

urlapi: 不得使用‘%’作为主机名称


URL 解析器会错误接受含有“百分号(%)”的主机名称。解析器仍可接受以百分号编码的主机名称,并将其作为 IPv6 地址和区域 ID 之间的分隔符。

 

urlapi: 无需 ENABLE_IPV6 即可解析 IPv6 地址


为了让 URL 解析器的行为更加一致,新版本的解析器可以完美解析和处理 IPv6 地址,不再要求 IPv6 连接必须起效。

 

使用 c-ares 绑定至具有主机名的接口

 

在这里祝 curl 生日快乐,也欢迎大家体验 8.0.0 全新版本!


原文链接:

https://daniel.haxx.se/blog/2023/03/20/curl-8-0-0-is-here/


相关阅读:

软件测试 | 使用 CURL 发送请求

24 年了,终于有人发现 curl 的这个 Bug 了

Linux 的小知识 -curl 命令

技术分享 | 使用 cURL 发送请求

2023-03-24 15:5010702

评论

发布
暂无评论
发现更多内容

苹果软件Noir:为所有网站应用深色模式

理理

Safari 扩展 Noir – Dark Mode 暗模式

DTALK直播预约 | 深度解析大资管行业数字化转型

袋鼠云数栈

数字化转型

DAPP众筹互助游戏开发详细丨DAPP众筹互助游戏系统开发(开发逻辑及案例)

系统开发咨询1357O98O718

PS画画工具推荐:ps怎么黄金分割构图

理理

黄金分割插件 GoldenCurve插件 PS插件下载

国贸股份 x 袋鼠云:推进全链业务深度数字化,为产业综合服务插上数字化翅膀

袋鼠云数栈

数字化转型

云原生+新技术,会碰撞出怎样的火花?

墨天轮

数据库 阿里云 Serverless 云原生 华为云

一图读懂工业数据要素高水平应用

Openlab_cosmoplat

工业数据

如何召开成功高效的项目会议?

PMO实践

项目管理 PMO

内存耗尽后Redis干了什么

CTO技术共享

用友BIP接入百度文心一言 持续使能企业数智商业创新

用友BIP

马蹄链智能合约开发方案丨马蹄链智能合约系统开发(开发说明))

系统开发咨询1357O98O718

DAPP马蹄链智能合约系统丨DAPP马蹄链智能合约系统开发(开发规则))

系统开发咨询1357O98O718

云智慧ITSM产品助力企业有效实现降本增效

云智慧AIOps社区

AIOPS ITSM 智能运维 工单 IT服务管理

用友与百度强强联合,以AI深化冶金行业数智化应用场景

用友BIP

gRPC请求超时和异常处理

江南一点雨

Java gRPC

Java中restTemplate携带Header请求

Geek_7ubdnf

Java RestTemplate

软件测试/测试开发丨基于 Spring Boot 的 RESTful API 设计与实现

测试人

Spring Boot 软件测试 测试发开 RESTful API

等保测评机构资质申请条件是什么?个人可以申请吗?

行云管家

等级保护 等保测评 等保测评机构

SpringBoot整合ElasticSearch

Geek_7ubdnf

Java elasticsearch

一文解码:如何在人工智能热潮下实现产业“智”变

加入高科技仿生人

人工智能 AI 低代码 智能化

FDF循环互助游戏开发说明丨FDF循环互助游戏系统开发详细及案例源码

系统开发咨询1357O98O718

一文上手图数据备份恢复工具 NebulaGraph BR

NebulaGraph

数据库 容灾备份

寻找 Milvus 的第 N+1 种可能

Zilliz

Milvus Meet Up

图片动画化应用中的动作分解方法

百度Geek说

深度学习 算法 计算机视觉 企业号 3 月 PK 榜

MetaForce佛萨奇2.0开发规则丨MetaForce佛萨奇2.0系统开发说明及案例

系统开发咨询1357O98O718

OpenCloudOS 轻量级虚拟化引擎 LiKeX 介绍

OpenCloudOS

Linux 容器 rust

查询性能: TDengine 最高达到了 InfluxDB 的 37 倍、 TimescaleDB 的 28.6 倍

TDengine

大数据 tdengine 性能测试 时序数据库

IoT物联网平台运行监控最佳实践——设备管理运维类

阿里云AIoT

监控 物联网

华为阅读全新上线高品质男声,带来身临其境般听书体验

叶落便知秋

微信小程序自动化测试方案实践过程

Openlab_cosmoplat

开源社区 微信小程序测试

我们很高兴在 curl 25 岁生日之际发布curl 8.0_语言 & 开发_Daniel Stenberg_InfoQ精选文章