
Reolink 데스크톱 애플리케이션의 AES-CFB 키 생성 및 관리 취약점
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 Keychain과 같은 운영 체제에서 제공하는 강력하고 검증된 보안 키 저장소를 사용하여 모든 민감한 자격 증명을 보호해야 합니다.