
PoC non vérifié d'élévation de privilèges sur le noyau Linux utilisant la réutilisation cross-cache de msg_msgseg pour chevaucher skb et pipe_buffer, en modifiant les drapeaux du pipe afin de lire /etc/passwd.
Réservé à la recherche expérimentale. Le code de prefetch et nperm (nécessitant la référence mémoire configurée set.gdb) n'est pas inclus ; non optimisé, le taux de succès est faible.
L'auteur a remarqué que l'auteur de la vulnérabilité a déjà publié les informations associées : https://github.com/google/security-research/pull/414
L'approche d'exploitation est radicalement différente. Comme elle n'a pas été entièrement validée, je reste prudent (principalement sur la question de savoir si la spinlock de sock peut être mise en concurrence ; l'auteur ne l'a pas réellement testée, et d'après une lecture partielle du code, la course peut être déclenchée via une interruption matérielle timerfd).
Analyse préliminaire : https://xz.aliyun.com/news/92649
Approche d'exploitation : msg_msgseg réutilise tipc_sock via cross_cache, forge certains champs afin de passer toutes les vérifications puis est finalement libéré ; ensuite, un chevauchement entre skb et pipe_buffer est construit pour falsifier les flags de pipe_buffer (splice d'un fichier en lecture seule /etc/passwd puis falsification des flags — une extension de l'approche Dirty Pipe). Étant donné que l'adresse du tas du noyau n'est pas divulguée, le sk->lock.wq forgé ne peut pas pointer vers lui-même. Pour passer la vérification, curr->func (voir la chaîne d'appels de __wake_up_common dans le code source) est forgé en ret, de sorte que l'implémentation dataonly n'est pas particulièrement complète.