
Exploit du noyau Linux
Escalade de privilèges sous Linux exploitant l'appel système waitid. Cet exploit vous est présenté par @XeR_0x2A et @chaign_c de HexpressoTeam à des fins éducatives uniquement.
Le bogue a été introduit le 2017-05-21 et corrigé le 2017-10-09 ; 4.14.0-rc4+ est connu comme vulnérable.
Si vous avez un niveau débutant/intermédiaire en écriture d'exploits, nous vous encourageons à l'exploiter vous-même avant de lire notre implémentation. C'est un très bon exercice avec une primitive d'exploit simple (écriture arbitraire dans la mémoire du noyau accessible en écriture).
Nous lançons également un défi à @LiveOverflow pour qu'il essaie.
Voici la description :
oss-security :
Bonjour,Chris Salls a découvert que lorsque l'appel système waitid() dans le noyau Linux
v4.13 a été refactorisé, il a accidentellement cessé de vérifier que
l'argument entrant pointait vers l'espace utilisateur. Cela a permis à des
attaquants locaux d'écrire directement dans la mémoire du noyau, ce qui pourrait mener à
une escalade de privilèges.Introduit par ce commit :
https://git.kernel.org/linus/4c48abe91be03d191d0c20cc755877da2cb35622Corrigé avec ce commit dans l'arbre principal :
https://git.kernel.org/linus/96ca579a1ecc943b75beba58bebb0356f6cc4b51Cela devrait être corrigé dans la version -stable (future v4.13.7) bientôt :
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/log/?h=linux-4.13.yMerci,
waitid :
waitid -- attendre qu'un processus enfant change d'état.
int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options);
Le noyau ne vérifie pas si infop est un pointeur du noyau ou de l'espace utilisateur, donc nous pouvons écraser la mémoire de n'importe quelle page mémoire du noyau avec des permissions d'écriture. La partie amusante est que nous ne contrôlons que partiellement ce qui est écrit.
Il y a plus d'un millier de façons d'exploiter cela. Nous avons décidé de transformer cette primitive d'écriture en un déréférencement de pointeur nul. Nous avons écrasé la variable have_canfork_callback dans la section .BSS du noyau. Mettre cette variable à autre chose que 0 (vrai) entraînera l'appel d'un callback non défini (nul) "appelé sur une nouvelle tâche avant que le processus ne soit exposé".
Merci à Chris Salls et @kees_cook pour avoir partagé le CVE.
Premier exploit "réel" du noyau Linux de @XeR_0x2A et @chaign_c de HexpressoTeam.
2017-10-22