En avril dernier, [TRINITY], le fuzzer d'appel système Linux, met en évidence une mauvaise vérification des bornes d'une valeur numérique normalement non signée qui est considérée comme signée dans le système perf_events [PATCH]. Cette erreur permet l'obtention des privilèges root sur un système utilisant un noyau Linux dont la version est comprise entre 2.6.37 et 3.8.8 (incluses) ainsi qu'à partir de la version 2.6.32 pour les systèmes CentOS. Cet article a pour but de présenter l'exploitation de cette vulnérabilité sur les architectures x86, x86_64 et ARM.
1. Introduction
Le système perf_events a été implémenté dans le noyau Linux à partir de la version 2.6.31. Il permet de faire du profiling et repose sur les hardwares performance counters. Il s'agit de registres spéciaux présents sur les CPU modernes, qui ont pour but de surveiller et compter les événements hardware comme le nombre d'instructions exécutées, les branches mal prédites ou les échecs d’accès au cache, mais également les événements software comme les tracepoints ou les context-switch.
Étonnamment, il est activé par défaut sur de nombreuses distributions comme Ubuntu, CentOS, ou encore sur différents smartphones Android, bien qu'il ne soit pas nécessaire à la grande majorité des utilisateurs.
Afin de savoir si un système est compilé avec perf_events, il est possible de vérifier son fichier de configuration, ou la présence de symboles liés à perf_events :
# grep CONFIG_PERF_EVENTS /boot/config-`uname...
- 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