1 points par GN⁺ 2024-03-27 | 1 commentaires | Partager sur WhatsApp

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

 
GN⁺ 2024-03-27
Commentaires Hacker News
  • Un proof of concept pour CVE-2024-1086 a été publié. Les versions du noyau Linux de v5.14 à v6.6 sont affectées, et pour v6.4 à v6.6, cela dépend de la variable de configuration du noyau 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.
  • Le patch comporte une partie qui annule un commit précédent, et il n’est pas clair pourquoi ce commit avait été effectué. Je me demande si quelqu’un a étudié l’historique à ce sujet.
  • Cet exploit repose sur l’accès aux espaces de noms utilisateur non privilégiés : 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.
  • Lorsqu’on rédige un billet de blog sur la sécurité, on se demande en permanence quel niveau de connaissances préalables supposer chez le lecteur. Définir le public visé et fournir suffisamment de contexte n’est pas facile. Cet article sera un guide utile pour ceux qui commencent leurs recherches.
  • Question sur la raison pour laquelle les espaces de noms utilisateur non privilégiés sont activés par défaut, et pourquoi on donne aux utilisateurs la capacité d’exécuter iptables et autres outils du même type par défaut.
  • Question sur la manière dont de tels exploits restent possibles malgré les mesures de sécurité modernes, comme l’ASLR. Dans le cadre d’un cursus universitaire, j’ai pu constater à quel point le développement d’exploits en conditions réelles est difficile, à travers des travaux pratiques utilisant des binaires comportant divers bugs.
  • J’ai essayé d’exécuter l’exploit sur un système Debian vulnérable, mais il n’y a pas eu d’élévation de privilèges, et à la deuxième exécution le système s’est complètement figé. Il est important d’appliquer le correctif.
  • La configuration actuelle du noyau peut être vérifiée dans les fichiers /boot/config ou /proc/config.gz.
  • Selon Ubuntu, toutes les versions LTS sont affectées, et le problème est corrigé dans les derniers noyaux patchés. Xenial et Bionic concernent les utilisateurs bénéficiant du support étendu.
  • CONFIG_INIT_ON_FREE_DEFAULT_ON empê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.