Apple 内核漏洞修复,薮猫科技再出手

作者: 薮猫科技发布时间: 2/22/2024

macOS 14 Sonoma 发布当日,薮猫科技发现并提交了多个新引入的操作系统内核漏洞。在协助苹果公司修复问题以及等待用户升级超过 90 天后,今天的薮猫安全大讲堂我们就和朋友们分享其中的一个案例 —— 谁动了我的休止符。

 

程序研发从业久了,大家经常会听到 “祖传代码,请勿触碰” 之类的调侃。每当组里新来的小伙伴准备大刀阔斧整改代码的时候,总会有老师傅缓缓地按住年轻人的肩膀,屏幕前的我们甚至还能隐约听到 “三思而行啊!孩子~” 等警示音。

 

可是,不气盛叫年轻人吗?不重构,产品如何才能持续进步?玩笑归玩笑,戏谑的背后往往是一个个惨痛的教训。

 

今天的故事亦不例外,主角是一个名为 AppleBCMWLANCore::handleCardSpecific 的 Wi-Fi 内核函数。

 

AppleBCMWLANCore::handleCardSpecific 的 0x3F2 分支并不起眼,它的功能是将 LoggerFlagNameStrings 指针数组中的字符串返还给调用者。下面这张图就是正常情况下的交互效果。不知您注意到没有,最后一行的 ASCII 码 0x2D 表示字符 “-”,这个特殊的标记位表明数组已经结束。

 

图:LoggerFlagNameStrings 数组信息

 

也许是出于美观的目的,亦或是出于规范的考量。从 macOS 14 Sonoma 开始,一位年轻人触碰了这段数据。数组中原本无意义的占位符 “-” 被改为了可读性更佳的 “WlanLogReserved” (WLAN 日志保留字段)。

 

图:更改前后版本对比图

 

可是、但是、可但是,这位年轻人忘记了一件最重要的事情,0x3F2 分支硬编码了 “-” 检测代码:

 

图:休止符 “-” 的检测代码

 

随意改动数据等于去掉了循环的休止符,这直接导致了内核数组的越界访问!

 

图:macOS 14 Sonoma 内核崩溃信息

 

  • printf("来复盘一下");

首先:

这位清澈的程序员根本没有理解目标代码的执行逻辑,盲目作出了修改。

其次:

SDL、DevSecOps 以及源代码质量分析工具由于缺乏数据与代码之间的上下文,它们不会产生有效告警。

随后:

由于程序员只是修改了数据字段,没有触碰一行可执行代码。这类改动在产品发布前的同行代码审查环节也不会引起特别的关注。

键的:

单元测试、集成测试、Beta 测试等都没有起到应有的效果。至此,所有安全防御手段均被击穿。

 

一个神奇的、仅由修改数据字段导致的漏洞就这么被引入到了 macOS 14 Sonoma 操作系统内核。值得庆幸的是,薮猫科技在 macOS 14.0 Sonoma (23A5257q) 发布当日就发现了这个问题。我们是您值得信赖的最后一道安全防线。

 

这节课的最后,薮猫科技想提醒您,谋定而后动是大型项目开发与维护时的金科玉律。从执行更加规范的内部培训,尽力降低人为因素,到落实更加严格的测试流程,不断完善制度体系,我们能从中汲取的教训也十分深刻。否则,“祖传代码,请勿触碰” 永远会诞生出新的传说 —— 谁动了我的休止符。

 

下课!