Reolink 桌面应用程序(版本 8.18.12)使用 AES-CFB 算法对配置文件和其他敏感数据进行加密。
然而,加密密钥的处理方式不安全,攻击者可以轻松解密受保护的配置数据。
Reolink 应用程序将用户配置和其他敏感信息存储在以下路径:
%APPDATA%\reolink\<UUID>.json
<UUID> 的格式如下:
424e044d-aa27-4e59-873a-26b9f16be9ad该配置文件使用 AES-CFB 加密,用于解密的 AES 密钥通过以下过程生成:
打开位于以下路径的文件:
%APPDATA%\com.reolink.app.client
该文件包含 JSON 格式的数据,例如:
{
"data": "+lWlitlpr9vBiG71RCJYoPSJKVnUgGVbgu4v9W6K3N0kzgLv9HEQpqVi2fMnHdb7iWhYgb5KeRhYb6IPVWRR4kxTcwTDfQmMOvFWLuqHPRJBt9ozPSo4TYDXzjBN0YAW",
"__internal__": {
"migrations": {
"version": "8.18.12"
}
}
}
应用程序使用 MD5("com.reolink.app").upper() 作为主 AES 密钥,并使用 bcswebapp1234567 作为 IV。加密字符串(data)经过 base64 解码后进行解密。解密后的字符串格式如下:59083200-3875-4f67-a067-d953286114a0
最终密钥为 MD5("<DECRYPTED_STRING>").upper().encode(),IV 保持不变(bcswebapp1234567)。该密钥用于解密配置文件 <UUID>.json。
通过执行 poc.py,您可以获取经过 MD5 哈希之前的最终密钥(格式为 59083200-3875-4f67-a067-d953286114a0)以及配置文件的内容。
不应将硬编码静态字符串(如 com.reolink.app)的哈希值用作主密钥。
此外,密钥不应存储在可预测的本地文件中(例如 %APPDATA%)。必须使用操作系统提供的强大且经过验证的安全密钥存储机制(如 Windows DPAPI 或 macOS Keychain)来保护所有敏感凭据。