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-92162 — Write-up educativo e PoC in modalità test per CVE-2026-92162, un path traversal nel parametro arch di DeployAppstream di Flatpak che consente la creazione di directory root. | Kitploit
Strumenti/GitHubGitHub/0xsemizzz/cve-2026-92162
Escalation di PrivilegiAnalisi delle VulnerabilitàExploitPost-ExploitPenetration TestingPaper e RicercaApprendimento e Formazione
GitHub0xsemizzz/cve-2026-92162

CVE-2026-92162

Write-up educativo e PoC in modalità test per CVE-2026-92162, un path traversal nel parametro arch di DeployAppstream di Flatpak che consente la creazione di directory root.

Vedi Repository
14h 40m 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-92162: Path Traversal tramite arch in Flatpak DeployAppstream

Write up educativo e proof of concept in modalità test per un path traversal nell'helper di sistema di Flatpak (flatpak-system-helper). Il metodo D-Bus DeployAppstream accetta una stringa arch che viene inserita in un percorso del filesystem e creata come root, senza alcuna validazione. Un utente locale attivo può fornire componenti ../ e causare la creazione di directory al di fuori dell'albero appstream previsto da parte del servizio con privilegi root.

Questo repository accompagna l'analisi tecnica completa e il post-mortem della ricerca. Esiste per scopi educativi, per i difensori che vogliono comprendere il meccanismo, e per test autorizzati su sistemi di tua proprietà o per i quali hai un permesso scritto di valutazione.

Uso responsabile

Questo materiale è pubblicato dopo la divulgazione coordinata e dopo che una versione corretta di Flatpak è stata resa disponibile. Esegui il proof of concept solo contro una macchina di laboratorio di tua proprietà o che sei esplicitamente autorizzato a testare. Non eseguirlo contro sistemi che non controlli. Sei responsabile di rimanere entro i limiti della legge e nell'ambito di qualsiasi autorizzazione di cui disponi.

Il problema in un paragrafo

handle_deploy_appstream() nell'helper di sistema valida l'argomento origin ma non l'argomento arch. Per un remote OCI, arch confluisce in flatpak_build_file e poi in g_mkdir_with_parents, che viene eseguito come root e risolve ../ lessicalmente. L'azione polkit per il metodo è org.freedesktop.Flatpak.appstream-update, che è allow_active=yes, quindi una sessione locale attiva raggiunge il codice senza richiesta di password. Su un sistema che ha già un remote OCI, come un Fedora Workstation predefinito con il suo remote fedora, un utente con privilegi ridotti può creare directory di proprietà di root in un percorso arbitrario. Il payload in questo repository prende di mira /root/.ssh stesso.

Parte di una catena di due vulnerabilità

Questa vulnerabilità, Finding A, è stata dimostrata come parte di una catena di due vulnerabilità utilizzata per escalare da un utente locale non autenticato a root sulla macchina, in un laboratorio controllato e autorizzato. La catena funziona come segue: Finding A crea /root/.ssh come root. Finding B, una primitiva di scrittura secondaria, può quindi scrivere contenuto controllato dall'attaccante in quella directory. Insieme forniscono a un attaccante un file di proprietà di root in un percorso scelto dall'attaccante. Ogni bug da solo è limitato: Finding A crea solo directory, e Finding B può scrivere solo dove esiste già una directory padre. Finding A fornisce la directory padre di cui Finding B ha bisogno, e la coppia diventa scrittura di file come root.

Finding B è stato identificato in modo indipendente da questa ricerca, ma non è un nuovo finding: è la debolezza nota e ancora non corretta nel percorso di scrittura dei dati extra di Deploy documentata nel post-mortem della ricerca. Questo write up quindi copre e viene accreditato per Finding A, e utilizza Finding B solo come il componente noto e non corretto su cui la catena si basa.

Questo repository dimostra solo Finding A. La metodologia di concatenazione e le lezioni difensive sono documentate nel post-mortem della ricerca.

La correzione

Il progetto fornisce già flatpak_is_valid_arch, che limita un nome di architettura a [A-Za-z0-9_]. La remediation consiste nel chiamarlo sull'argomento arch al confine dell'handler e all'interno degli helper di costruzione dei percorsi. Un valore ../ non può superare quel predicato. Aggiorna alla versione corretta di Flatpak.

Struttura del repository

root@kitploit:~
.
├── README.md                 Questo file.
├── requirements.txt          Prerequisiti dei pacchetti di sistema per il PoC.
└── poc_arch_traversal.sh     PoC per il parametro arch non validato.
                              Modalità test sandboxed per impostazione predefinita,
                              la modalità produzione prende di mira /root/.ssh.
                              Solo per uso educativo.

Come usarlo

