CVE-2024-53142 in Linux信息

摘要

由 VulDB • 2026-05-30

在 Linux 内核中,已修复以下漏洞:

initramfs:避免文件名缓冲区溢出

initramfs 文件名字段在 Documentation/driver-api/early-userspace/buffer-format.rst 中定义如下:

37 cpio_file := ALGN(4) + cpio_header + filename + "\0" + ALGN(4) + data ... 55 ============= ================== ========================= 56 字段名称 字段大小 含义 57 ============= ================== ========================= ... 70 c_namesize 8 字节 文件名长度,包括最后的 \0

在提取 initramfs cpio 归档文件时,内核的 do_name() 路径处理程序假设 @collected 处存在以零结尾的路径,并将其直接传递给 filp_open() / init_mkdir() / init_mknod()。

如果特别构造的 cpio 条目携带一个未以零结尾的文件名,并且其后跟随未初始化的内存,则可能会创建一个带有代表未初始化内存的尾部字符的文件。能够创建 initramfs 条目意味着已经拥有对系统的完全控制权,因此该缓冲区溢出不应被视为安全漏洞。

将以下 bash 脚本的输出追加到现有的 initramfs 中,并观察任何创建的 /initramfs_test_fname_overrunAA* 路径。例如: ./reproducer.sh | gzip >> /myinitramfs

当输出被 gzip 压缩时,最容易观察到非零的未初始化内存,因为它会溢出 __gunzip() 中堆分配的 @out_buf,而不是 initrd_start+initrd_size 块。

---- reproducer.sh ---- nilchar="A" # 更改为 "\0" 以正确以零结尾/填充 magic="070701" ino=1 mode=$(( 0100777 )) uid=0 gid=0 nlink=1 mtime=1 filesize=0 devmajor=0 devminor=1 rdevmajor=0 rdevminor=0 csum=0 fname="initramfs_test_fname_overrun" namelen=$(( ${#fname} + 1 )) # 加一以包含终止符

printf "%s%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%s" \ $magic $ino $mode $uid $gid $nlink $mtime $filesize \ $devmajor $devminor $rdevmajor $rdevminor $namelen $csum $fname

termpadlen=$(( 1 + ((4 - ((110 + $namelen) & 3)) % 4) )) printf "%.s${nilchar}" $(seq 1 $termpadlen)
---- reproducer.sh ----

do_symlink() 中处理的符号链接文件名字段不会超出数据段,因为符号链接目标具有明确的以零结尾。

通过在任何 cpio 条目未在预期 (name_len - 1) 偏移处携带以零结尾的情况下中止 initramfs 有限状态机 (FSM),来修复文件名缓冲区溢出问题。

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

来源

Want to know what is going to be exploited?

We predict KEV entries!