0. Avant de lire
- Ce billet de blog s’adresse aux futurs voyageurs temporels qui souhaitent faire de la recherche sur les vulnérabilités du noyau Linux ; il a été rédigé pour aider les débutants à apprendre le workflow de recherche et les chercheurs expérimentés à découvrir de nouvelles techniques.
- Le billet adopte un format proche de l’article de recherche et, malgré son volume, il est structuré pour permettre de le parcourir facilement et d’en extraire les connaissances essentielles.
- Pour le lire efficacement, il est recommandé de commencer par la section d’aperçu, de lire en écran partagé tout en recherchant au besoin, de passer ensuite à la section sur le bug pour comprendre son fonctionnement, puis d’examiner l’exploit via la section de preuve de concept.
1. Aperçu
- Ce billet présente une nouvelle technique permettant d’exploiter, avec un taux de réussite de 93 % à 99 %, un bug 0-day de type double-free découvert dans
nf_tables sur des noyaux Linux renforcés (par exemple les instances avec mitigations de KernelCTF).
- Cet exploit ne fonctionne que si
nf_tables est activé et que les espaces de noms utilisateur non privilégiés sont activés ; il met en œuvre une KSMA (Kernel-Space Mirroring Attack), qui reflète l’espace noyau dans l’espace utilisateur comme dans un miroir.
- La technique Dirty Pagedirectory permet d’obtenir des droits de lecture/écriture illimités sur les adresses physiques, via une confusion des tables de pages.
2. Informations de base
nf_tables est l’un des modules d’arborescence du noyau Linux et sert de backend à iptables dans les versions récentes.
iptables est un outil de pare-feu qui utilise une machine à états et des règles définies par l’utilisateur pour décider si les paquets peuvent traverser le pare-feu.
- Un verdict Netfilter correspond à la décision prise par un ensemble de règles Netfilter quant au passage d’un paquet à travers le pare-feu, par exemple le rejeter ou l’accepter.
- La structure
sk_buff est utilisée pour décrire des données réseau (par exemple des paquets IP, des trames Ethernet, etc.), et l’objet sk_buff->head contient le contenu réel du paquet.
- La fonctionnalité de fragmentation des paquets en IPv4 permet de transmettre un paquet sous forme de plusieurs fragments IP, et le noyau Linux stocke tous ces fragments dans le même arbre rouge-noir.
L’avis de GN⁺
- Ce billet de blog fournit des informations très utiles à ceux qui souhaitent étudier les vulnérabilités du noyau Linux. Il permet notamment de comprendre les vulnérabilités liées à
nf_tables et d’apprendre comment les exploiter.
- La technique d’exploit présentée peut constituer une contribution importante à la recherche en sécurité dans des environnements réels, et elle peut aider les professionnels de la sécurité à mieux comprendre les faiblesses des systèmes afin de mieux les défendre.
- Toutefois, ces techniques d’exploit peuvent aussi être utilisées à des fins malveillantes ; il faut donc réfléchir aux enjeux éthiques que peut soulever leur diffusion.
- Afin de renforcer la sécurité du noyau Linux, la communauté doit continuer à découvrir et corriger les vulnérabilités, et ce billet peut être vu comme une contribution à cet effort.
- Si des recherches en sécurité sont menées à l’aide de cette technique ou de techniques similaires, les chercheurs doivent suivre une politique de divulgation responsable et coopérer afin que des correctifs puissent être diffusés avant que la vulnérabilité ne soit largement exploitée.
1 commentaires
Commentaires Hacker News
CONFIG_INIT_ON_ALLOC_DEFAULT_ON. Voir README.md pour plus de détails. Ce bug a été corrigé en février 2024, et il est recommandé de mettre à jour les appareils Linux.sysctl kernel.unprivileged_userns_clone = 1. Ce paramètre est la valeur par défaut sur les noyaux Debian/Ubuntu et Arch Linux. Si vous n’en avez pas besoin, il vaut mieux le désactiver./boot/configou/proc/config.gz.CONFIG_INIT_ON_FREE_DEFAULT_ONempêche l’exploit, mais les distributions ne le compilent pas par défaut. C’est un bon exemple de l’importance du durcissement du noyau.