
Vulnerabilità di generazione e gestione delle chiavi AES-CFB nell'applicazione desktop Reolink
L'applicazione desktop Reolink (versione 8.18.12) utilizza l'algoritmo AES-CFB per crittografare i file di configurazione e altri dati sensibili.
Tuttavia, la chiave di crittografia viene gestita in modo non sicuro, il che consente agli attaccanti di decrittare facilmente i dati di configurazione protetti.
L'applicazione Reolink memorizza la configurazione utente e altre informazioni sensibili nel seguente percorso:
%APPDATA%\reolink\<UUID>.json
<UUID> ha questo formato: 424e044d-aa27-4e59-873a-26b9f16be9ad
Questo file di configurazione viene crittografato utilizzando AES-CFB, e la chiave AES utilizzata per la decrittazione viene derivata attraverso il seguente processo:
Aprire il file situato nel seguente percorso:
%APPDATA%\com.reolink.app.client
Il file contiene dati in formato JSON, ad esempio:
{
"data": "+lWlitlpr9vBiG71RCJYoPSJKVnUgGVbgu4v9W6K3N0kzgLv9HEQpqVi2fMnHdb7iWhYgb5KeRhYb6IPVWRR4kxTcwTDfQmMOvFWLuqHPRJBt9ozPSo4TYDXzjBN0YAW",
"__internal__": {
"migrations": {
"version": "8.18.12"
}
}
}
L'applicazione utilizza MD5("com.reolink.app").upper() come chiave AES primaria e bcswebapp1234567 come IV. La stringa crittografata (data) viene decodificata in base64 e poi decrittata. La stringa decrittata ha questo formato: 59083200-3875-4f67-a067-d953286114a0
La chiave finale è MD5("<DECRYPTED_STRING>").upper().encode(), e l'IV rimane lo stesso (bcswebapp1234567). Questa viene utilizzata per decrittare il file di configurazione, <UUID>.json.
Eseguendo poc.py, è possibile ottenere la chiave finale prima che venga sottoposta a hash MD5 (nel formato 59083200-3875-4f67-a067-d953286114a0) e il contenuto del file di configurazione.
Un hash di una stringa statica hard-coded, come com.reolink.app, non dovrebbe essere utilizzato come chiave primaria.
Inoltre, le chiavi non dovrebbero essere memorizzate in un file locale prevedibile, come in %APPDATA%. È necessario utilizzare keystore sicuri e validati forniti dal sistema operativo, come Windows DPAPI o macOS Keychain, per proteggere tutte le credenziali sensibili.