Ils ont détecté une vulnérabilité dans firejail qui permettait un accès root au système

Ils ont récemment publié la nouvelle que une vulnérabilité a été identifiée (déjà répertorié sous CVE-2022-31214) dans l'outil de sandboxing de l'application Firejail, il est détaillé que la faille détectée pourrait permettre à un utilisateur local de devenir root sur le système hôte.

Firejail utilise le mécanisme des espaces de noms, AppArmor et le filtrage des appels système (seccomp-bpf) sous Linux pour l'isolation, mais nécessite des privilèges élevés pour configurer une version isolée, qu'il obtient en se liant à l'utilitaire suid root flag ou en s'exécutant avec sudo.

La vulnérabilité est due à une erreur dans la logique de l'option « –join= » », conçu pour se connecter à un environnement isolé déjà en cours d'exécution (similaire à la commande login pour un environnement sandbox) avec l'environnement défini par l'ID du processus qui s'y exécute. Dans la phase de pré-lancement, firejail détecte les privilèges du processus spécifié et les applique au nouveau processus qui rejoint l'environnement avec l'option "–join".

Avant de vous connecter, vérifie si le processus spécifié s'exécute dans l'environnement firejail. Cette vérification évalue l'existence du fichier /run/firejail/mnt/join. Pour exploiter la vulnérabilité, un attaquant peut simuler un environnement firejail fictif non isolé en utilisant l'espace de noms de montage, puis en s'y connectant à l'aide de l'option "--join".

Si la configuration n'active pas le mode d'interdiction d'obtention de privilèges supplémentaires dans les nouveaux processus (prctl NO_NEW_PRIVS), firejail connectera l'utilisateur à un environnement fictif et tentera d'appliquer la configuration de l'espace de noms d'utilisateurs des identifiants des utilisateurs (espace de noms utilisateur) du processus init ( PID 1).

La majeure partie de la logique derrière la fonction de jointure se trouve dans le code source depuis le fichier `src/firejail/join.c`. Les sections critiques du code sont exécutées avec privilèges élevés (UID effectif 0). L'ID du processus passé en tant que commande l'argument de la ligne est inspecté pour déterminer s'il s'agit d'un rconteneur et déterminer certaines de ses propriétés qui Cela s'applique également au nouveau processus d'entrée.

Les principaux critères pour décider de rejoindre ou non le processus cible réussit est la présence d'un fichier dans l'espace de noms de montage de la cible, processus trouvé dans /run/firejail/mnt/join. Cette vérification se fait sur la fFonction `is_ready_for_join()`. Le fichier est ouvert en utilisant lLes drapeaux `O_RDONLY|O_CLOEXEC` et le résultat de la trace `fstat()` doivent répondre aux exigences suivantes :

– le fichier doit être un fichier normal.
– le fichier doit appartenir à l'ID utilisateur 0 (comme vu de l'utilisateur initial
espace de noms).
– le fichier doit avoir une taille de 1 octet.

En conséquence, le processus connecté via "firejail --join" se retrouvera dans l'espace de noms ID utilisateur d'origine de l'utilisateur avec des privilèges inchangés, mais dans un espace de point de montage différent, complètement contrôlé par l'attaquant.

Le shell "joint" résultant vivra désormais sur l'utilisateur initial
espace de noms, tout en conservant les privilèges d'utilisateur normaux d'origine, cependant l'espace de noms de montage sera celui contrôlé par l'attaquant. Car
la configuration nonewprivs n'a pas été appliquée, l'attaquant peut maintenant
exécuter des programmes setuid-root dans cet espace de noms de montage

En particulier, un attaquant peut exécuter des programmes setuid-root dans l'espace du point de montage qu'il a créé, lui permettant, par exemple, de modifier la configuration /etc/sudoers ou les paramètres PAM dans sa hiérarchie de fichiers et d'avoir la possibilité d'exécuter des commandes en tant que root en utilisant sudo ou ses utilitaires.

Enfin, il convient de mentionner qu'un exploit fonctionnel a été développé, testé sur les versions actuelles d'openSUSE, Debian, Arch, Gentoo et Fedora avec l'utilitaire firejail installé.

Le problème a été résolu dans la version 0.9.70 de Firejail. Comme correctif de sécurité, vous pouvez définir la configuration (/etc/firejail/firejail.config) sur "no join" et "force-nonewprivs yes".

Enfin si vous souhaitez en savoir plus, vous pouvez vérifier les détails dans le lien suivant


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données: Miguel Ángel Gatón
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.