CVE-2024-53142 in Linux
Sumário
de VulDB • 23/05/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
initramfs: evitar estouro de buffer de nome de arquivo
O campo de nome de arquivo do initramfs é definido em Documentation/driver-api/early-userspace/buffer-format.rst como:
37 cpio_file := ALGN(4) + cpio_header + filename + "\0" + ALGN(4) + data ... 55 ============= ================== ========================= 56 Nome do campo Tamanho do campo Significado 57 ============= ================== ========================= ... 70 c_namesize 8 bytes Comprimento do nome do arquivo, incluindo o \0 final
Ao extrair um arquivo cpio do initramfs, o manipulador do caminho do kernel do_name() assume um caminho terminado em zero em @collected, passando-o diretamente para filp_open() / init_mkdir() / init_mknod().
Se uma entrada cpio especialmente elaborada contiver um nome de arquivo não terminado em zero e for seguida por memória não inicializada, um arquivo pode ser criado com caracteres de finalização que representam a memória não inicializada. A capacidade de criar uma entrada initramfs implicaria já ter controle total do sistema, portanto, o estouro de buffer não deve ser considerado uma vulnerabilidade de segurança.
Anexe a saída do seguinte script bash a um initramfs existente e observe qualquer caminho criado /initramfs_test_fname_overrunAA*. Por exemplo: ./reproducer.sh | gzip >> /myinitramfs
É mais fácil observar memória não inicializada não nula quando a saída é compactada com gzip, pois ela transbordará o @out_buf alocado no heap em __gunzip(), em vez do bloco initrd_start+initrd_size.
---- reproducer.sh ---- nilchar="A" # altere para "\0" para zerar corretamente o terminador / preencher 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 )) # mais um para considerar o terminador
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 ----
Os campos de nome de arquivo de link simbólico manipulados em do_symlink() não transbordarão além do segmento de dados, devido à terminação explícita em zero do alvo do link simbólico.
Corrija o estouro de buffer de nome de arquivo abortando a FSM do initramfs se qualquer entrada cpio não contiver um terminador de zero no deslocamento esperado (name_len - 1).
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.