
Vulnerabilità di Bypass dell'Autenticazione Locale nell'Applicazione Desktop Reolink
L'Applicazione Desktop Reolink (versione 8.18.12) contiene una vulnerabilità di bypass dell'autenticazione locale nella sua funzionalità di schermata di blocco. Il codice sorgente dell'applicazione non è impacchettato in un archivio ASAR, lasciando la logica critica di autenticazione, come la verifica della password, esposta in chiaro nei file JavaScript lato client. È sufficiente modificare la logica in questo codice esposto per neutralizzare il controllo della password e bypassare la schermata di blocco.
La password della schermata di blocco viene memorizzata e recuperata tramite codice JavaScript nel bundle di risorse locale, in particolare:
%LOCALAPPDATA%\Programs\Reolink\resources\app\~node_modules_sharp_vendor_Sync_recursive_versions_json_~private_main_index_ts.js
Il codice pertinente registra un handler per il comando get_settings_lock_screen_password, che restituisce la password memorizzata dalla proprietà a.settingsManager.lockScreenPassword:
this.registerCommonCmd(
"get_settings_lock_screen_password",
"",
R(function () {
return N(this, function (e) {
return [2, a.settingsManager.lockScreenPassword];
});
}),
);
Poiché questa logica risiede interamente lato client, un attaccante può modificare il valore di ritorno in "" (una stringa vuota), bypassando efficacemente la schermata di blocco:
return [2, ""];
Dopo aver modificato e salvato questo file, l'applicazione tratterà la schermata di blocco come se non avesse alcuna password, consentendo così l'accesso senza alcuna autenticazione.
Questa vulnerabilità consente a qualsiasi attaccante locale con accesso al file system di bypassare l'autenticazione a livello di applicazione e ottenere pieno accesso all'interfaccia e alle impostazioni dell'applicazione.
Poiché la password non viene validata contro alcuna fonte esterna ed è esposta tramite JavaScript modificabile, questa schermata di blocco non offre alcuna protezione reale.
Il contenuto del codice può essere manomesso eseguendo poc.py.
Lo screenshot seguente mostra la schermata di blocco dell'applicazione Reolink prima della patch, con il prompt della password abilitato:
Lo screenshot seguente mostra l'applicazione dopo l'applicazione della patch e il riavvio, senza alcun prompt della password visualizzato:

Il codice dell'applicazione deve essere impacchettato in un archivio ASAR e deve essere implementato un processo di verifica dell'integrità, come il controllo del valore hash o della firma del file ASAR, all'avvio. Qualsiasi applicazione che sia stata manomessa deve essere bloccata dall'esecuzione.
La logica critica di autenticazione, come la verifica della password della schermata di blocco, dovrebbe essere gestita all'interno del codice binario nativo, che è più difficile da manomettere, piuttosto che in JavaScript, ove possibile, oppure essere elaborata tramite comunicazione lato server.