
Analyse approfondie de CVE-2026-41651 (Pack2TheRoot), une élévation de privilèges locale dans PackageKit. Comprend la décomposition de la vulnérabilité, la chaîne d'attaque, les IoC et les recommandations d'atténuation.
Élévation de privilèges locale PackageKit (Condition de course TOCTOU)
CVSS v3.1 : 8.8 (ÉLEVÉE) | CWE-367 | Publié : 2026-04-22
Ce dépôt rassemble un rapport d'analyse personnel et des documents de recherche sur la vulnérabilité d'élévation de privilèges locale CVE-2026-41651 (Pack2TheRoot) de PackageKit, divulguée en avril 2026.
| Élément | Contenu |
|---|---|
| ID CVE | CVE-2026-41651 |
| Nom de la vulnérabilité | Pack2TheRoot |
| Logiciel concerné | PackageKit 1.0.2 ~ 1.3.4 |
| Version corrigée | PackageKit 1.3.5 |
| Type d'attaque | Élévation de privilèges locale (LPE) |
| Découvreur | Deutsche Telekom Red Team |
Trois bugs dans pk-transaction.c de PackageKit agissent en combinaison, permettant à un utilisateur local non privilégié d'obtenir les privilèges root.
Bug 1 : Écrasement inconditionnel de cached_transaction_flags lors de l'appel InstallFiles() (Ligne 4036)
↓
Bug 2 : En cas de refus de transition d'état, les indicateurs corrompus persistent en mémoire sans restauration (Ligne 876~881)
↓
Bug 3 : Lecture des indicateurs corrompus au moment de l'exécution de pk_transaction_run() (Ligne 2273~2277)
↓
Résultat : Contournement de l'authentification polkit → installation de paquets arbitraires en tant que root → création d'un bash SUID
InstallFiles(SIMULATE=0x4, dummy) → contournement de l'authentification polkitInstallFiles(NONE=0x0, payload) → corruption des indicateurs (TOCTOU)NOT_AUTHORIZED de polkit, l'installation du paquet est déjà terminée/tmp/.suid_bash → obtention de euid=0(root)| Élément | Contenu |
|---|---|
| Reproduction du PoC | Docker (Ubuntu 24.04.4 LTS) |
| Collecte des IoC | VirtualBox (Ubuntu 22.04.5 LTS, PackageKit 1.2.5) |
| Analyse du code | GitHub — Commit PackageKit 2149735 (vulnérable) / 76cfb675 (corrigé) |
CVE-2026-41651-analysis/
├── README.md
└── CVE-2026-41651_분석보고서.docx # Rapport d'analyse détaillé
Lors d'une tentative d'attaque, les modèles de journaux suivants sont enregistrés sur le système.
# Commande de détection
journalctl -u packagekit | grep -i "assertion\|emitted\|failed"
PackageKit[PID]: pk_backend_job_emit: assertion 'PK_IS_BACKEND_JOB(job)' failed
PackageKit[PID]: g_signal_emit_valist: assertion 'G_TYPE_CHECK_INSTANCE(instance)' failed
PackageKit[PID]: GLib-Object:CRITICAL: g_object_unref: assertion 'G_IS_OBJECT(object)' failed
PackageKit[PID]: backend job failed
PackageKit[PID]: emit transaction failed
PackageKit[PID]: daemon stop ← Crash
PackageKit[PID]: daemon start ← Redémarrage automatique
# Détection des fichiers SUID
find /tmp -perm -4000 -type f 2>/dev/null
# → Si /tmp/.suid_bash existe, une réponse immédiate est nécessaire
# Ubuntu / Debian
sudo apt update && sudo apt upgrade packagekit
# RHEL / Fedora
sudo dnf update PackageKit
# Vérification de la version (vulnérable si ≤ 1.3.4)
dpkg -l | grep -i packagekit # Debian/Ubuntu
rpm -qa | grep -i PackageKit # RHEL/Fedora
# Vérification de l'état du démon
systemctl status packagekit
# Désactivation de PackageKit
sudo systemctl disable --now packagekit
⚠️ La désactivation rendra les outils de gestion de paquets graphiques tels que GNOME Software inutilisables
Ce dépôt a été rédigé à des fins de recherche en sécurité et d'apprentissage.
L'exploitation de vulnérabilités et l'accès non autorisé à des systèmes peuvent entraîner des poursuites judiciaires ; tous les tests ont été effectués dans un environnement isolé appartenant à l'auteur.
| Date | Contenu |
|---|
| 2026-04-08 | Deutsche Telekom Red Team → Premier rapport à Red Hat/PackageKit |
| 2026-04-10 | Réception par les mainteneurs de PackageKit et confirmation de la reproduction |
| 2026-04-13 | Rédaction d'un correctif privé préliminaire |
| 2026-04-15 | Partage de la vulnérabilité avec Canonical |
| 2026-04-19 | Notification privée aux fournisseurs de distributions |
| 2026-04-22 | Publication de PackageKit 1.3.5, attribution du CVE, divulgation publique |