curl 存在一个长达 23.9 年的 DOS 漏洞


curl 的作者 Danie 在博客中分享了 curl 持续了 23.9 年的 DOS 漏洞。

1998 年 10 月, curl 4.9 发布了,curl 4.9 是第一个带有“cookie 引擎”的版本,可以接收 HTTP cookie、解析、理解并在后续请求中正确返回 cookie。

当然,当时 curl 的受众很小,几个月后 curl 网站才宣布 curl l 4.9 版本的下载量达到了 300 次。而且当时 cookie 也没有明确的规范,唯一描述 cookie 如何工作的规范是 Netscape 网景公司一个非常简短的文档,名为 cookie_spec

在随后的日子里,IETF(互联网工程任务组) 一直在努力创建 cookie 规范,但大多失败了。因为 Cookie 有点特别,它们由许多不同的作者、代码库和网站实现,从根本上改变“从上而下的规范”的工作方式。

直到 2011 年发布的 Cookie RFC 6265,这是真正意义上的 Cookie 规范,解释了 cookie 是什么,以及应该遵守什么。但这也引来了一些问题,RFC 6265 为服务器如何发送 cookie 提供了一种字段语法,而为客户端提供了一种截然不同的语法用来接受 cookie。双重语法导致了两个问题:

  • 很难阅读规范,因为很容易陷入其中一种语法,并假设语法对所有用例有效。
  • 定义发送 cookie 的语法没什么用,因为客户端才是真正决定如何接收和处理 cookie 。现有的大型 cookie 解析器(如浏览器)在接受的内容格式上相当自由,没有人注意服务器是否遵循 RFC 规范中的语法。

随着时间的推移, cookie 的发展依然缓慢,但 HTTP 规范在过去的几十年中已经更新了很多次。更重要的是 HTTP 服务器实现已经实施了更严格的解析策略:如果传入的 HTTP 请求看起来“非法”或格式不正确,HTTP 服务器开始提前拒绝它们。现在尝试向一个新的 HTTP 服务器发送一个包含控制代码的请求,那么服务器只会拒绝该请求并返回一个 400 响应代码。

一个 23 年的 Bug

2022 年 6 月末,curl 收到了一份关于 curl 可疑安全问题的报告,这导致 curl 随后发布了CVE-2022-35252。

事实证明,1998 年的 curl  cookie 代码接受包含控制代码的 cookie。控制代码可以是名称或内容的一部分,如果用户启用“cookie 引擎”,curl 将存储这些 cookie ,并在后续请求中将它们返回。比如:

Set-Cookie: name^a=content^b; domain=.example.com

^a 和 ^b 代表控制码,字节码一和二。由于域可以将 cookie 标记为另一个主机。因此,该 cookie 将包含在对该域内所有主机的请求中。当 curl 将这样的 cookie 发送到 HTTP 服务器时,它会在传出请求中包含这样的标头字段:

Cookie: name^a=content^b

而默认配置的服务器将响应 400。对于接收这些 cookie 的脚本或应用程序,只要 cookie 继续发送,进一步的请求将被拒绝,形成拒绝服务 DOS 攻击。

自 4.9 版本以来(curl 项目开发的第 201),这些易受攻击的 cookie 代码就一直存在于 curl 里面,直到 7.85.0 版本(curl 项目开发的第 8930 天)才得到修复,中间经历了 8729 天(23.9 年)。

当然,据 Daniel 解释:这些 cookie 代码当初发布时没有问题,并且在用户使用的大部分时间里也没有问题。(没有找到我头上就不是我的锅)。且最新版本的 curl 已经完全符合最新的 RFC 6265bis 草案版本的规定。


相關推薦

2023-02-17

amnesia with –parallel CVE-2023-23916: 修复 HTTP 压缩多 header 时存在的 DoS 攻击漏洞 此外还修复了 140 多个 bug,以及其他变化。详情查看 Changelog 和发布公告。 下载地址:https://curl.se/download.html

2023-07-06

的最多 2 年。作为可选的附加订阅,ELS 可以获得对最后一个小版本的故障排除、选择性紧急优先错误修复和特定由红帽定义的安全修复的访问权限。 红帽使用4级评级系统(低、中、重要和严重)对安全问题的严重程度进行评

