Pièce logicielle qui a accompagné les deux dernières décennies, le noyau Linux est un système relativement complet qui dispose d’un allocateur de mémoire dynamique. Comme tous les logiciels classiques, le noyau est ainsi régulièrement sujet à des vulnérabilités de type Use-After-Free via cet allocateur.
L’exploitation en mode noyau peut sembler de prime abord moins accessible que son équivalent dans l’espace utilisateur. D’une part, le système d’exploitation gère l’ensemble des flots d’exécution, donc son état interne est plus volatile que celui d’un simple programme. D’autre part, la moindre erreur provoque un plantage sans appel du système.
En revanche, Linus Torvalds a longtemps considéré les mesures de protection contre l’exploitation comme un cache-misère : s’il y a exploitation, c’est qu’une faille existe. La seule issue est donc de corriger le bogue. Nul besoin de coupe-feu lorsque rien ne brûle !
L’objectif de cet article est de présenter les évolutions au cours des ans d’un pan de surface exploitable au sein du noyau Linux, via les mécanismes d’allocation de mémoire, et d’illustrer le propos avec l’exploitation d’un CVE récent.
1. L’allocateur de mémoire
1.1 Genèse et principes
Les bases de...
- Accédez à tous les contenus de Connect en illimité
- Découvrez des listes de lecture et des contenus Premium
- Consultez les nouveaux articles en avant-première