
Reproduction de la vulnérabilité du noyau CVE-2017-5123 permettant une escalade de privilèges locale via une écriture mémoire dans l'appel système waitid, démontrée avec une évasion de conteneur Docker sur Linux 4.13.
Remarque : Le code dans ce dépôt est destiné à démontrer l'isolation des technologies de bac à sable (sandbox) sécurisées pour pods, telles que kata containers, et n'a pas l'intention d'attaquer des plateformes.
echo 0 > /proc/sys/kernel/kptr_restrict
cat /proc/kallsyms
(gdb) p &(((struct task_struct *)0)->fs)
(gdb) p &(((struct task_struct *)0)->parent)
(gdb) p &(((struct fs_struct *)0)->root)
L'implémentation de waitid dans les noyaux amont ne restreignait pas la destination cible pour copier les résultats d'informations. Cela peut permettre aux utilisateurs locaux d'écrire dans la mémoire du noyau autrement protégée, ce qui peut conduire à une escalade de privilèges.
Le bogue a été introduit le 2017-05-21 et corrigé le 2017-10-09.
Cette CVE a déjà été corrigée dans les versions ultérieures de la branche 4.13 et les noyaux principaux plus récents. Cependant, il peut exister des CVE similaires permettant une escalade de privilèges. Cette CVE est en fait assez similaire à la célèbre dirty cow, CVE-2016-5195.
CVE-2017-5123.c utilise cette vulnérabilité pour modifier la valeur de /proc/sys/vm/mmap_min_addr. Ensuite, il laisse le noyau Linux appeler un shellcode pour obtenir la permission d'accès aux fichiers du root de l'hôte.