
PoC di escalation locale dei privilegi per ottenere una shell SYSTEM per CVE-2019-9702 in Symantec Encryption Desktop.
PGPwded.sys escalatione di privilegi locale — PoCQuesto repository contiene una proof-of-concept per un percorso di escalatione di privilegi locale nel filtro di storage PGPwded.sys di Symantec Encryption Desktop, basata su una primitiva di lettura/scrittura raw del disco con privilegi bassi.
La PoC è stata sviluppata e testata contro Symantec Encryption Desktop Pro 10.4.2 MP3. Altre versioni non sono state testate con questa implementazione.
Il lavoro è stato ispirato e si basa sulla ricerca pubblica originale di Kyriakos Economou / Nettitude, ora LRQA Nettitude:
Il loro articolo descrive il controllo di accesso al device PGPwded.sys, l'idea di iniezione in un processo PGP considerato attendibile, gli IOCTL di lettura/scrittura raw e gli approcci di sfruttamento basati su NTFS. Questa PoC si concentra su una variante con sovrascrittura del binario di un servizio attivata al riavvio e include un'utility di precheck in sola lettura.
src/
sym_portable_launcher.c # launcher a eseguibile singolo; incorpora e rilascia il worker di staging
portable_stage_worker.c # worker iniettato; mappa C:, apre PGPwded, prepara il payload
spooler_payload.c # payload del servizio eseguito da Spooler come LocalSystem dopo il riavvio
sym_portable_precheck.c # launcher di precheck a eseguibile singolo in sola lettura
precheck_worker.c # worker diagnostico iniettato in sola lettura
*_bytes.h # array di byte incorporati generati per payload/worker
tools/
sym_target_diag_lite.cmd # script wrapper per raccogliere diagnostica sul target
L'exploit della fase di riavvio è un singolo eseguibile Windows a 32 bit rilasciato sul sistema. A grandi linee:
C:\Users\Public.%TEMP%.\\.\PGPwdef dall'interno del percorso dell'immagine del processo PGP considerato attendibile.C:\Windows\System32\spoolsv.exe nella sua estensione NTFS e calcola il settore disco sottostante.\Device\000000xx corrisponde a quel settore di C: usando l'IOCTL di lettura raw.C:\Users\Public\spoolsv.exe.orig.portable.spoolsv.exe con un payload di servizio LocalSystem incorporato.Il precheck in sola lettura segue lo stesso percorso del processo considerato attendibile, ma usa solo l'IOCTL di lettura raw. Non sovrascrive file e non prepara l'exploit.
Compilazione da un host Linux con MinGW-w64 installato:
make
Output attesi:
bin/sym_portable_reboot_stage32.exe # exploit/stager
bin/sym_portable_precheck32.exe # precheck in sola lettura
Eseguire prima il precheck. Serve a determinare se le condizioni attuali per l'exploit sono presenti senza modificare file protetti.
C:\Users\Public\sym_portable_precheck32.exe
notepad C:\Users\Public\sym_portable_precheck.log
Un target valido dovrebbe terminare con:
[OK] current reboot exploit conditions
Se il log non mostra PDO PGP leggibili, o nessuna corrispondenza di settore per C:, non eseguire l'exploit. Di solito significa che il disco di sistema non è gestito/strumentato da Symantec WDE.
Per un rapporto diagnostico più completo sul target, copiare entrambi i file seguenti nella stessa directory ed eseguire il wrapper CMD:
sym_target_diag_lite.cmd
sym_portable_precheck32.exe
Poi eseguire:
C:\Users\Public\sym_target_diag_lite.cmd
notepad C:\Users\Public\sym_target_diag_lite.log
Eseguire l'exploit solo su sistemi in cui si è autorizzati a modificare file di sistema protetti e dove il precheck è stato superato.
Copiare lo stager in un percorso scrivibile ed eseguirlo come utente con privilegi bassi:
C:\Users\Public\sym_portable_reboot_stage32.exe
Controllare i log di staging:
type C:\Users\Public\sym_portable_launcher.log
type C:\Users\Public\sym_portable_stage.log
Se lo staging è riuscito, il log del worker contiene:
STAGED_OK_REBOOT_TO_TRIGGER
Riavviare la macchina. Dopo il riavvio, il servizio Spooler dovrebbe avviare il payload come LocalSystem e aprire un prompt dei comandi con titolo:
SYSTEM_CMD_FROM_PORTABLE_REBOOT_LPE
Lo stager crea questo backup prima di sovrascrivere il target:
C:\Users\Public\spoolsv.exe.orig.portable
Non è inclusa una modalità pubblica di ripristino con un clic. Durante i test, il ripristino è stato effettuato riscrivendo in modalità raw il backup sugli stessi settori mappati e riavviando. Un flusso di ripristino sicuro dovrebbe essere aggiunto e validato prima di pubblicare i binari.
C:\Windows\System32\spoolsv.exe.PGPwded.sys; una sola installazione di Symantec non è sufficiente.Questo è codice di ricerca per test autorizzati e validazione difensiva. Non eseguirlo su sistemi che non possiedi o per i quali non hai il permesso esplicito di valutare.