Developpez.com

Le Club des Développeurs et IT Pro

Un chercheur découvre une faille permettant une élévation de privilèges dans OS X 10.10

Et propose un correctif

Le 2015-07-23 20:48:24, par Stéphane le calme, Chroniqueur Actualités
Stefan Esser, chercheur allemand pour le compte de l’entreprise d’audit de sécurité SektionEins, a révélé la présence d’une vulnérabilité permettant une élévation de privilèges dans OS X, qui affecte les dernières moutures, notamment Yosemite.

La vulnérabilité est liée à la variable d’environnement DYLD_PRINT_TO_FILE qui est en rapport avec l’éditeur de liens dynamiques dydl. Le paramétrage de cette variable d’environnement indique à dydl où conserver les messages d’erreur.

« Quand les garanties habituelles qui sont nécessaires lors de l’ajout d’un support pour de nouvelles variables d’environnement ont été ajoutées à cette variable, l’éditeur dynamique de lien n’a pas été utilisé. Par conséquent, il est possible d’utiliser cette fonctionnalité même avec des binaires SUID racine. C’est dangereux parce que cela permet d’ouvrir et de créer des fichiers arbitraires appartenant à l’utilisateur racine n’importe où dans le système de fichiers. En outre, le fichier de journalisation ouvert n’est jamais fermé et par conséquent son descripteur de fichier fait l’objet d’une fuite dans les processus engendrés par les binaires SUID. Ce qui signifie que les processus enfants des processus SUID racine peuvent écrire dans des fichiers arbitraires appartenant à l’utilisateur racine n’importe où dans le fichier système. Ce qui facilite une élévation des privilèges dans OS X 10.10.x ».

« Quand Apple a changé le code de l’éditeur de liens dynamiques pour OS X 10.10 afin qu’il prenne en charge la nouvelle variable d’environnement DYLD_PRINT_TO_FILE, ils ont ajouté le code suivant directement dans la fonction _main de dydl. Comme vous pouvez le constater, la valeur de la variable d’environnement est directement utilisée comme nom de fichier pour le fichier de journalisation ouvert ou créé ».

Code :
1
2
3
4
5
6
7
8
9
10
11
const char* loggingPath = _simple_getenv(envp, "DYLD_PRINT_TO_FILE");
if ( loggingPath != NULL ) {
        int fd = open(loggingPath, O_WRONLY | O_CREAT | O_APPEND, 0644);
        if ( fd != -1 ) {
                sLogfile = fd;
                sLogToFile = true;
        }
        else {
                dyld::log("dyld: could not open DYLD_PRINT_TO_FILE='%s', errno=%d\n", loggingPath, errno);
        }
}
Il explique que normalement, pour des raisons de sécurité, l’éditeur de liens dynamiques devrait rejeter toutes les variables d’environnement qui lui sont transmises dans le cas où l’accès aux fichiers est restreint. Un processus automatiquement géré lorsque de nouvelles variables d’environnement sont ajoutées à la fonction processDyldEnvironmentVariable(). Curieusement, lorsqu’il s’agit de la variable d’environnement DYLD_PRINT_TO_FILE, elle se trouve directement ajoutée à la fonction _main de dydl.

Il a remarqué qu’Apple a corrigé cette vulnérabilité dans la bêta d’OS X 10.11 en enlevant tout simplement le code de cette nouvelle variable d’environnement de la fonction processDyldEnvironmentVariable(), ce qui a pour conséquence de protéger cette mouture. « Ceci pourrait cependant être le résultat d’un épurement du code et non la résultante d’une action de sécurité. Toutefois, s’il s’agit là du résultat d’un correctif de sécurité, alors Apple a une fois de plus montré combien il ne supporte pas ses versions courantes dès lors qu’une nouvelle bêta est en développement ».

Le chercheur en sécurité a publié une PoC (Proof of Concept) pour illustrer ses propos, donnant même une instruction à exécuter en ligne de commande pour tester si votre système est vulnérable à cette attaque.

Que le constructeur d’iPhone soit au courant de la faille et prépare un correctif ou non, le chercheur a pris les devants et publié sur GitHub le code source d’une extension noyau qui implémente des mesures de protection sous le nom SUIDGuard.

SUIDGuard (GitHub)

Source : SektionEins
  Discussion forum
2 commentaires
  • sinasquax
    Membre régulier
    Intéressant cette découverte, mais après il viendra encore se plaindre qu'on ne le laisse pas déjeuner en paix.
  • polaroid62
    Membre habitué
    Combien de temps mettra t - il avant d'en découvrir une nouvelle ?