Prerequisiti

  • Una macchina Linux con flatpak installato e i pacchetti di requirements.txt presenti.
  • Un login da console locale (non SSH) se esegui la modalità produzione, perché il trigger si basa su polkit allow_active=yes. Verifica con: loginctl list-sessions e conferma che la tua sessione mostri un seat.
  • Non è necessario alcun registry OCI. La directory viene creata prima di qualsiasi recupero di rete, quindi l'URL del registry non viene mai contattato con successo.
  • Il binario helper è per impostazione predefinita /usr/libexec/flatpak-system-helper; lo script cerca prima un helper appena compilato in builddir/ o _build/ dell'albero sorgente di Flatpak, e FLATPAK_SYSTEM_HELPER ha la precedenza su tutto. Vedi requirements.txt per i pacchetti di sistema necessari.

Passo 0: verificare la presenza di un remote OCI

La modalità produzione rileva automaticamente un remote OCI esistente nell'installazione di sistema e lo utilizza. Qualsiasi remote OCI funziona, anche uno falso o irraggiungibile, perché la mkdir avviene prima che il registry venga mai contattato. Se non esiste alcun remote OCI, lo script annulla con un messaggio "No OCI remote found" e non invia nulla.

Fedora Workstation fornisce già il remote OCI fedora, quindi non serve fare nulla lì. Verifica cosa esiste con flatpak remotes --system (un remote OCI mostra oci nella sua colonna delle opzioni).

Passo 1: aggiungere un remote OCI (solo se il Passo 0 non ne ha trovato nessuno)

Questo è l'unico comando dell'intero flusso che richiede sudo, e lo script non lo esegue mai per te. Aggiungine uno con:

root@kitploit:~
sudo flatpak remote-add --system --no-gpg-verify oci-poc oci+http://127.0.0.1:19876

(flatpak non ha un flag --oci, almeno fino alla 1.19.0, la versione su cui si basa questo lavoro; il prefisso URL oci+ è ciò che rende il remote un registry OCI.) Un messaggio "Warning: Could not update extra metadata" è previsto quando non è in esecuzione alcun registry; il remote viene comunque aggiunto.

Passo 2: eseguire la modalità test sandboxed (sicura, senza root)

root@kitploit:~
bash poc_arch_traversal.sh

Lo script avvia un bus D-Bus privato e un helper in modalità --session, tutto sotto una directory temporanea. Chiama DeployAppstream con il payload ../../../../../root/.ssh e verifica che la directory evasa sia stata creata in <workdir>/root/.ssh, rispecchiando il target reale. Aspettati un errore D-Bus nel mezzo dell'output: è il recupero dell'indice OCI che fallisce dopo che la directory è già stata creata, ed è il comportamento previsto.

Passo 3: eseguire la modalità produzione (crea /root/.ssh come root)

root@kitploit:~
bash poc_arch_traversal.sh prod

Lo script non chiede mai una password. Rileva automaticamente un remote OCI, attiva DeployAppstream senza autenticazione con il payload di traversal, e stampa la risposta dell'helper. L'helper root crea /root/.ssh e poi fallisce sul registry irraggiungibile, il che stampa l'errore D-Bus previsto. Se la risposta è invece un errore di autenticazione, non sei in una sessione locale attiva; eseguilo dalla console della macchina. Un remote specifico può essere forzato con bash poc_arch_traversal.sh prod <remote>.

Passo 4: verificalo tu stesso

Il trigger stesso viene eseguito senza privilegi, ma confermare il risultato richiede root, quindi lo script lascia questo compito a te. Dopo l'esecuzione, sulla stessa macchina:

root@kitploit:~
sudo ls -laR /root/.ssh
sudo stat -c '%U:%G' /root/.ssh

La directory deve esistere ed essere di proprietà di root:root. L'errore D-Bus nell'output dello script non è un fallimento: prova che la mkdir è stata eseguita prima del recupero, poiché la directory evasa esiste anche se la chiamata al metodo è fallita.

Se /root/.ssh esisteva già prima dell'esecuzione (ad esempio su un host con un sshd in esecuzione), l'esecuzione è un no-op su quel percorso e non lascia nulla dietro: il file lock dell'helper è transitorio e viene rimosso quando il metodo ritorna, e icons viene scritto solo dopo un recupero dell'indice riuscito. Per una verifica pulita, esegui contro un percorso che non esiste ancora.

Pulizia

root@kitploit:~
sudo rm -rf /root/.ssh      # solo se non esisteva prima dell'esecuzione
sudo flatpak remote-delete --system oci-poc

Crediti

Ricerca e write up di Yehia Ali Mohamed Ezzat.

  • GitHub: 0xSemizzz
  • Sito: https://0xsemizzz.vercel.app/

Licenza

La documentazione e il codice in questo repository sono forniti per scopi educativi. Usali a tuo rischio e solo dove sei autorizzato.

Scarica lo strumento