
# Vulnérabilité d'injection de commandes système via le planificateur de nettoyage du cache dans l'application de bureau Reolink
L'application de bureau Reolink (version 8.18.12) contient une vulnérabilité d'injection de commandes OS dans sa fonctionnalité de planificateur de nettoyage du cache (coverCacheClearScheduler). L'application construit une commande shell OS en utilisant un chemin de dossier temporaire lu à partir d'un fichier de configuration situé dans . Comme cette valeur de chemin ne fait l'objet d'aucune assainissement approprié des entrées, un attaquant peut la manipuler pour injecter des commandes OS arbitraires.
%LOCALAPPDATA%Cette vulnérabilité est déclenchée par le planificateur, qui s'exécute automatiquement chaque jour à 3 h 00, offrant ainsi à l'attaquant une persistance sur le système. De plus, la commande injectée est exécutée dans le cadre du processus légitime Reolink.exe signé numériquement, ce qui confère une discrétion en échappant à la détection des solutions de sécurité.
L'application initialise un planificateur pour s'exécuter chaque jour à 3 h 00 :
{
key: "clearCoverCacheRegularly",
value: function () {
if (this.coverCacheClearScheduler) {
var e = new Date(),
t = new Date(
e.getFullYear(),
e.getMonth(),
e.getDate(),
3,
0,
0,
).getTime();
(e.getTime() > t &&
(t = new Date(
e.getFullYear(),
e.getMonth(),
e.getDate() + 1,
3,
0,
0,
).getTime()),
this.coverCacheClearScheduler.add({
id: this.clearCoverCacheTaskId,
name: "clearCoverCache",
unit: r.ETaskUnit.DAY,
interval: 1,
args: !1,
execute: this.removeCoverCacheDir,
nextTime: t,
isInExact: !0,
}),
this.coverCacheClearScheduler.start());
}
},
}
La fonction exécutée par le planificateur construit une chaîne de commande shell en utilisant la logique suivante :
p(
"darwin" === process.platform
? "rm -rf ".concat(t)
: "rd /s /q ".concat(t),
function (t) {
//...
Sous Windows, la commande résultante est :
rd /s /q %LOCALAPPDATA%\Temp\reolink\<TEMP_FOLDER>\playback-covers
Sous macOS, la commande résultante est :
rm -rf ~/Library/Caches/reolink/<TEMP_FOLDER>/playback-covers
Comme <TEMP_FOLDER> n'est pas correctement assaini, un attaquant peut injecter des commandes supplémentaires via la manipulation du nom de dossier, conduisant à l'exécution de commandes :
rd /s /q %LOCALAPPDATA%\Temp\reolink\& <COMMAND> &\playback-covers
rm -rf ~/Library/Caches/reolink/& <COMMAND>; echo /playback-covers
Le déclenchement de l'attaque nécessite une modification locale de fichiers, ce qui implique une autre vulnérabilité, l'exécution d'un logiciel malveillant ou un accès physique au système.
Bien que le déclenchement initial soit relativement difficile, l'attaque est très efficace une fois réussie, car elle offre une persistance en réexécutant automatiquement la charge utile toutes les 3 h 00. Cette persistance est encore renforcée par la nature de l'application en tant qu'outil de sécurité physique, souvent laissée en fonctionnement 24 h/24 et 7 j/7. Elle prend également en charge une fonctionnalité de « démarrage au démarrage », garantissant que la charge utile survit aux redémarrages.
De plus, l'attaquant bénéficie d'une discrétion significative. La commande s'exécute dans le cadre du processus fiable Reolink.exe signé numériquement, ce qui la rend très efficace pour contourner les solutions EDR et de liste blanche d'applications. Il s'agit d'une technique classique de Living Off the Land (LOTL).
L'attaque peut être exécutée en lançant poc.py, qui modifie le fichier de configuration local. Cela est rendu possible en enchaînant d'autres vulnérabilités liées à un chiffrement insuffisant (CVE-2025-56801 et CVE-2025-56802), utilisées pour déchiffrer et rechiffrer le fichier de configuration.
Normalement, la charge utile ne se déclencherait qu'à 3 h 00. Cependant, comme l'application n'utilise pas l'empaquetage ASAR, le code peut être corrigé pour déclencher la vulnérabilité immédiatement à des fins de démonstration.
Le résultat de l'exécution est le suivant :
Pour plus de détails, veuillez vous référer à CVE-2025-56801 pour la vulnérabilité de génération IV AES-CFB et à CVE-2025-56802 pour la vulnérabilité de génération et de gestion des clés AES-CFB.
Pour résoudre fondamentalement cette vulnérabilité d'injection de commandes OS, vous devez éviter d'inclure directement des valeurs lues à partir de sources externes non fiables, telles que les fichiers de configuration utilisateur, dans les chaînes de commandes shell OS. La solution recommandée consiste à remplacer l'utilisation de commandes shell comme rd ou rm par des API natives qui traitent le chemin comme des données pures, et non comme une commande, telles que fs.rm() de Node.js. Cette méthode élimine complètement cette classe de vulnérabilité.
Si la construction d'une commande shell est absolument inévitable, une logique défensive doit être mise en œuvre pour valider strictement et assainir ou échapper tous les caractères spéciaux susceptibles de provoquer une injection de commandes, tels que &, | et ;.