【译文】苹果 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

余下全文(1/3)
分享这篇文章:

共有 16 条讨论

  1. 很高兴你们能调查这类问题,但说实话,我会很快关闭该问题,并建议报告人与操作系统供应商跟进。

    1. 在这种情况下,我认为这显然是一个与安全有关的问题,我不想在公开问题中强调这一点,所以我决定自己转发这个问题。

  2. 这是否可以被视为后门?

    我的意思是,如果苹果公司被某个政府机构(假设情况)要求调查某个人的通信,他们只需在证书商店中 “伪造 “一个 CA,然后读取通信内容即可。

  3. 你确定他们理解这个问题吗?答复说

    > 作为默认的信任来源。

    但报告的问题显然与默认值无关。而是在明确要求不要信任系统 CA 列表的情况下。

  4. 我已经尽我所能向苹果产品安全部门解释了这个问题。我必须假设他们有足够的智慧来理解这个问题,否则他们就会要求我澄清他们不理解的问题。当然,我不能保证他们一定理解。

    与苹果公司的对话很少。他们显然不会浪费任何言语。

  5. 我在 ${giant SaaS company} 工作,我们与苹果公司也有过类似的经历。我们需要澄清他们未注明的大规模启用 Apple Pay API 的问题,我确信我们使用该 API 为他们赚取了大量美元,但他们根本不在乎,这让我们很沮丧。

  6. > 显然,我的想法不同。这个未注明的功能让 MacOS 上使用 curl 进行 CA 证书验证变得完全不可靠,而且与文档不符。它欺骗了用户。

    你应该在curl文档中添加相关说明,这样这个问题就不会再次出现了。

  7. “这不是漏洞,后门是一种功能。

    致以最崇高的敬意、
    苹果”

  8. -cacert
    (TLS) 告诉 curl 使用指定的证书文件来验证对等协议。文件可以包含多个CA证书。证书
    证书必须是PEM格式。通常情况下文件,所以该选项通常用于更改默认文件。

    (仅限 iOS 和 macOS)如果 curl 是针对安全传输,则支持该选项与其他SSL引擎的向后兼容性,但不应设置该选项。如果则会使用系统和用户钥匙串中的证书来验证对等方、这是验证证书链的首选方法。

  9. 啊,好吧,至少他们已经记录了他们一贯的 “我们觉得要做不同的事情,所以我们要这样做”,尽管很隐晦(特别是如果该注释像你的帖子暗示的那样是页脚的话;我现在不在我的机器上,否则我会自己检查)。

    因此,苹果这样做是为了强制将钥匙串作为 CA 的真实来源。当然,还有更好的方法来鼓励这种模式。

  10. 哇,苹果公司肯定搞错了。这意味着你无法在 MacOS 上编写证书固定应用程序的脚本。我经常为使用公司 PKI 的内网应用程序编写脚本。

  11. 只需自行实施 TLS 即可。我们公司就是这么做的,因为我们想要完全控制。总共花了大约 2 周时间,还实现了各种扩展功能,比如假启动。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注