The 40 Year Old Kernel Bug (iOS, macOS, XNU, etc.)
22 days ago
- 作者在DEFCON上的演示因XNU内核中UNIX域套接字inode分配错误而崩溃。
- 该错误源于全局变量`unp_ino`采用后置递增(`unp_ino++`),导致首次调用`fstat()`返回inode 0,违反了未初始化inode的检查规则。
- 这导致后续`fstat()`调用时inode发生变化,破坏了作者虚拟机中通过inode追踪TTY文件描述符的假设机制。
- 该漏洞自1985年存在于BSD中,历经NeXTSTEP和苹果XNU内核(macOS和iOS)延续至今。
- 修复方法很简单:改用前置递增(`++unp_ino`),或确保首个inode非零。
- 作者建议在用户代码中添加处理零inode的兼容性方案以适配旧版本。