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
CVE-2026-41651 — Preuve de concept d'exploitation pour CVE-2026-41651, une élévation de privilèges locale TOCTOU dans PackageKit, avec analyse technique, logique de détection et recommandations de remédiation. | Kitploit
Outils/GitHubGitHub/baph00met/cve-2026-41651
Escalade de PrivilègesAnalyse des VulnérabilitésExploitationTests d'IntrusionRed TeamingLabs et Pratique
GitHubbaph00met/cve-2026-41651

CVE-2026-41651

Preuve de concept d'exploitation pour CVE-2026-41651, une élévation de privilèges locale TOCTOU dans PackageKit, avec analyse technique, logique de détection et recommandations de remédiation.

Voir le dépôt
1735il y a 4 moisPas encore vérifié

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

CVE-2026-41651 — Élévation de privilèges locale TOCTOU dans PackageKit

Classification : Artefact d'évaluation Purple Team
Usage autorisé uniquement. Ce document et le script de test qui l'accompagne sont destinés exclusivement à la validation de sécurité interne sur des systèmes pour lesquels une autorisation écrite a été obtenue.


Preuve d'exploitation

Preuve d'exploitation


Table des matières

  1. Présentation de la vulnérabilité
  2. Analyse technique
  3. Description du script de test
    • Comportement
    • Prise en charge des environnements durcis
    • Compatibilité
  4. Indicateurs de compromission
    • Système de fichiers
    • Processus et exécution
    • Activité D-Bus
    • Modèles de journaux d'audit
    • Artefacts du gestionnaire de paquets
    • Artefacts d'élévation de privilèges
  5. Logique de détection
  6. Systèmes et versions concernés
  7. Remédiation
  8. Références

Présentation de la vulnérabilité

PackageKit est une couche d'abstraction D-Bus pour la gestion de paquets système, présente par défaut sur les environnements de bureau GNOME sous Debian, Ubuntu, Fedora, RHEL, SUSE et Arch Linux. Comme il assure la médiation des opérations de paquets privilégiées au nom des utilisateurs non privilégiés, une faille dans son flux d'autorisation a un impact root à l'échelle du système.


Analyse technique

Cause racine

pk-transaction.c (avant 1.3.5) n'appliquait pas de garde d'état sur la ré-invocation des méthodes d'action. Un client D-Bus pouvait appeler InstallFiles (ou d'autres méthodes d'action) plusieurs fois sur le même objet de transaction après que celle-ci était déjà passée hors de l'état PK_TRANSACTION_STATE_NEW.

Chaîne d'attaque

root@kitploit:~
Attaquant (non privilégié)
  │
  ├─① CreateTransaction()          → PackageKit renvoie le chemin de l'objet de transaction (tid)
  │
  ├─② InstallFiles(tid, FLAG_SIMULATE=4, [dummy.pkg])
  │       PackageKit met en file une vérification d'autorisation polkit pour dummy.pkg.
  │       Aucune installation n'a lieu pour l'instant — SIMULATE signifie essai à blanc uniquement.
  │
  ├─③ InstallFiles(tid, FLAG_NONE=0, [payload.pkg])   ← fenêtre TOCTOU
  │       Ré-invoque sur le même tid avant la résolution de l'autorisation.
  │       Les versions vulnérables écrasent les paramètres mis en file avec payload.pkg.
  │
  └─④ polkit accorde l'autorisation (approbation utilisateur ou autorisation automatique)
          packagekitd installe payload.pkg en tant que root.
          Script postinst/post de payload : install -m 4755 /bin/bash /tmp/.suid_bash
          L'attaquant exécute /tmp/.suid_bash -p  →  shell root.

Pourquoi la course est gagnée

Les étapes ② et ③ sont envoyées comme appels D-Bus asynchrones non bloquants sur la même connexion et vidées dans une seule écriture. Les deux messages arrivent à packagekitd avant qu'il ne puisse traiter ② et faire avancer la machine à états, laissant la fenêtre TOCTOU ouverte. Le correctif dans 1.3.5 ajoute une vérification d'état explicite qui renvoie PK_TRANSACTION_ERROR_INVALID_STATE sur toute ré-invocation après PK_TRANSACTION_STATE_NEW.


Description du script de test

Fichier : cve-2026-41651-purpleteam.py
Langage : Python 3
Dépendances : python3-gi (introspection GObject / liaisons GLib/Gio)

Objectif

Démontre l'exploitabilité de CVE-2026-41651 sur un système de test préparé dans le but de :

  • Valider si la version de PackageKit installée est vulnérable
  • Générer une télémétrie IOC réaliste pour le réglage SIEM/EDR
  • Tester la couverture de détection avant et après l'application du correctif

