
Уязвимость генерации и управления ключами AES-CFB в настольном приложении Reolink
Настольное приложение 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("<РАСШИФРОВАННАЯ_СТРОКА>").upper().encode(), а IV остаётся прежним (bcswebapp1234567). Он используется для расшифровки файла конфигурации <UUID>.json.
Выполнив poc.py, вы можете получить итоговый ключ до его хеширования MD5 (в формате 59083200-3875-4f67-a067-d953286114a0) и содержимое файла конфигурации.
Хеш жёстко заданной статической строки, такой как com.reolink.app, не должен использоваться в качестве основного ключа.
Кроме того, ключи не должны храниться в предсказуемом локальном файле, например в %APPDATA%. Для защиты всех конфиденциальных учётных данных необходимо использовать надёжные проверенные хранилища ключей, предоставляемые операционной системой, такие как Windows DPAPI или связка ключей macOS.