
Analisi approfondita di CVE-2026-41651 (Pack2TheRoot), un'escalation dei privilegi locale in PackageKit. Include la scomposizione della vulnerabilità, la catena di attacco, gli IoC e le linee guida per la mitigazione.
Escalation dei privilegi locali in PackageKit (Condizione di gara TOCTOU)
CVSS v3.1: 8.8 (ALTA) | CWE-367 | Pubblicato: 2026-04-22
Questo repository raccoglie un rapporto di analisi personale e materiale di ricerca sulla vulnerabilità di escalation dei privilegi locali CVE-2026-41651 (Pack2TheRoot) in PackageKit, resa pubblica nell'aprile 2026.
| Voce | Contenuto |
|---|---|
| ID CVE | CVE-2026-41651 |
| Nome vulnerabilità | Pack2TheRoot |
| Software interessato | PackageKit 1.0.2 ~ 1.3.4 |
| Versione patch | PackageKit 1.3.5 |
| Tipo di attacco | Escalation dei privilegi locali (LPE) |
| Scopritore | Deutsche Telekom Red Team |
Tre bug in pk-transaction.c di PackageKit agiscono in combinazione, consentendo a un utente locale non privilegiato di ottenere privilegi root.
Bug 1: sovrascrittura incondizionata di cached_transaction_flags alla chiamata di InstallFiles() (Riga 4036)
↓
Bug 2: in caso di rifiuto della transizione di stato, i flag corrotti restano in memoria senza rollback (Riga 876~881)
↓
Bug 3: lettura dei flag corrotti al momento dell'esecuzione di pk_transaction_run() (Riga 2273~2277)
↓
Risultato: bypass dell'autenticazione polkit → installazione di pacchetti arbitrari come root → creazione di una bash SUID
InstallFiles(SIMULATE=0x4, dummy) → bypass dell'autenticazione polkitInstallFiles(NONE=0x0, payload) → corruzione dei flag (TOCTOU)NOT_AUTHORIZED da polkit, il pacchetto è già stato installato/tmp/.suid_bash → ottenimento di euid=0(root)| Voce | Contenuto |
|---|---|
| Riproduzione PoC | Docker (Ubuntu 24.04.4 LTS) |
| Raccolta IoC | VirtualBox (Ubuntu 22.04.5 LTS, PackageKit 1.2.5) |
| Analisi del codice | GitHub — commit PackageKit 2149735 (vulnerabile) / 76cfb675 (patch) |
CVE-2026-41651-analysis/
├── README.md
└── CVE-2026-41651_rapporto_analisi.docx # Rapporto di analisi dettagliato
Durante un tentativo di attacco, i seguenti pattern di log vengono registrati sul sistema.
# Comandi di rilevamento
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 ← riavvio automatico
# Rilevamento file SUID
find /tmp -perm -4000 -type f 2>/dev/null
# → se /tmp/.suid_bash è presente, è necessaria una risposta immediata
# Ubuntu / Debian
sudo apt update && sudo apt upgrade packagekit
# RHEL / Fedora
sudo dnf update PackageKit
# Controllo versione (vulnerabile se ≤ 1.3.4)
dpkg -l | grep -i packagekit # Debian/Ubuntu
rpm -qa | grep -i PackageKit # RHEL/Fedora
# Controllo stato del demone
systemctl status packagekit
# Disattivazione di PackageKit
sudo systemctl disable --now packagekit
⚠️ La disattivazione rende inutilizzabili gli strumenti GUI di gestione pacchetti come GNOME Software
Questo repository è stato creato a scopo di ricerca e apprendimento sulla sicurezza.
Lo sfruttamento di vulnerabilità e l'accesso non autorizzato ai sistemi possono comportare sanzioni penali; tutti i test sono stati eseguiti in ambienti isolati di propria proprietà.
| Data | Contenuto |
|---|
| 2026-04-08 | Deutsche Telekom Red Team → prima segnalazione a Red Hat/PackageKit |
| 2026-04-10 | Accettazione e riproduzione confermata dai manutentori di PackageKit |
| 2026-04-13 | Bozza di patch privata |
| 2026-04-15 | Condivisione della vulnerabilità con Canonical |
| 2026-04-19 | Notifica privata ai vendor delle distribuzioni |
| 2026-04-22 | Rilascio di PackageKit 1.3.5, assegnazione CVE, divulgazione pubblica |