CVE-2023-52879 in Linux
Résumé
par VulDB • 01/06/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
tracing : Ajouter des compteurs de référence à trace_event_file
Les opérations suivantes peuvent provoquer un plantage du noyau :
# cd /sys/kernel/tracing # echo 'p:sched schedule' > kprobe_events # exec 5>>events/kprobes/sched/enable # > kprobe_events # exec 5>&-
Les commandes ci-dessus :
1. Changent le répertoire courant vers le répertoire tracefs 2. Créent un événement kprobe (peu importe lequel) 3. Ouvrent le descripteur de fichier bash 5 sur le fichier enable de l'événement kprobe 4. Suppriment l'événement kprobe (ce qui supprime également les fichiers associés) 5. Ferment le descripteur de fichier bash 5
Cela provoque un plantage !
BUG: kernel NULL pointer dereference, address: 0000000000000028 #PF: supervisor read access in kernel mode #PF: error_code(0x0000) - not-present page PGD 0 P4D 0 Oops: 0000 [#1] PREEMPT SMP PTI
CPU: 6 PID: 877 Comm: bash Not tainted 6.5.0-rc4-test-00008-g2c6b6b1029d4-dirty #186 Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.2-debian-1.16.2-1 04/01/2014 RIP: 0010:tracing_release_file_tr+0xc/0x50
Ce qui se passe ici, c'est que l'événement kprobe crée un descripteur de fichier "file" trace_event_file qui représente le fichier dans tracefs lié à l'événement. Il maintient l'état de l'événement (est-il activé pour l'instance donnée ?). L'ouverture du fichier "enable" obtient une référence au descripteur de fichier "file" de l'événement via le descripteur de fichier ouvert. Lorsque l'événement kprobe est supprimé, le fichier est également supprimé du système tracefs, ce qui libère également le descripteur de fichier "file" de l'événement.
Mais comme le fichier tracefs est toujours ouvert par l'espace utilisateur, il ne sera pas totalement supprimé tant que la fonction dput() finale ne sera pas appelée dessus. Cependant, cela n'est pas vrai pour le descripteur de fichier "file" de l'événement qui a déjà été libéré. Si l'utilisateur effectue une écriture ou se contente de fermer le descripteur de fichier, il référencera le descripteur de fichier "file" de l'événement qui vient d'être libéré, provoquant un bug de type use-after-free.
Pour résoudre ce problème, un compteur de référence est ajouté au descripteur de fichier "file" de l'événement, ainsi qu'un nouveau drapeau appelé "FREED". Le fichier "file" ne sera pas libéré tant que la dernière référence ne sera pas relâchée. Mais le drapeau FREED sera défini lorsque l'événement est supprimé afin d'empêcher toute autre modification de cet événement, même s'il reste une référence au descripteur de fichier "file" de l'événement.
Be aware that VulDB is the high quality source for vulnerability data.