Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-41651 — Proof-of-concept exploit per CVE-2026-41651, una escalatione locale dei privilegi TOCTOU in PackageKit, con analisi tecnica, logica di rilevamento e indicazioni di rimedio. | Kitploit
Strumenti/GitHubGitHub/baph00met/cve-2026-41651
Escalation di PrivilegiAnalisi delle VulnerabilitàExploitPenetration TestingRed TeamingLab e Pratica
GitHubbaph00met/cve-2026-41651

CVE-2026-41651

Proof-of-concept exploit per CVE-2026-41651, una escalatione locale dei privilegi TOCTOU in PackageKit, con analisi tecnica, logica di rilevamento e indicazioni di rimedio.

Vedi Repository
17354 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-41651 — Escalatione dei Privilegi Locali TOCTOU in PackageKit

Classificazione: Artefatto di Valutazione Purple Team
Solo uso autorizzato. Questo documento e lo script di test allegato sono destinati esclusivamente alla validazione di sicurezza interna su sistemi per i quali è stata ottenuta autorizzazione scritta.


Prova di Sfruttamento

Prova di sfruttamento


Indice

  1. Panoramica della Vulnerabilità
  2. Analisi Tecnica
  3. Descrizione dello Script di Test
    • Comportamento
    • Supporto Ambienti Hardened
    • Compatibilità
  4. Indicatori di Compromissione
    • File System
    • Processi ed Esecuzione
    • Attività D-Bus
    • Pattern dei Log di Audit
    • Artefatti del Gestore Pacchetti
    • Artefatti di Escalation dei Privilegi
  5. Logica di Rilevamento
  6. Sistemi e Versioni Interessati
  7. Rimedio
  8. Riferimenti

Panoramica della Vulnerabilità

PackageKit è un livello di astrazione D-Bus per la gestione dei pacchetti di sistema, presente per impostazione predefinita sui desktop basati su GNOME in Debian, Ubuntu, Fedora, RHEL, SUSE e Arch Linux. Poiché media operazioni privilegiate sui pacchetti per conto di utenti non privilegiati, un difetto nel suo flusso di autorizzazione ha un impatto root a livello di sistema.


Analisi Tecnica

Causa Principale

pk-transaction.c (pre-1.3.5) non applicava un controllo di stato sulla re-invocazione dei metodi di azione. Un client D-Bus poteva chiamare InstallFiles (o altri metodi di azione) più volte sullo stesso oggetto transazione dopo che questo era già passato dallo stato PK_TRANSACTION_STATE_NEW.

Catena d'Attacco

root@kitploit:~
Attaccante (non privilegiato)
  │
  ├─① CreateTransaction()          → PackageKit restituisce il percorso dell'oggetto transazione (tid)
  │
  ├─② InstallFiles(tid, FLAG_SIMULATE=4, [dummy.pkg])
  │       PackageKit accoda un controllo di autorizzazione polkit per dummy.pkg.
  │       Nessuna installazione avviene ancora — SIMULATE significa solo prova a secco.
  │
  ├─③ InstallFiles(tid, FLAG_NONE=0, [payload.pkg])   ← finestra TOCTOU
  │       Re-invoca sullo stesso tid prima che l'autorizzazione venga risolta.
  │       Le versioni vulnerabili sovrascrivono i parametri accodati con payload.pkg.
  │
  └─④ polkit concede l'autorizzazione (approvata dall'utente o auto-autorizzata)
          packagekitd installa payload.pkg come root.
          script postinst/post di payload: install -m 4755 /bin/bash /tmp/.suid_bash
          L'attaccante esegue /tmp/.suid_bash -p  →  shell root.

Perché la Corsa Viene Vinta

I passi ② e ③ vengono inviati come chiamate D-Bus asincrone non bloccanti sulla stessa connessione e scaricati in un'unica scrittura. I due messaggi arrivano a packagekitd prima che possa elaborare ② e avanzare la macchina a stati, lasciando aperta la finestra TOCTOU. La correzione in 1.3.5 aggiunge un controllo di stato esplicito che restituisce PK_TRANSACTION_ERROR_INVALID_STATE su qualsiasi re-invocazione dopo PK_TRANSACTION_STATE_NEW.


Descrizione dello Script di Test

