
C-Ark Credential Decoder für #CVE-2021-31796
Exploit-Tool für CVE-2021-31796
Ein Tool zum Dekodieren von C-Ark-Credential-Dateien
Von: Aaron Mizrachi - https://twitter.com/unmanarc/
Enrique Vaamonde - https://twitter.com/_ejvm
Erste Veröffentlichung: 2/Sep/2019
Offenlegung: 11/Oct/2021
Diese Schwachstelle lag seit September 2019 zur Veröffentlichung bereit.
Und hier ist der Zeitplan:
Während eines Pentests kann jemand, der klug genug ist, das PSM zu erreichen und versehentlich Zugriff auf die CredFile zu erlangen, potenziell diese Datei verwenden, um eine Verbindung zum Vault herzustellen und die gesamte Kontrolle zu erlangen...
Als Gegenmaßnahme legen die meisten Credential-Dateien einige „Einschränkungen“ fest, um zu verhindern, dass das Passwort in einer anderen Umgebung/einem anderen Computer verwendet wird (z. B. dem eigenen PSM des Hackers).
Diese Einschränkungen können jedoch geändert werden, wenn Sie den Rohschlüsselteil umkehren und erhalten. Dieser entschlüsselte Schlüsselteil kann verwendet werden, um eine weitere Datei mit anderen „Sicherheits“-Parametern zu erstellen (z. B. einem anderen Host, einer anderen Anwendung, einem anderen OS-Benutzer).
Um den rohen AES-256-Entschlüsselungsschlüssel (32 Byte) zu generieren, nehmen wir ein Paar SHA1SUM aus dem Credential-Feld „AdditionalInformation“, wobei wir für jeden Hash „0x00000000“ und „0x00000001“ anhängen; der erste Hash liefert die ersten 20 Bytes des Schlüssels, der zweite nur die letzten 12 Bytes.
Falls es Umgebungseinschränkungen gibt (wie IP/Host/exepath/...), stellen wir jeden Klartextwert der AdditionalInformation voran, bevor wir beide SHA1SUMs berechnen.
Es ist wichtig zu erwähnen, dass das Feld „ClientApp“ mit BASE64(SHA1SUM(strlower(ClientApp))) transformiert wird, bevor es der „AdditionalInformation“ vorangestellt und beide SHA1SUMs generiert werden.
Die Entschlüsselung erfolgt mit der AES-256-CBC-OpenSSL-Funktion unter Verwendung des Feldes Password oder NewPassword. (https://wiki.openssl.org/index.php/EVP_Symmetric_Encryption_and_Decryption)
Wir verwenden (verificationflags-16), um zu ermitteln, welche Validierung/Einschränkung aktiv ist:
usingClientApp = ((uVerificationsFlag&0x1) != 0);
usingAppPath = ((uVerificationsFlag&0x2) != 0);
usingClientIP = ((uVerificationsFlag&0x4) != 0);
usingOSUser = ((uVerificationsFlag&0x8) != 0);
usingClientHostname = ((uVerificationsFlag&0x20) != 0);
und falls einige Einschränkungen nicht in der ausgegebenen Credential-Datei angezeigt werden, können Sie sie jederzeit von Hand einfügen. Ich denke, wir sind uns beide einig, dass weder „App-Pfad“ noch „Client-IP“ wirklich zufällige Werte sind.
Verwenden Sie das HSM \o/, speichern Sie den Entschlüsselungsschlüssel nicht in der Cred-Datei.
qmake .
make -j8