今日Curl官方博客宣布,Curl最新版本7.66发布,经过大量的开发奋战,新版本增加了HTTP/3的支持,另外本地更新还解决了两个悬赏安全问题(共计450美刀)。关于Curl的介绍的详细使用,可以参虫虫的技术文章《利用curl 突破服务器限制,进行安全渗透测试》系列文章。
版本信息图
本次版本开发的各种版本数据信息详见下图:
两个安全漏洞
TFTP小块大小堆缓冲区溢出漏洞(CVE-2019-5482)
如果使用curl小于默认的"块大小"(默认值为512)数据包的TFTP传输,可能会导致curl用于协议交换的堆缓冲区溢出。curlbug赏金计划奖励该漏洞250美元。
FTP-KRB double-free漏洞(CVE-2019-5481)
如果在curl中使用基于kerberos 认证的FTP传输(CURLOPT_KRBLEVEL选项),并且服务器恶意或错误地响应了一个过大的加密块,会使curl的随后的realloc()的调用失败,这样会导致curl出现异常触发double-free漏洞。
该漏洞获得curl bug赏金中计划奖励200美元。
主要功能
7.66.0中带来的主要功能有:
HTTP/3
目前已经可以支持http 3协议,但是还处于实验功能,默认情况下未启动。可以—http3手动配置启用该功能。该选项通知curl使用HTTP 3进行通讯。正常的HTT/3服务器执行并通过Alt-SVc重定向。如果无法建立QUIC连接会导致curl失败,不会自动回退尝试低版本HTTP连接。
并发传输
新版本增加并行传输工具,可以在命令行使用-Z 或者--parallel选项进行并行传输。这是一个非常重大的功能,可以极大地提高curl任务的效率。
为了避免在过多URL导致服务过载,或者curl耗尽Socket套接字,默认情况下限制curl的并发数量为50。可以使用 -parallel-max选项手动指定并发的数量。
Retry-after
有些服务器现在无法响应或无法响应时,会返回一个标准的HTTP头,该标头表示在几秒钟后或将来特定时间可以满足请求。新版本libcurl可以支持返回该数字,并可用于-retry选项中。
curl_multi_poll
curl_multi_poll是新增加的全新函数,其行为与curl_multi_wait非常相似,但是有一个主要好处:它解决了应用程序在libcurl在文件描述符耗尽的情况下,继续等待避免由此导致问题。
SASL认证
使用SASL身份验证时,curl和libcurl支持authzid字段。
Bug修复
此版本也修复了很多bug修复:
Windows上的.netrc和.curlrc
在新版本中curl和libcurl可以在Windows上也将检查并使用这些文件的前缀版本,如果没有后缀,就会回退并检查并使用兼容的下划线前缀版本。这样完成了curl在各个平台上的行为统一。
异步线程:创建一个套接字对来等待
Linux和其他Unix系统上的libcurl新版中将为应用程序提供文件描述符,以供应用程序在后台线程中解析名称时等待。这样可以使应用程序更好地了解何时再次调用libcurl,避免盲目地等待和重试以提高性能。
使用HTTP代理时URL凭证
修复了一个回归漏洞,在使用代理进行多阶段身份验证(例如HTTP Digest)时,curl无法正确使用URL凭据的bug。
默认禁用HTTP/0.9
如果希望libcurl接受并向应用程序传递HTTP/0.9的响应,则需要手动指定。从此版本开始,curl将默认清理无效的HTTP响应。
alt-svc改进
此前,curl引入了alt-svc支持,但是实验性的功能。使用alt-svc引入到HTTP/3时,发现并解决alt-svc一系列小问题,现在更稳定。但是,仍标记为实验性功能。
IPv6地址
URL解析器会接受格式错误的IPv6地址,该地址随后会在内部解析为主机名。比如诸如 "https://[ab.de]/"的URL,其中括号中的所有字母和符号都是IPv6数字地址的单独允许的组成部分,但该URL仍然不是有效的IPv6语法,而是一个合法有效的主机名。