File: cve-2026-41651-purpleteam.py
Linguaggio: Python 3
Dipendenze: python3-gi (introspezione GObject / binding GLib/Gio)

Scopo

Dimostra la sfruttabilità di CVE-2026-41651 su un sistema di test predisposto per gli scopi di:

  • Validare se la versione di PackageKit installata è vulnerabile
  • Generare telemetria IOC realistica per la messa a punto di SIEM/EDR
  • Testare la copertura di rilevamento prima e dopo l'applicazione della patch

Comportamento

Supporto Ambienti Hardened

I sistemi hardened per impostazione predefinita possono bloccare l'exploit in due punti indipendenti. Lo script gestisce entrambi automaticamente.

1. umask restrittivo (027 / 077)

Un umask ereditato dal processo di 027 o 077 fa sì che mkdir() produca directory 750 o 700. Sia dpkg-deb che rpmbuild devono attraversare l'intero albero di build — se una qualsiasi directory non è leggibile la build fallisce silenziosamente.

Correzione applicata: os.umask(0o022) viene chiamato all'avvio prima che venga creato qualsiasi file o directory. Inoltre, ogni directory e file nell'albero di build riceve un chmod esplicito immediatamente dopo la creazione (0o755 per directory e script, 0o644 per i file di dati), così i permessi corretti sono garantiti indipendentemente dall'umask ereditato.

2. Flag di mount nosuid / noexec su /tmp

FlagEffetto sull'exploit
nosuidIl kernel rimuove silenziosamente il bit SUID da qualsiasi file memorizzato su quel file system — la bash copiata non diventa mai root
noexecIl binario SUID non può essere eseguito affatto

Correzione applicata: All'avvio, _find_suid_dir() legge /proc/mounts e testa le directory candidate in ordine di preferenza finché non trova un file system che non ha nessuno dei due flag impostati. Il percorso risolto viene quindi incorporato nello script post-install del payload e utilizzato per il polling e l'esecuzione.

Se tutte le candidate sono bloccate lo script esce con un errore chiaro piuttosto che fallire silenziosamente.

Compatibilità

Famiglia di DistribuzioniStrumento PacchettiTestato
Debian / Ubuntudpkg-deb✓

Indicatori di Compromissione

Gli IOC sono elencati dal livello generico/di infrastruttura fino agli artefatti specifici dello script. I rilevamenti basati sugli indicatori generici cattureranno questo CVE indipendentemente dalla variante PoC utilizzata.

File System

Processi ed Esecuzione

Attività D-Bus

Pattern dei Log di Audit

Abilita con: auditctl -a always,exit -F arch=b64 -S all -F path=/usr/bin/packagekitd
Oppure usa le regole seguenti in /etc/audit/rules.d/:

root@kitploit:~
# Rileva la creazione di file SUID in tutte le directory di drop candidate
-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

# Rileva dpkg-deb / rpmbuild da parte di non-root
-w /usr/bin/dpkg-deb -p x -k pkg_build_nonroot
-w /usr/bin/rpmbuild -p x -k pkg_build_nonroot

# Rileva l'esecuzione di bash SUID da qualsiasi directory di drop candidate
-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

Artefatti del Gestore Pacchetti

Artefatti di Escalation dei Privilegi


Logica di Rilevamento

Pseudo-Regola SIEM (Generica — copre tutte le varianti di 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")
)

Catena Comportamentale EDR

root@kitploit:~
packagekitd
  └─ sh / bash  (cwd o arg corrisponde a /tmp, /var/tmp, /dev/shm o $HOME)
       └─ install / cp / chmod  (target ha SUID + proprietario root)

Segnala l'intera catena. Ogni singolo passo da solo può essere benigno; la relazione genitore-figlio attraverso packagekitd fino a un comando che imposta SUID è ad alta fedeltà indipendentemente dalla directory di drop selezionata. Amplia le regole basate sul percorso per coprire tutte e quattro le candidate.


Sistemi e Versioni Interessati

Controlla la versione installata: pkcon backend-details o packagekit --version
Vulnerabile se la versione riportata è ≤ 1.3.4.


Rimedio

Primario: Aggiorna PackageKit alla 1.3.5 o applica il backport specifico del fornitore.

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

