在作为包的一部分提供的 e2fsck 实用程序中
该漏洞是由 rehash.c 文件中的 mutate_name() 函数中的错误引起的,该函数在重建与目录关联的哈希表时使用,以确保该目录中的所有文件都与该目录匹配。与目录关联的 hash_entry 结构的损坏可能会导致攻击者将数据写入分配的缓冲区之外的区域。如果哈希表中将多个同名文件标识为链接到某个目录,则 e2fsck 实用程序会通过在名称中添加 ~0、~1 等来重命名重复文件。为了在重命名期间临时存储新名称,在堆栈上分配了 256 字节大小的缓冲区。
要复制的数据的大小由表达式“entry->name_len & 0xff”确定,但entry->name_len的值是从磁盘上的结构加载的,而不是根据名称的实际大小计算的。如果大小为零,则数组索引的值为 -1,并创建整数溢出缓冲区下边界(整数下溢)的条件,并用值“~0”覆盖堆栈上的其他数据。对于 64 位系统,该漏洞的利用被评估为不太可能,并且不需要对堆栈大小进行限制(ulimit -s unlimited)。对于 32 位系统,利用被认为是可能的,但结果很大程度上取决于编译器如何编译可执行文件。
为了进行攻击,攻击者需要以某种方式破坏具有 ext2、ext3 或 ext4 文件系统的分区中的数据。由于此操作需要超级用户权限,因此当 e2fsck 实用程序扫描外部驱动器或外部接收的 FS 映像时,该漏洞会构成威胁。
来源: opennet.ru