
C-Ark Credential Decoder per #CVE-2021-31796
Strumento di exploit per CVE-2021-31796
Uno strumento per decodificare i file di credenziali C-Ark
Di: Aaron Mizrachi - https://twitter.com/unmanarc/
Enrique Vaamonde - https://twitter.com/_ejvm
Prima release: 2/Sep/2019
Divulgazione: 11/Oct/2021
Questa vulnerabilità era in attesa di pubblicazione da settembre 2019.
E... ecco la cronologia:
Durante un pentest, se qualcuno è abbastanza furbo da raggiungere il PSM e ottenere accidentalmente l'accesso al CredFile, potrebbe potenzialmente usare questo file per stabilire una connessione al Vault e ottenere l'intero regno...
Come contromisura, la maggior parte dei file di credenziali impone alcune "restrizioni" per evitare che la password venga utilizzata in un ambiente/computer diverso (ad es. il PSM personale dell'hacker).
Tuttavia, tali restrizioni possono essere modificate se si inverte il processo e si ottiene la porzione grezza della chiave. Questa porzione di chiave decrittata può essere utilizzata per ricreare un altro file con altri parametri di "sicurezza" (ad es. un altro host, un'altra applicazione, un altro utente del sistema operativo).
Per generare la chiave grezza di decrittazione AES-256 (32 byte), prendiamo una coppia di SHA1SUM dal campo credenziale "AdditionalInformation" aggiungendo "0x00000000" e "0x00000001" per ogni hash; il primo hash fornisce i primi 20 byte della chiave, il secondo solo gli ultimi 12 byte.
Se sono presenti restrizioni ambientali (come IP/Host/exepath/...), anteponiamo ogni valore in chiaro a AdditionalInformation prima di calcolare entrambi gli SHA1SUM.
È importante menzionare che il campo "ClientApp" viene trasformato con BASE64(SHA1SUM(strlower(ClientApp))) prima di essere anteposto a "AdditionalInformation" e di generare entrambi gli SHA1SUM.
La decrittazione viene eseguita utilizzando la funzione AES-256-CBC di OpenSSL con il campo Password o NewPassword. (https://wiki.openssl.org/index.php/EVP_Symmetric_Encryption_and_Decryption)
Stiamo usando (verificationflags-16) per capire quale validazione/restrizione è attiva:
usingClientApp = ((uVerificationsFlag&0x1) != 0);
usingAppPath = ((uVerificationsFlag&0x2) != 0);
usingClientIP = ((uVerificationsFlag&0x4) != 0);
usingOSUser = ((uVerificationsFlag&0x8) != 0);
usingClientHostname = ((uVerificationsFlag&0x20) != 0);
e nel caso in cui alcune restrizioni non siano visualizzate nel file di credenziali di output, puoi sempre inserirle a mano. Penso che possiamo entrambi concordare sul fatto che né "percorso dell'app" né "IP del client” siano valori davvero casuali.
Usa l'HSM \o/, non memorizzare la chiave di decrittazione nel file cred.
qmake .
make -j8