2023-04-08

据一些用户报告称,其他安全软件(如 Norton Antivirus)也存在类似问题。Mozilla 已经着手进行更多改进,以修补其他防病毒应用导致的性能问题。 

2022-11-03

漏洞 由于 OpenSSL 3.0.0 - 3.0.6 版本中在 X.509 证书验证中存在缓冲区溢出漏洞,可以通过制作恶意电子邮件地址以溢出堆栈上的 4 个字节,成功利用此漏洞可用于发起 Dos 攻击或远程代码执行。 CVE-2022-3786:X.509 电子邮件地址可

2023-04-01

新加坡的逆向计算爱好者 Yeo Kheng Meng 发布了一个 “doschgpt” ChatGPT 客户端,这个客户端适用于上世纪八十年代的 MS-DOS 系统。 目前这个 DOS 系统的 ChatGPT 客户端已成功在 1984 年的 IBM 5155 便携式 PC 上运行,这台机子配备 4.77Mhz 主

2022-01-06

缓存中毒漏洞可能会导致跨站点脚本(XSS)攻击。例如,一个漏洞可以强制缓存服务器将 JavaScript 文件请求转发到攻击者控制的地址。在另一种情况下,Ladunca 还能够将缓存请求从一个主机重定向到另一个容易受到基于 DOM 的 XSS

2023-03-03

并没有得到任何回应。因此 Daniel Stenberg 就想着能不能以存在漏洞为由报告这个问题(由于版本太老,很多漏洞都是公开可查询到的),让他们从 NuGet 上删除这个包呢。但 NuGet 表示他们只接受微软产品的这种报告,对于其他非

2022-08-24

的技术细节。公告指出,该公司在 ChromeOS 组件中发现了一个可以远程触发的内存损坏漏洞,允许攻击者执行拒绝服务 (DoS) 攻击,或者在极端情况下执行远程代码执行 (RCE)。 微软的一名研究人员在今年 4 月下旬向谷歌报告了该

2023-04-01

题,要赶在版本发布之前测试并修复新问题,48 小时则是一个非常短的时间窗口。 为了有更多的时间来处理漏洞的修复,在新的 curl 安全流程中,如果安全问题是“低严重性或中等严重性”,将允许更早地将修复程序提交到公

2022-10-16

本周发布了 5 个围绕 Linux WiFi 堆栈的安全漏洞的 CVE,这些漏洞可以利用无线网络通过恶意数据包来作恶。 Linux 内核已发布针对 WiFi 堆栈漏洞的最新修复版本,分别是 Linux 6.0.2 , Linux 5.19.16 , Linux 5.15.74 , Linux 5.10.148,和 Linux 5.4.218

2023-10-12

且恶意服务器返回了 http 30x 跳转,把用户访问目标指向一个超长域名从而导致溢出 另一个被评级为 "LOW" 的 CVE-2023-38546 漏洞是通过 none 文件进行 cookie 注入。 此漏洞允许攻击者在满足一系列特定条件并将 cookie 放

2023-03-24

至 2.7.10 [升级] Spring Cloud Alibaba 版本升级至 2021.0.5.0 [漏洞] 修复 Spring DoS 安全漏洞 (CVE-2023-20861) [漏洞] 修复 commons-fileupload 安全漏洞 (CVE-2023-24998) 【其它更新】 [修复] 修复授权码模式登录页面在最新版本 Spring Authorizati

2024-05-25

新版本(现在始终使用 ntfs-3g 驱动程序,而不是存在漏洞的 AMI NTFS 驱动程序) 复制 ISO 文件时增加缓冲区大小,以尽量减少 AMI NTFS UEFI 驱动程序错误 改进分区创建处理 当unattend.xml冲突已经存在时,不要显示 WUE 对话

2021-12-20

Apache Log4j 的 2.0-alpha1 到 2.16.0 版本存在新的漏洞 CVE-2021-45105 ,此漏洞评分 7.5 ,且在刚发布的 Log4j 2.17.0 (Java 8) 中得到了修复。如果把安全公司 Praetorian 发现的第三个信息泄露漏洞也算进去,这应该是 Log4j 的第四个漏洞了。