找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

475

积分

0

好友

67

主题
发表于 昨天 03:10 | 查看: 3| 回复: 0

问你一个小问题:这几行代码值多少钱?

1块,2角,5块,1分,还是分文不值?

然而,正是这几行看似简单的代码,却在2014年给苹果公司和全球用户带来了近十亿美元的直接与间接损失,被安全界永久地称为:

“The most expensive one-liner in history”
(史上最贵的一行代码)。

事件的来龙去脉

2012年4-5月:灾难的种子悄然埋下

当时,苹果为了支持即将发布的 iOS 7 系统,正在对核心安全库 SecureTransport 进行重构,以优化 TLS 握手流程并兼容更新的协议版本。

一位程序员在修改 SSLVerifySignedServerKeyExchange 函数(该函数负责验证服务器密钥交换的签名)时,或许是由于疏忽,又或是代码合并时产生了冲突,意外地多添加了一行完全相同的 goto fail;

if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
    goto fail;
if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
    goto fail;
    goto fail; // ← 多出的这行完全相同的代码,便是灾难之源
if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
    goto fail;

这行多余的代码导致签名验证的最后一步(SSLHashSHA1.final)永远无法执行,从而使得 SSL/TLS 证书验证逻辑被绕过。

为什么没人发现?

  • 视觉盲区:两行完全相同的 goto fail; 代码缩进一致,在代码审查时极难被人眼发现。
  • 编译静默:苹果当时的编译器没有开启 -Wall -Wextra 等严格的警告选项,导致编译器对此类明显的逻辑错误(无法到达的代码)没有发出任何警报。
  • 测试遗漏:单元测试恰好没有覆盖到“签名验证失败”这个关键分支路径。
  • 审查疏忽:最终,这个错误在代码审查环节也被漏掉了。

2013年9月19日凌晨1点:带着“定时炸弹”的 iOS 7.0 推送全球

这行致命的 goto fail; 就这样被编译进了 iOS 7.0、OS X Mavericks 10.9 等系统的二进制文件中,并安装到了全球数亿台 iPhone、iPad、iPod touch 和 Mac 电脑里。它在后台静静运行了超过17个月,无人察觉。

2014年2月21日:真相大白之日

  • 下午2点左右:谷歌的安全工程师 Adam Langley 在旧金山的办公室,用自己的 MacBook 进行 TLS 测试。他突发奇想,尝试使用一个伪造的证书去连接 apple.com……连接竟然成功了,验证被绕过了!
  • 下午4:26:他发出了可能是史上“最贵”的一条推文:“Apple’s SSL bug is real (and easily exploitable on iOS).”
  • 安全界震荡:消息迅速引爆安全社区,CloudFlare、Facebook 等公司的内部安全团队紧急复现,均告成功。
  • 当晚8点左右:苹果内部安全团队确认了该漏洞的存在,并连夜准备了一个仅 3.1 MB 的紧急补丁(iOS 7.0.6)。

随后,苹果罕见地主动公开了有问题的源代码。当全球程序员看到那两行一模一样的 goto fail; 时,几乎都倒吸一口凉气。

Apple “Goto Fail” 漏洞关键代码截图

最终的代价

紧急修复的研发与推送成本、全球性的声誉损失、以及潜在的用户数据被窃取风险……综合估算,这个由一行多余代码引发的漏洞,给苹果造成的直接与间接经济损失高达:

至少十亿美元。

从此,这行 goto fail; 被永久载入了计算机安全史册,成为所有开发者和安全工程师的经典反面教材。它时刻警示着我们:在软件开发和构建流程中,严格的代码审查、充分利用编译器的警告功能、以及高覆盖率的测试,三者缺一不可。任何细微的疏忽,在巨大的规模效应下,都可能演变成一场灾难性的网络安全事件。




上一篇:AI安全测试实战:精选15款顶级开源工具,聚焦漏洞挖掘与防护
下一篇:向量搜索与智能代理:数据库如何演进为企业“海马体”?
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-11 04:10 , Processed in 0.093675 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表