
Vulnérabilité de contournement de l'authentification locale dans l'application de bureau Reolink
L'application de bureau Reolink (version 8.18.12) contient une vulnérabilité de contournement de l'authentification locale dans sa fonctionnalité d'écran de verrouillage. Le code source de l'application n'est pas empaqueté dans une archive ASAR, ce qui laisse la logique d'authentification critique, telle que la vérification du mot de passe, exposée en texte clair dans les fichiers JavaScript côté client. Il suffit de modifier la logique de ce code exposé pour neutraliser la vérification du mot de passe et contourner l'écran de verrouillage.
Le mot de passe de l'écran de verrouillage est stocké et récupéré via le code JavaScript du bundle de ressources local, plus précisément :
%LOCALAPPDATA%\Programs\Reolink\resources\app\~node_modules_sharp_vendor_Sync_recursive_versions_json_~private_main_index_ts.js
Le code concerné enregistre un gestionnaire pour la commande get_settings_lock_screen_password, qui renvoie le mot de passe stocké à partir de la propriété a.settingsManager.lockScreenPassword :
this.registerCommonCmd(
"get_settings_lock_screen_password",
"",
R(function () {
return N(this, function (e) {
return [2, a.settingsManager.lockScreenPassword];
});
}),
);
Étant donné que cette logique réside entièrement côté client, un attaquant peut modifier la valeur de retour en "" (une chaîne vide), contournant ainsi efficacement l'écran de verrouillage :
return [2, ""];
Après avoir modifié et enregistré ce fichier, l'application considérera l'écran de verrouillage comme n'ayant aucun mot de passe, accordant ainsi l'accès sans aucune authentification.
Cette vulnérabilité permet à tout attaquant local disposant d'un accès au système de fichiers de contourner l'authentification au niveau de l'application et d'obtenir un accès complet à l'interface et aux paramètres de l'application.
Étant donné que le mot de passe n'est validé auprès d'aucune source externe et qu'il est exposé via un JavaScript modifiable, cet écran de verrouillage n'offre aucune protection réelle.
Le contenu du code peut être falsifié en exécutant poc.py.
La capture d'écran suivante montre l'écran de verrouillage de l'application Reolink avant l'application du correctif, avec une invite de mot de passe activée :
La capture d'écran suivante montre l'application après l'application du correctif et le redémarrage, sans invite de mot de passe affichée :

Le code de l'application doit être empaqueté dans une archive ASAR, et un processus de vérification de l'intégrité, tel que la vérification de la valeur de hachage ou de la signature du fichier ASAR, doit être mis en œuvre au démarrage. Toute application ayant été falsifiée doit être bloquée à l'exécution.
La logique d'authentification critique, telle que la vérification du mot de passe de l'écran de verrouillage, doit être gérée dans le code binaire natif, qui est plus difficile à falsifier, plutôt que dans JavaScript, dans la mesure du possible, ou être traitée via une communication côté serveur.