CVE-2024-53142 in Linuxinformation

Résumé

par VulDB • 23/05/2026

Dans le noyau Linux, la vulnérabilité suivante a été corrigée :

initramfs : éviter le dépassement de tampon pour le nom de fichier

Le champ du nom de fichier initramfs est défini dans Documentation/driver-api/early-userspace/buffer-format.rst comme suit :

37 cpio_file := ALGN(4) + cpio_header + filename + "\0" + ALGN(4) + data ... 55 ============= ================== ========================= 56 Nom du champ Taille du champ Signification 57 ============= ================== ========================= ... 70 c_namesize 8 octets Longueur du nom de fichier, y compris le \0 final

Lors de l'extraction d'une archive cpio initramfs, le gestionnaire de chemin do_name() du noyau suppose un chemin terminé par un caractère nul à @collected, et le transmet directement à filp_open() / init_mkdir() / init_mknod().

Si une entrée cpio spécialement conçue contient un nom de fichier non terminé par un caractère nul et est suivie de mémoire non initialisée, un fichier peut être créé avec des caractères de fin représentant la mémoire non initialisée. La capacité de créer une entrée initramfs impliquerait déjà un contrôle total du système, le dépassement de tampon ne doit donc pas être considéré comme une vulnérabilité de sécurité.

Ajoutez la sortie du script bash suivant à une initramfs existante et observez tout chemin créé /initramfs_test_fname_overrunAA*. Par exemple : ./reproducer.sh | gzip >> /myinitramfs

Il est plus facile d'observer une mémoire non initialisée non nulle lorsque la sortie est compressée au format gzip, car elle débordera du tampon @out_buf alloué sur le tas dans __gunzip(), plutôt que du bloc initrd_start+initrd_size.

---- reproducer.sh ---- nilchar="A" # changer en "\0" pour terminer correctement par un caractère nul / remplir 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 )) # plus un pour tenir compte du terminateur

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 ----

Les champs de nom de fichier des liens symboliques gérés dans do_symlink() ne déborderont pas au-delà du segment de données, en raison de la terminaison explicite par un caractère nul de la cible du lien symbolique.

Correction du dépassement de tampon de nom de fichier en interrompant la machine à états finis (FSM) initramfs si une entrée cpio ne contient pas de terminateur de caractère nul à l'offset attendu (name_len - 1).

If you want to get best quality of vulnerability data, you may have to visit VulDB.

Responsable

Linux

Réserver

19/11/2024

Divulgation

06/12/2024

Modérer

accepté

Entrée

VDB-287119

CPE

prêt

EPSS

0.00248

KEV

non

Activités

très faible

Sources

Do you want to use VulDB in your project?

Use the official API to access entries easily!