Comportement

Prise en charge des environnements durcis

Les systèmes durcis par défaut peuvent bloquer l'exploit à deux points indépendants. Le script gère les deux automatiquement.

1. umask restrictif (027 / 077)

Un umask hérité du processus de 027 ou 077 fait que mkdir() produit des répertoires 750 ou 700. dpkg-deb et rpmbuild doivent tous deux parcourir l'arborescence de construction complète — si un répertoire est illisible, la construction échoue silencieusement.

Correctif appliqué : os.umask(0o022) est appelé au démarrage avant la création de tout fichier ou répertoire. De plus, chaque répertoire et fichier de l'arborescence de construction reçoit un chmod explicite immédiatement après sa création (0o755 pour les répertoires et scripts, 0o644 pour les fichiers de données), garantissant ainsi les permissions correctes quel que soit l'umask hérité.

2. Indicateurs de montage nosuid / noexec sur /tmp

IndicateurEffet sur l'exploit
nosuidLe noyau supprime silencieusement le bit SUID de tout fichier stocké sur ce système de fichiers — le bash copié ne devient jamais root
noexecLe binaire SUID ne peut pas être exécuté du tout

Correctif appliqué : Au démarrage, _find_suid_dir() lit /proc/mounts et teste les répertoires candidats par ordre de préférence jusqu'à ce qu'il en trouve un dont le système de fichiers n'a aucun des deux indicateurs. Le chemin résolu est ensuite intégré dans le script post-installation de la charge utile et utilisé pour l'interrogation et l'exécution.

Si tous les candidats sont bloqués, le script se termine avec une erreur claire plutôt que d'échouer silencieusement.

Compatibilité

Famille de distributionsOutil de paquetsTesté
Debian / Ubuntudpkg-deb✓

Indicateurs de compromission

Les IOC sont listés du niveau générique/infrastructure jusqu'aux artefacts spécifiques au script. Les détections basées sur les indicateurs génériques détecteront cette CVE quel que soit le variant de PoC utilisé.

Système de fichiers

Processus et exécution

Activité D-Bus

Modèles de journaux d'audit

Activez avec : auditctl -a always,exit -F arch=b64 -S all -F path=/usr/bin/packagekitd
Ou utilisez les règles ci-dessous dans /etc/audit/rules.d/ :

root@kitploit:~
# Détecter la création de fichiers SUID dans tous les répertoires de dépôt candidats
-a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -F a2&04000 -F dir=/tmp -k suid_drop
-a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -F a2&04000 -F dir=/var/tmp -k suid_drop
-a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -F a2&04000 -F dir=/dev/shm -k suid_drop

# Détecter dpkg-deb / rpmbuild par un non-root
-w /usr/bin/dpkg-deb -p x -k pkg_build_nonroot
-w /usr/bin/rpmbuild -p x -k pkg_build_nonroot

# Détecter l'exécution de bash SUID depuis tout répertoire de dépôt candidat
-a always,exit -F arch=b64 -S execve -F dir=/tmp -F uid!=0 -F euid=0 -k priv_esc_drop
-a always,exit -F arch=b64 -S execve -F dir=/var/tmp -F uid!=0 -F euid=0 -k priv_esc_drop
-a always,exit -F arch=b64 -S execve -F dir=/dev/shm -F uid!=0 -F euid=0 -k priv_esc_drop

Artefacts du gestionnaire de paquets

Artefacts d'élévation de privilèges


Logique de détection

Pseudo-règle SIEM (Générique — couvre tous les variantes de CVE-2026-41651)

root@kitploit:~
(
  event.category == "process"
  AND process.name IN ("dpkg-deb", "rpmbuild")
  AND process.user.id != "0"
  AND NOT process.parent.name IN ("apt", "apt-get", "dpkg", "rpm", "dnf", "yum", "zypper", "mock", "koji")
)
OR
(
  event.category == "file"
  AND file.path LIKE "/tmp/%" OR file.path LIKE "/var/tmp/%" OR file.path LIKE "/dev/shm/%"
  AND file.owner == "root"
  AND (file.mode LIKE "04%")
)
OR
(
  event.category == "process"
  AND process.name == "bash"
  AND process.real_user.id != "0"
  AND process.effective_user.id == "0"
  AND NOT process.parent.name IN ("sudo", "su", "sshd", "login", "pam")
)

Chaîne comportementale EDR

root@kitploit:~
packagekitd
  └─ sh / bash  (cwd ou argument correspond à /tmp, /var/tmp, /dev/shm ou $HOME)
       └─ install / cp / chmod  (cible avec SUID + propriétaire root)

