Vous n'êtes pas identifié(e).
Pages : 1
J'ai vérifié si j'avais le paquet Polkit
j'ai ensuite vérifié si j'avais le fichier exp.c et là je n'ai rien trouvé
Ma question c'est, comment ça se fait que je n'ai pas ce fichier étant donné que c'est logiquement un logiciel déjà installé ou est-ce qu'il peut avoir un autre nom ?
Dernière modification par totoZero7 (26-01-2022 22:34:54)
Hors ligne
Dernière modification par Tawal (26-01-2022 21:57:20)
Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
Dernière modification par totoZero7 (27-01-2022 14:57:45)
Hors ligne
Dernière modification par ubub (27-01-2022 00:40:04)
En ligne
Hors ligne
Unixien?
Compiler son kernel!
Hors ligne
J'avais commencé à détailler à la main la faille...[]
Tu peux toujours continuer à le faire si ça te plaît car les liens cités sont en anglais et c'est un blocage pour beaucoup de personnes.
Merci pour le retour à tous
Hors ligne
Explication du code dans le cadre de la faille, c'est à dire lancé avec argc = 0
1) Voir ligne 534 si argc vaut 0 alors 1 est quand même assigné à n au niveau du for, bien qu'on entre pas dedans vu que la condition de boucle n'est pas validée.
2) Voir ligne 612, g_strdup va tenter de dupliquer la chaîne de caractère étant dans argv au rang n
3) Problème : voir 1) vaut 1 dans le for et donc en gros il va accéder à la mémoire adjacente à argv dont il n'a en théorie pas le droit de lire et va tenter de le lire comme chaîne de caractères
(vu que argv[0] vaut NULL et que c'est la fin du tableau)
Souvent en C ça fait crasher le programme mais ici à coté il y a de la mémoire allouée pour la suite donc ça ne crashe pas, et ça va juste illégalement lire ce qu'il y a à coté.
4) Souvent dans la mémoire adjacente à argv il y a envp, l'environnement (tableau comme argv avec délimiteur NULL), c'est généralement la façon dont fonctionne l'exécution des programmes sous linux et la plupart des os.
5) Du coup ensuite en 632 il cherche le programme dans le PATH et ligne 639 il assigne s (le binaire trouvé et son path complet) à argv[n] (et donc on assigne la nouvelle de chaine de charactère à l'addresse de la première variable d'environnement)
Chose illégale également (enfin par illégal, ici je parle dans la logique du programme bien évidemment)
Mise en situation :
En gros par exemple avec value en tant que première var d'env (oui je vole honteusement l'exemple de l'article que j'explique)
g_strdup lis value dans l'environnement et va le chercher dans le PATH, ensuite met le chemin complet de value dans l'environnement à nouveau par dessus value et potentiellement un peu de la suite.
Tout ceci ne permet pas directement l'exécution de value, mais l'injection de nouvelles variable d'environnement, j'y reviens après.
Appartée sur les shared librairies et mise en contexte :
Explication rapide de la base des bases des shared libraries.
En gros ce sont des bibliothèques mais au lieu d'être compilées avec et dans le binaire (compiler c'est transformer du code en binaire dans un format exécutable)
Elles sont à l'extérieur dans des fichiers .so sous linux (équivalent des .dll sous windows pour faire simple pour ceux qui connaissent) chargées au runtime.
Il est possible d'overload celles configurées par ldconfig pour être chargées par default via la variable d'environnement LD_PRELOAD (variable qui permet de précharger des librairies avant d'autres).
Sauf que les programmes lancés en setuid normalement ignorent LD_PRELOAD au lancement car c'est un risque assez grand de directement permettre l'exécution de librairies frauduleuses à la place de celles de base.
Retour à l'explication et mise en situation :
Maintenant vous voyez peut-être ou je veux (et l'article aussi) en venir.
En mettant dans le PATH un emplacement valide et un nom d'exécutable valide présent dans le PATH il y a moyen de placer LD_PRELOAD à l'addresse de la première variable d'environnement (espace illégal ligne 639) et donc d'injecter des librairies frauduleuses avec les droits suid.
Cette librairie fabriquée par l'attaquant peut exécuter n'importe quoi en root (vu que l'owner de pkexec est root et qu'il y a le suid) et donc shell, backdoor, etc.....
Patch :
- Temporairement disable le setuid mais c'est pas viable au long terme (car en gros ça sabote son intérêt)
- Mise à jour dans les prochaines semaines
- patch script systemtap vu sur le site de redhat qui empêche pour polkit l'exécution avec 0 arguments
- Lien du patch sur les sources officielles déjà pending
Conclusion :
Pour résumer un SUID + une erreur dans le code permettant de l'exécution, ça fait des chocapics ça permet une élévation de privilège à root
N'hésitez pas à poser des questions sur des imprécisions/ambiguïté pour que j'édite mon post pour l'adapter au mieux aux débutants.
Si vous observez une erreur n'hésitez pas à me le remonter.
Aussi c'est un peu dense mais bon j'ai édité, coloré et divisé l'explication pour la rendre plus digeste.
Pour les pressés, bah il y a un TLDR donc pas de lézard.
Pour plus de détails n'hésitez pas à lire le troisième lien de mon post précédent.
Dernière modification par naguam (27-01-2022 15:17:52)
Unixien?
Compiler son kernel!
Hors ligne
ps: l'installation de buster très récente , moins d'une semaine
Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
Pages : 1