
7-Zip fino alla versione 21.07 su Windows consente l'escalation dei privilegi e l'esecuzione di comandi quando un file con estensione .7z viene trascinato nell'area Help>Contents.
Non ho pubblicato da nessuna parte alcun codice PoC per l'attacco di escalation dei privilegi. I codici PoC trovati non hanno nulla a che fare con l'escalation dei privilegi. Per vostra informazione.
7-Zip è un archiviatore di file libero e gratuito. La versione da riga di comando di 7-Zip è pensata per i sistemi simili a Unix, e tra questi è incluso anche AmigaOS. È inoltre compatibile con DOS; può essere eseguita per la porta DOS oppure, tramite l'estensione HX-DOS, nel prompt dei comandi di Windows.
Scriverò in turco, così anche voi imparate un po' di turco.
Innanzitutto, voglio accennare alla mia storia di scoperta della vulnerabilità. Ho visto un payload che sfrutta la vulnerabilità XXE su WinRAR. Inoltre, utilizzando il file HTML Helper, permetteva di eseguire comandi tramite JavaScript grazie ad ActiveXObject e WScript.Shell. Non aveva alcuna differenza dall'HTA usato nei LOLBins; ho riflettuto su come trasformare la situazione a mio favore.
(https://www.exploit-db.com/exploits/47526)
In realtà, il mio obiettivo era ottenere una reverse-shell sul computer di destinazione dopo aver fatto doppio clic sulle estensioni di tecnologie di compressione come 7z, zip, rar, ecc.; stavo pensando se avrei potuto usare il file HTML Helper per questo. Dopo lunghe operazioni di fuzzing con WinAFL, ho scoperto un heap-overflow in FzGM.exe, ma non aveva senso, perché dopo l'heap overflow i miei privilegi sarebbero rimasti quelli dello stesso utente. Per questo non ho usato CreateRemoteThread, perché dovevo chiamare l'API e per poter attivare questa API avevo bisogno di un file chm. Esaminando il codice sorgente, ho notato che c'erano operazioni errate in particolare in due punti durante le chiamate all'API di Windows, e questo creava direttamente un problema di autorizzazione. Questo punto che ho scoperto crea un processo figlio sotto FzGM.exe, come si vede nell'immagine seguente. Normalmente ci aspetteremmo che questo processo avvenga su hh.exe.


Se, invece di includere l'API, ci fosse stata una corretta configurazione tramite la funzione, mi sarei aspettato che creasse un processo figlio sotto hh.exe; invece il file 7-zip.chm lo richiama tramite sé stesso. Un esempio tipico: potete vederlo modificando il file 7-zip.chm ed eseguendo un comando. Per il problema di autorizzazione dell'API chiamata dopo l'heap overflow, ho sfruttato la configurazione errata presente nel file 7z.dll, su cui sto lavorando da molto tempo. Non ha senso chiamare CreateRemoteThread(). Ciò che devo eseguire e richiamare all'interno del payload non è l'API HTML Helper stessa, ma il punto in cui questa API viene hookata tramite 7-zip e la mia capacità di eseguire quel punto; tuttavia, poiché questo payload funziona solo con l'integrazione di hh.exe, funziona quindi con una funzione come il drag-and-drop. Il richiamo del file 7-zip.chm tramite il pulsante HELP di 7-zip e il mio reindirizzamento del "base pointer", il cui indirizzo richiamato qui presenta nel payload un problema di autorizzazione, ci portano a un utente con privilegi superiori. Il passo successivo è la presenza di psexec nel payload e l'elevazione ai privilegi di sistema come nt authority/system tramite il comando psexec -s cmd.exe.

Video PoC:
Molte delle domande riguardavano l'avviso ActiveX; potete risolvere questo problema, in sostanza, così. Prima che il payload venga eseguito; <'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\0' -Name '1201' -Value '0' -PropertyType "DWord"> effettua un controllo: se questo valore è 1, il popup appare sullo schermo; se invece viene assegnato un nuovo valore pari a 0, viene bypassato. Tuttavia, va notato che influenza l'utente che sta eseguendo il payload in quel momento.
Ho segnalato allo sviluppatore i punti necessari e questo è stato accettato anche da CVE. Non riesco a comprendere come le persone si credano un'autorità e come si crei la percezione che io debba consegnare loro l'exploit. Nonostante avessi già dichiarato che lo avrei pubblicato dopo l'aggiornamento, questa mancanza di rispetto, compiuta prima ancora che l'update fosse disponibile, credo derivi dal considerarsi un'autorità. Potrei anche non voler mai pubblicare il codice PoC dell'attacco di escalation dei privilegi; è una mia libera scelta e non mi interessa minimamente cosa pensi chiunque sulla correttezza di questa decisione.
Primo metodo: se 7-zip non viene aggiornato, è possibile eliminare il file 7-zip.chm. Secondo metodo: tutti gli utenti che accedono al programma devono disporre dei permessi di lettura ed esecuzione.
La regola Sigma pertinente: https://github.com/kagancapar/CVE-2022-29072/blob/main/7z_CVE-2022-29072.yml