Hasty Briefsbeta

双语

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的兼容性方案以适配旧版本。