Signalez la chaîne complète. Chaque étape individuelle seule peut être bénigne ; la relation parent-enfant à travers packagekitd vers une commande définissant SUID est à haute fidélité quel que soit le répertoire de dépôt sélectionné. Élargissez les règles basées sur les chemins pour couvrir les quatre candidats.


Systèmes et versions concernés

Vérifiez la version installée : pkcon backend-details ou packagekit --version
Vulnérable si la version signalée est ≤ 1.3.4.


Remédiation

Principal : Mettez à niveau PackageKit vers 1.3.5 ou appliquez le rétroportage spécifique au fournisseur.

root@kitploit:~
# Debian / Ubuntu
apt update && apt install --only-upgrade packagekit

# Fedora / RHEL
dnf upgrade packagekit

# SUSE
zypper update packagekit

Atténuations (si le correctif n'est pas immédiatement possible) :


Références


Généré : 2026-04-24 | Mis à jour : 2026-04-25 | Évaluation Purple Team | Usage interne uniquement

Télécharger l’outil
ChampValeur
ID CVECVE-2026-41651
CWECWE-367 — Condition de concurrence TOCTOU (Time-of-check Time-of-use)
ComposantPackageKit (packagekitd, service D-Bus)
Versions concernéesPackageKit ≤ 1.3.4
Corrigé dansPackageKit 1.3.5
ImpactÉlévation de privilèges locale → root
Vecteur d'attaqueLocal / D-Bus (session utilisateur non privilégiée)
Divulgué2026-04-22 (Deutsche Telekom Red Team)
Avis de sécuritéGHSA-f55j-vvr9-69xv
Commit de correction76cfb675fb31acc3ad5595d4380bfff56d2a8697
PhaseAction
ConfigurationSonde /proc/mounts pour sélectionner un répertoire de dépôt SUID/exec-capable, définit umask(022), applique un chmod explicite sur tous les artefacts de construction, puis construit un paquet factice et un paquet de charge utile dans /tmp
ExploitationOuvre une connexion D-Bus système, crée une transaction PackageKit, déclenche la course à deux appels
Charge utileLe script post-installation du paquet copie /bin/bash vers <drop_dir>/.suid_bash avec le mode 04755, propriétaire root. Le répertoire de dépôt est résolu au moment de l'exécution (voir Prise en charge des environnements durcis)
ÉlévationInterroge la présence du binaire SUID (délai de 90 s), puis execl dedans avec -p pour un shell root
NettoyageSupprime les fichiers temporaires .deb/.rpm à la sortie (succès ou échec)
PrioritéCandidatDurcissement typique
1/var/tmpPorte rarement nosuid/noexec ; survit aux redémarrages
2/dev/shmtmpfs, généralement permissif ; vidé au redémarrage
3/tmpSouvent durci sur les systèmes CIS/STIG
4$HOMEDernier recours ; toujours accessible en écriture par l'utilisateur
RHEL / Fedora
rpmbuild
✓
SUSE / openSUSErpmbuild✓
IOCChemin / ModèleNotes
Binaire SUID dans un répertoire accessible en écriture mondiale<drop_dir>/.suid_bash — le répertoire de dépôt est /var/tmp, /dev/shm, /tmp ou $HOME selon les indicateurs de montageLe script sélectionne le premier répertoire sans nosuid/noexec ; élargissez les détections pour couvrir les quatre candidats
Fichier de paquet transitoire dans /tmp/tmp/*.deb, /tmp/*.rpmConstruit par un utilisateur non privilégié ; les opérations de paquets légitimes utilisent /var/cache ou des chemins de téléchargement
Arborescence de construction dpkg/tmp/pkbuild_*, /tmp/build_*Répertoires de préparation pour dpkg-deb -b
Arborescence rpmbuild dans /tmp/tmp/rpmbuild_*Répertoires de préparation pour rpmbuild invoqué en dehors de ~/rpmbuild
Script postinst / %post dans /tmp/tmp/*/DEBIAN/postinst, /tmp/*/SPECS/*.specLes scripts qui copient ou chmod des binaires système sont à haute confiance
IOCDétail
dpkg-deb lancé par un processus non-root, non-aptLe parent est un processus Python/shell utilisateur, pas apt, dpkg ou unattended-upgrades
rpmbuild lancé par un utilisateur non privilégiéSans parent lié à l'empaquetage (mock, koji, exécuteur CI), c'est anormal
packagekitd lançant /bin/sh ou /bin/bash depuis un chemin /tmppackagekitd exécute les scripts postinst ; le chemin source dans /tmp est l'anomalie
Processus bash où UID ≠ EUIDExécution SUID ; EUID=0, UID=<attaquant>
Invocation bash -pL'indicateur -p active le mode privilégié lorsque SUID est défini — rarement utilisé légitimement
Ascendance de processus .suid_bash de courte duréeLe grand-parent est packagekitd, le parent est le shell de l'attaquant
IOCDétail
org.freedesktop.PackageKit.Transaction.InstallFiles appelé deux fois sur le même chemin d'objetLes deux appels arrivent à quelques millisecondes d'intervalle ; les clients légitimes appellent une fois par transaction
FLAG_SIMULATE (4) suivi immédiatement de FLAG_NONE (0) sur le même tidCette séquence n'a aucun cas d'utilisation légitime
Modèle CreateTransaction → double InstallFiles rapideDétectable via le moniteur D-Bus (dbus-monitor --system) ou les règles d'audit dbus
InstallFiles avec un chemin de fichier sous /tmpLes installateurs de paquets GUI légitimes (GNOME Software, Discover) utilisent des chemins dans $HOME ou /var/cache
IOCDétail
Paquet nommé pk-dummy-* ou pk-payload-* dans l'historique dpkg/rpmSpécifique au script mais les variantes utiliseront des noms différents
Paquet installé depuis un fichier local (/tmp/*.deb ou /tmp/*.rpm)dpkg -l ou rpm -qa --last — recherchez les paquets sans origine de dépôt
Paquet installé sans journal des modifications / description videLes paquets fabriqués utilisent des métadonnées minimales ; dpkg -s <pkg> ou rpm -qi <pkg>
Paquet supprimé immédiatement après l'installation ou jamais visible dans la base de données des paquetsLes tentatives d'exploitation échouées peuvent laisser un état partiel
Entrées du journal des transactions packagekit pour les installations de fichiers locaux/var/log/PackageKit/transactions.db ou entrées journald packagekitd
IOCDétail
.suid_bash dans tout répertoire de dépôt candidatLe chemin de dépôt est choisi au moment de l'exécution parmi /var/tmp, /dev/shm, /tmp, $HOME selon les indicateurs de montage — vérifiez les quatre : find /var/tmp /dev/shm /tmp $HOME -uid 0 -perm -4000 2>/dev/null
Tout fichier appartenant à root avec le bit SUID dans un répertoire accessible en écriture utilisateurDevrait toujours être vide sur les systèmes propres
Arborescence de processus bash avec euid=0 et aucun ancêtre PAM / sudo / suIndique un chemin d'exécution SUID plutôt qu'une transition de privilège légitime
Octroi polkit pour org.freedesktop.packagekit.package-install à un utilisateur non administrateurInattendu si l'utilisateur n'est pas dans le groupe sudo / wheel
DistributionPackageKit par défautVulnérableVersion corrigée disponible
Ubuntu 24.04 LTS1.3.xOuiVia apt upgrade
Ubuntu 22.04 LTS1.2.xOuiRétroportage en cours
Debian 12 (Bookworm)1.2.xOuiSuivi de sécurité en attente
Fedora 411.3.xOuidnf upgrade packagekit
RHEL 9 / CentOS Stream 91.2.xOuiRHSA en attente
SUSE Linux Enterprise 151.1.xProbableAvis SUSE en attente
Arch Linux1.3.xOuiAUR / pacman mis à jour
AtténuationCommande / ConfigurationMise en garde
Désactiver le service PackageKitsystemctl disable --now packagekitdCasse les mises à jour GUI GNOME Software / Discover
Restreindre l'accès D-BusAjouter une règle deny dans /etc/dbus-1/system.d/org.freedesktop.PackageKit.conf pour les utilisateurs non privilégiésPeut casser les outils de paquets légitimes destinés aux utilisateurs
Durcissement polkitDéfinir org.freedesktop.packagekit.package-install sur auth_admin (exiger toujours le mot de passe administrateur)Réduit la commodité mais rétrécit la surface d'attaque
Surveillance d'auditDéployer les règles d'audit de la section Modèles de journaux d'auditDétectif uniquement, pas préventif
RessourceLien
Divulgation OSS-Securityhttps://www.openwall.com/lists/oss-security/2026/04/22/6
Avis de sécurité GitHubGHSA-f55j-vvr9-69xv
Commit de correctionhttps://github.com/PackageKit/PackageKit/commit/76cfb675fb31acc3ad5595d4380bfff56d2a8697
Version PackageKit 1.3.5https://github.com/PackageKit/PackageKit/releases/tag/v1.3.5
Référence PoC publiquehttps://github.com/CipherCloak/CVE-2026-41651
CWE-367https://cwe.mitre.org/data/definitions/367.html
Documentation polkithttps://www.freedesktop.org/software/polkit/docs/latest/