# Fedora / RHEL
dnf upgrade packagekit

# SUSE
zypper update packagekit

Mitigazioni (se l'applicazione della patch non è immediatamente possibile):


Riferimenti


Generato: 2026-04-24 | Aggiornato: 2026-04-25 | Valutazione Purple Team | Solo uso interno

Scarica lo strumento
CampoValore
ID CVECVE-2026-41651
CWECWE-367 — Condizione di Corsa Time-of-check Time-of-use (TOCTOU)
ComponentePackageKit (packagekitd, servizio D-Bus)
InteressatiPackageKit ≤ 1.3.4
Corretto inPackageKit 1.3.5
ImpattoEscalation dei Privilegi Locali → root
Vettore d'AttaccoLocale / D-Bus (sessione utente non privilegiato)
Divulgato2026-04-22 (Deutsche Telekom Red Team)
AdvisoryGHSA-f55j-vvr9-69xv
Commit di correzione76cfb675fb31acc3ad5595d4380bfff56d2a8697
FaseAzione
SetupSonda /proc/mounts per selezionare una directory di drop SUID/exec-capable, imposta umask(022), applica chmod esplicito su tutti gli artefatti di build, quindi crea un pacchetto dummy e uno payload in /tmp
ExploitApre una connessione D-Bus di sistema, crea una transazione PackageKit, lancia la corsa a due chiamate
PayloadLo script post-install del pacchetto copia /bin/bash in <drop_dir>/.suid_bash con modalità 04755, proprietario root. La directory di drop viene risolta a runtime (vedi Supporto Ambienti Hardened)
EscalationEsegue il polling del binario SUID (timeout 90 s), quindi esegue execl su di esso con -p per una shell root
CleanupRimuove i file .deb/.rpm temporanei all'uscita (successo o fallimento)
PrioritàCandidataHardening tipico
1/var/tmpRaramente porta nosuid/noexec; sopravvive ai riavvii
2/dev/shmtmpfs, solitamente permissivo; cancellato al riavvio
3/tmpSpesso hardened su sistemi CIS/STIG
4$HOMEUltima risorsa; sempre scrivibile dall'utente
RHEL / Fedora
rpmbuild
✓
SUSE / openSUSErpmbuild✓
IOCPercorso / PatternNote
Binario SUID in directory scrivibile da tutti<drop_dir>/.suid_bash — la directory di drop è /var/tmp, /dev/shm, /tmp o $HOME a seconda dei flag di mountLo script seleziona la prima directory senza nosuid/noexec; ampliare i rilevamenti per coprire tutte e quattro le candidate
File pacchetto transitorio in /tmp/tmp/*.deb, /tmp/*.rpmCreato da utente non privilegiato; le operazioni legittime sui pacchetti usano /var/cache o percorsi di download
Albero di build dpkg/tmp/pkbuild_*, /tmp/build_*Directory di staging per dpkg-deb -b
Albero rpmbuild in /tmp/tmp/rpmbuild_*Directory di staging per rpmbuild invocato al di fuori di ~/rpmbuild
Script postinst / %post in /tmp/tmp/*/DEBIAN/postinst, /tmp/*/SPECS/*.specGli script che copiano o eseguono chmod su binari di sistema sono ad alta confidenza
IOCDettaglio
dpkg-deb avviato da processo non-root, non-aptIl genitore è un processo Python/shell utente, non apt, dpkg o unattended-upgrades
rpmbuild avviato da utente non privilegiatoSenza un genitore legato al packaging (mock, koji, runner CI) questo è anomalo
packagekitd che avvia /bin/sh o /bin/bash da percorso in /tmppackagekitd esegue script postinst; il percorso sorgente in /tmp è l'anomalia
Processo bash dove UID ≠ EUIDEsecuzione SUID; EUID=0, UID=<attaccante>
Invocazione bash -pIl flag -p abilita la modalità privilegiata quando SUID è impostato — raramente usato legittimamente
Discendenza di processo .suid_bash di breve durataIl nonno è packagekitd, il genitore è la shell dell'attaccante
IOCDettaglio
org.freedesktop.PackageKit.Transaction.InstallFiles chiamato due volte sullo stesso percorso oggettoEntrambe le chiamate arrivano entro millisecondi; i client legittimi chiamano una volta per transazione
FLAG_SIMULATE (4) seguito immediatamente da FLAG_NONE (0) sullo stesso tidQuesta sequenza non ha alcun caso d'uso legittimo
Pattern CreateTransaction → doppio InstallFiles rapidoRilevabile tramite monitor D-Bus (dbus-monitor --system) o regole dbus di audit
InstallFiles con un percorso file sotto /tmpGli installer GUI legittimi (GNOME Software, Discover) usano percorsi in $HOME o /var/cache
IOCDettaglio
Pacchetto denominato pk-dummy-* o pk-payload-* nella cronologia dpkg/rpmSpecifico dello script ma le varianti useranno nomi diversi
Pacchetto installato da file locale (/tmp/*.deb o /tmp/*.rpm)dpkg -l o rpm -qa --last — cerca pacchetti senza origine repository
Pacchetto installato senza changelog / descrizione vuotaI pacchetti creati ad hoc usano metadati minimi; dpkg -s <pkg> o rpm -qi <pkg>
Pacchetto rimosso immediatamente dopo l'installazione o mai presente nel database pacchettiI tentativi di exploit falliti possono lasciare stato parziale
Voci del log transazioni packagekit per installazioni da file locale/var/log/PackageKit/transactions.db o voci journald packagekitd
IOCDettaglio
.suid_bash in qualsiasi directory di drop candidateIl percorso di drop è scelto a runtime tra /var/tmp, /dev/shm, /tmp, $HOME in base ai flag di mount — controlla tutte e quattro: find /var/tmp /dev/shm /tmp $HOME -uid 0 -perm -4000 2>/dev/null
Qualsiasi file di proprietà di root con bit SUID in una directory scrivibile dall'utenteDovrebbe sempre restituire vuoto su sistemi puliti
Albero di processo bash con euid=0 e nessun antenato PAM / sudo / suIndica un percorso di esecuzione SUID piuttosto che una transizione di privilegi legittima
Concessione polkit per org.freedesktop.packagekit.package-install a utente non amministratoreInaspettato se l'utente non è nel gruppo sudo / wheel
DistribuzionePackageKit predefinitoVulnerabileVersione corretta disponibile
Ubuntu 24.04 LTS1.3.xSìTramite apt upgrade
Ubuntu 22.04 LTS1.2.xSìBackport in corso
Debian 12 (Bookworm)1.2.xSìSecurity tracker in sospeso
Fedora 411.3.xSìdnf upgrade packagekit
RHEL 9 / CentOS Stream 91.2.xSìRHSA in sospeso
SUSE Linux Enterprise 151.1.xProbabileAdvisory SUSE in sospeso
Arch Linux1.3.xSìAUR / pacman aggiornato
MitigazioneComando / ConfigurazioneAvvertenza
Disabilitare il servizio PackageKitsystemctl disable --now packagekitdInterrompe gli aggiornamenti GUI di GNOME Software / Discover
Limitare l'accesso D-BusAggiungere regola deny in /etc/dbus-1/system.d/org.freedesktop.PackageKit.conf per utenti non privilegiatiPuò interrompere strumenti pacchetti legittimi rivolti all'utente
Hardening polkitImpostare org.freedesktop.packagekit.package-install su auth_admin (richiedere sempre la password amministratore)Riduce la comodità ma restringe la superficie d'attacco
Monitoraggio auditDistribuire le regole di audit dalla sezione Pattern dei Log di AuditSolo detective, non preventivo
RisorsaLink
Divulgazione OSS-Securityhttps://www.openwall.com/lists/oss-security/2026/04/22/6
Advisory di Sicurezza GitHubGHSA-f55j-vvr9-69xv
Commit di correzionehttps://github.com/PackageKit/PackageKit/commit/76cfb675fb31acc3ad5595d4380bfff56d2a8697
Rilascio PackageKit 1.3.5https://github.com/PackageKit/PackageKit/releases/tag/v1.3.5
Riferimento PoC pubblicohttps://github.com/CipherCloak/CVE-2026-41651
CWE-367https://cwe.mitre.org/data/definitions/367.html
Documentazione polkithttps://www.freedesktop.org/software/polkit/docs/latest/