CVE-2024-53142 in Linuxinformação

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.

Responsável

Linux

Reservar

19/11/2024

Divulgação

06/12/2024

Moderação

aceite

Entrada

VDB-287119

CPE

pronto

EPSS

0.00248

KEV

não

Atividades

muito baixo

Fontes

Might our Artificial Intelligence support you?

Check our Alexa App!