【译文】苹果 CURL 安全事件 12604 号
长话短说:苹果公司认为没问题。我(CURL 官方博客)不这么认为。
2023 年 12 月 28 日,我们的 curl 问题跟踪器上出现了bugreport 12604。我们每天都会收到很多问题报告,因此单凭这一点就足以说明问题的严重性。我们会阅读报告,进行调查,提出后续问题,看看我们能学到什么,需要解决什么。
在这个bugreport中,问题的标题非常明确:macOS 和 Linux 之间的 flag -cacert 行为不一致,提交者是Yuedong Wu(音译吴跃东)。
这位热心的提交者展示了macOS捆绑的curl版本与完全开源的curl二进制文件的不同行为。即使在同一台macOS机器上运行相同的curl版本也是如此。
curl命令行选项--cacert
提供了一种方法,让用户在进行以下传输时,向curl说明这是一组需要信任的CA证书。如果 TLS 服务器无法提供可与这组证书进行验证的证书,它就会失败并返回错误。
curl中的这一特定行为和功能已存在多年(该选项于2000年12月添加到curl中)。这也是TLS的基本功能之一。
在 MacOS(苹果提供的版本)上的 curl 中使用该命令行选项时,如果提供的一组 CA 证书未能通过验证,系统似乎会退回并检查系统 CA 存储。这种二次检查既没有要求,也没有记录,坦率地说完全出乎意料。因此,当用户使用经过修剪的专用 CA 证书文件运行检查时,如果系统 CA 存储中包含可以验证服务器的证书,检查就不会失败!
这是一个安全问题,因为现在突然通过了本不该通过的证书检查。
我在 2023 年 12 月 29 日 08:30 发送给苹果公司产品安全部门的电子邮件中报告了这个安全问题。这不是一个大问题,但确实是一个问题。
苹果公司认为没有问题
2024 年 3 月 8 日,苹果产品安全部以他们的立场做出了回应:
你好
再次感谢您向我们报告此事,让我们有时间进行调查。
苹果的 OpenSSL (LibreSSL) 版本有意使用内置系统信任存储作为默认信任源。由于服务器证书可以使用内置系统信任存储成功验证,因此我们认为这不是我们平台需要解决的问题。
致以最崇高的敬意
KC
苹果产品安全
问题被关闭(close)了。
我不同意
很明显,我的想法与你不同。这个未注明的功能让 MacOS 上使用 curl 进行 CA 证书验证变得完全不可靠,而且与文档不符。它欺骗了用户。
请注意
由于这并不是我们提供的 curl 版本中的安全漏洞,因此我们并未针对此问题发布 CVE 或其他任何信息。严格来说,这个问题甚至不存在于curl代码中。它与苹果在其平台上使用的LibreSSL版本有关。
本文文字及图片出自 THE APPLE CURL SECURITY INCIDENT 12604
你也许感兴趣的:
- 【外评】苹果需要解释重新出现已删除照片的错误
- 【外评】一个工程奇迹
- 【外评】欧盟要求苹果必须在 6 个月内开放 iPadOS 的 sideload 功能
- 【外评】苹果 Vision Pro 是个大败笔
- 【外评】苹果花园的围墙正在倒塌
- 苹果公司提醒 92 个国家的用户注意雇佣军间谍软件攻击
- 一台由谷歌 Gemini AI 驱动的 iPhone 将会如何工作?
- 苹果自研ARM处理器 恰似乔布斯当年转投英特尔
- Mac迁移至苹果自主芯片 全面Arm架构时代或将到来
- “我写代码赚的钱,凭啥让苹果白拿30%?”
很高兴你们能调查这类问题,但说实话,我会很快关闭该问题,并建议报告人与操作系统供应商跟进。
在这种情况下,我认为这显然是一个与安全有关的问题,我不想在公开问题中强调这一点,所以我决定自己转发这个问题。
这是否可以被视为后门?
我的意思是,如果苹果公司被某个政府机构(假设情况)要求调查某个人的通信,他们只需在证书商店中 “伪造 “一个 CA,然后读取通信内容即可。
你确定他们理解这个问题吗?答复说
> 作为默认的信任来源。
但报告的问题显然与默认值无关。而是在明确要求不要信任系统 CA 列表的情况下。
我已经尽我所能向苹果产品安全部门解释了这个问题。我必须假设他们有足够的智慧来理解这个问题,否则他们就会要求我澄清他们不理解的问题。当然,我不能保证他们一定理解。
与苹果公司的对话很少。他们显然不会浪费任何言语。
我在 ${giant SaaS company} 工作,我们与苹果公司也有过类似的经历。我们需要澄清他们未注明的大规模启用 Apple Pay API 的问题,我确信我们使用该 API 为他们赚取了大量美元,但他们根本不在乎,这让我们很沮丧。
> 显然,我的想法不同。这个未注明的功能让 MacOS 上使用 curl 进行 CA 证书验证变得完全不可靠,而且与文档不符。它欺骗了用户。
你应该在curl文档中添加相关说明,这样这个问题就不会再次出现了。
“这不是漏洞,后门是一种功能。
致以最崇高的敬意、
苹果”
-cacert
(TLS) 告诉 curl 使用指定的证书文件来验证对等协议。文件可以包含多个CA证书。证书
证书必须是PEM格式。通常情况下文件,所以该选项通常用于更改默认文件。
…
(仅限 iOS 和 macOS)如果 curl 是针对安全传输,则支持该选项与其他SSL引擎的向后兼容性,但不应设置该选项。如果则会使用系统和用户钥匙串中的证书来验证对等方、这是验证证书链的首选方法。
啊,好吧,至少他们已经记录了他们一贯的 “我们觉得要做不同的事情,所以我们要这样做”,尽管很隐晦(特别是如果该注释像你的帖子暗示的那样是页脚的话;我现在不在我的机器上,否则我会自己检查)。
因此,苹果这样做是为了强制将钥匙串作为 CA 的真实来源。当然,还有更好的方法来鼓励这种模式。
哇,苹果公司肯定搞错了。这意味着你无法在 MacOS 上编写证书固定应用程序的脚本。我经常为使用公司 PKI 的内网应用程序编写脚本。
只需自行实施 TLS 即可。我们公司就是这么做的,因为我们想要完全控制。总共花了大约 2 周时间,还实现了各种扩展功能,比如假启动。
不错不错
是的,没错
有趣的问题
再来一次