
Vulnerabilidad de Inyección de Comandos del Sistema Operativo a través del Programador de Limpieza de Caché en la Aplicación de Escritorio de Reolink
La Aplicación de Escritorio de Reolink (versión 8.18.12) contiene una vulnerabilidad de inyección de comandos del sistema operativo en su función de programador de limpieza de caché (coverCacheClearScheduler). La aplicación construye un comando de shell del sistema operativo utilizando una ruta de carpeta temporal leída de un archivo de configuración ubicado dentro de . Debido a que este valor de ruta carece de una sanitización adecuada de entrada, un atacante puede manipularlo para inyectar comandos arbitrarios del sistema operativo.
%LOCALAPPDATA%Esta vulnerabilidad se activa mediante el programador, que se ejecuta automáticamente todos los días a las 3:00 AM, proporcionando al atacante persistencia en el sistema. Además, el comando inyectado se ejecuta como parte del proceso legítimo y firmado digitalmente Reolink.exe, lo que otorga sigilo al evadir la detección de las soluciones de seguridad.
La aplicación inicializa un programador para ejecutarse todos los días a las 3:00 AM:
{
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 función ejecutada por el programador construye una cadena de comando de shell utilizando la siguiente lógica:
p(
"darwin" === process.platform
? "rm -rf ".concat(t)
: "rd /s /q ".concat(t),
function (t) {
//...
En Windows, el comando resultante es:
rd /s /q %LOCALAPPDATA%\Temp\reolink\<CARPETA_TEMPORAL>\playback-covers
En macOS, el comando resultante es:
rm -rf ~/Library/Caches/reolink/<CARPETA_TEMPORAL>/playback-covers
Dado que <CARPETA_TEMPORAL> no se sanitiza adecuadamente, un atacante puede inyectar comandos adicionales mediante la manipulación del nombre de la carpeta, lo que lleva a la ejecución de comandos:
rd /s /q %LOCALAPPDATA%\Temp\reolink\& <COMANDO> &\playback-covers
rm -rf ~/Library/Caches/reolink/& <COMANDO>; echo /playback-covers
Desencadenar el ataque requiere la modificación local de archivos, lo que necesita otra vulnerabilidad, la ejecución de malware o acceso físico al sistema.
Aunque el desencadenante inicial es relativamente difícil, el ataque es altamente efectivo una vez que tiene éxito, ya que proporciona persistencia al re-ejecutar el payload automáticamente cada 3:00 AM. Esta persistencia se ve reforzada por la naturaleza de la aplicación como herramienta de seguridad física, que a menudo se deja ejecutando 24/7. También admite una función de 'iniciar al arrancar', lo que garantiza que el payload sobreviva a los reinicios.
Además, el atacante obtiene un sigilo significativo. El comando se ejecuta como parte del proceso confiable y firmado digitalmente Reolink.exe, lo que lo hace altamente efectivo para evadir soluciones de EDR y listas blancas de aplicaciones. Esta es una técnica clásica de Living Off the Land (LOTL).
El ataque se puede ejecutar ejecutando poc.py, que modifica el archivo de configuración local. Esto es posible encadenando otras vulnerabilidades relacionadas con el cifrado insuficiente (CVE-2025-56801 y CVE-2025-56802), que se utilizan para descifrar y volver a cifrar el archivo de configuración.
Normalmente, el payload solo se activaría a las 3:00 AM. Sin embargo, debido a que la aplicación no utiliza empaquetado ASAR, el código se puede parchear para activar la vulnerabilidad inmediatamente con fines de demostración.
El resultado de la ejecución es el siguiente:
Para más detalles, consulte CVE-2025-56801 para la Vulnerabilidad de Generación de IV AES-CFB y CVE-2025-56802 para la Vulnerabilidad de Generación y Gestión de Claves AES-CFB.
Para resolver fundamentalmente esta vulnerabilidad de inyección de comandos del sistema operativo, debe evitar incluir directamente valores leídos de fuentes externas no confiables, como archivos de configuración de usuario, en cadenas de comandos de shell del sistema operativo. La solución recomendada es reemplazar el uso de comandos de shell como rd o rm con APIs nativas que traten la ruta como datos puros, no como un comando, como fs.rm() de Node.js. Este método elimina por completo esta clase de vulnerabilidad.
Si construir un comando de shell es absolutamente inevitable, se debe implementar una lógica defensiva para validar estrictamente y sanitizar o escapar todos los caracteres especiales que podrían causar inyección de comandos, como &, | y ;.