FreeBSD 的 EISDIR 和内核堆栈泄漏

July 16, 2019 默认分类

FreeBSD 的 UFS 文件系统对 EISDIR 的支持不好,可以认为是混乱。如果你一不小心 cat 了某个目录,终端就很有可能被一堆不可打印字符搞乱,要是试着 grep,会有一条Binary file . matches的消息来打扰你,尤其是在`grep <pattern> *'的时候。然而,如果试着用 vim 去编辑目录,vim 会告诉你“这是个目录”,用 ed(古老的行编辑器)编辑,又变成了“正常”文件。
这种混乱和糟糕的设计,为 FreeBSD 的 UFS 通过文件夹泄漏内核堆栈的漏洞(https://www.freebsd.org/security/advisories/FreeBSD-SA-19:10.ufs.asc)的利用提供了惊人的方便条件。每个文件可以泄漏几个字节的信息,而且只要有文件夹的读权限即可读到。要是有文件夹的写权限,最多可以泄漏 254 字节的内核堆栈内容,这不是个小数目。

这个漏洞存在于所有版本的 FreeBSD 中,很有可能存在于各种使用 UFS 和 FFS 的操作系统中,据信可能起源于 4.1 BSD ,直到三十多年后的今天才被发现。而 OpenBSD 表示十分淡定:他们有 EISDIR ,还在改造文件条目的格式时意外修好了这个漏洞,无需担心。


相关文章

添加新评论

 我们使用cookie在本地保存您评论时填写的信息,参见隐私条款