Une technique pour exploiter une vulnérabilité dans le sous-système tty du noyau Linux a été révélée

Les chercheurs de l'équipe Google Project Zero ont publié une méthode d'exploitation d'une vulnérabilité (CVE-2020-29661) dans l'implémentation du gestionnaire ioctl TIOCSPGRP du sous-système tty du noyau Linux, et ont également examiné en détail les mécanismes de protection qui pourraient bloquer une telle vulnérabilités.

Le bug à l'origine du problème a été corrigé dans le noyau Linux le 3 décembre de l'année dernière. Le problème apparaît dans les noyaux jusqu'à la version 5.9.13, mais la plupart des distributions ont résolu le problème dans les mises à jour des packages du noyau proposées l'année dernière (Debian, RHEL, SUSE, Ubuntu, Fedora, Arch). Une vulnérabilité similaire (CVE-2020-29660) a été trouvée simultanément dans l'implémentation de l'appel ioctl TIOCGSID, mais elle a également déjà été corrigée partout.

Le problème est dû à une erreur lors de la définition des verrous, conduisant à une condition de concurrence critique dans le code drivers/tty/tty_jobctrl.c, qui a été utilisé pour créer des conditions d'utilisation après libération exploitées depuis l'espace utilisateur via des manipulations ioct en appelant TIOCSPGRP. Un exploit fonctionnel a été démontré pour l'élévation de privilèges sur Debian 10 avec le noyau 4.19.0-13-amd64.

Dans le même temps, l'article publié ne se concentre pas tant sur la technique de création d'un exploit fonctionnel, mais plutôt sur les outils existants dans le noyau pour se protéger contre de telles vulnérabilités. La conclusion n'est pas rassurante ; des méthodes telles que la segmentation de la mémoire dans le tas et le contrôle de l'accès à la mémoire après sa libération ne sont pas utilisées en pratique, car elles entraînent une diminution des performances, et la protection basée sur CFI (Control Flow Integrity), qui bloque les exploits dans les dernières étapes d’une attaque, doit être amélioré.

Lorsque l’on considère ce qui ferait une différence à long terme, l’utilisation d’analyseurs statiques avancés ou l’utilisation de langages sécurisés en mémoire tels que les dialectes Rust et C avec des annotations riches (telles que Checked C) pour vérifier état pendant la phase de construction.verrous, objets et pointeurs. Les méthodes de protection incluent également l'activation du mode panic_on_oops, le passage des structures du noyau en mode lecture seule et la restriction de l'accès aux appels système à l'aide de mécanismes tels que seccomp.

Source: opennet.ru

Ajouter un commentaire