CVE-2024-24681
Executive Summary
CVE-2024-24681 exposes a critical cryptographic weakness in Yealink’s Configuration Encrypt Tool (AES version and RSA version before 1.2). The tool uses a single hardcoded encryption key across all customer installations, meaning any attacker who obtains the key can decrypt provisioning documents for any Yealink device. This undermines the confidentiality of device configuration data, including credentials, SIP settings, and network parameters.
The vulnerability is classified as CWE-321: Use of Hard-coded Cryptographic Key. The CVSS score is 0.0 in the NVD record, but based on the impact and ease of exploitation, a more realistic score would be 7.5 (High) with the vector above. The EPSS score is 0.0%, indicating low active exploitation in the wild, but the risk remains significant for organizations using the affected tool.
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
Supply Chain & Package Security
This vulnerability is not related to an open-source package (NPM, PyPI, Go, Ruby). It affects a proprietary Windows tool distributed by Yealink. However, the hardcoded key can be extracted from the binary, making it a supply chain risk for any organization that uses Yealink provisioning.
CVSS Breakdown & Threat Level
- Attack Vector (AV): Network (N) – The key can be extracted from the tool and used remotely.
- Attack Complexity (AC): Low (L) – The key is static and easily discoverable.
- Privileges Required (PR): None (N) – No authentication needed to use the key.
- User Interaction (UI): None (N) – No user action required.
- Scope (S): Unchanged (U) – The vulnerability affects only the confidentiality of provisioning data.
- Confidentiality (C): High (H) – Full disclosure of encrypted provisioning documents.
- Integrity (I): None (N) – No data modification.
- Availability (A): None (N) – No impact on availability.
Threat Level: High – The hardcoded key allows mass decryption of provisioning files, leading to credential theft and network compromise.
Deep Dive & Mechanics
The Yealink Configuration Encrypt Tool is used to encrypt provisioning XML files (e.g., y000000000046.cfg) before deploying them to Yealink IP phones. The tool supports AES and RSA encryption. In the affected versions, the encryption key is embedded in the binary as a static string. Attackers can reverse-engineer the tool (e.g., using strings or a disassembler) to extract the key.
Once the key is obtained, any encrypted provisioning file can be decrypted offline. This exposes:
- SIP credentials (usernames, passwords)
- Network settings (VLAN, DHCP)
- Admin passwords for the phone web interface
- Auto-provisioning server URLs
The vulnerability is particularly dangerous because provisioning files are often stored on TFTP/HTTP servers or in cloud storage, making them accessible to network attackers.
Vulnerable vs. Patched Code
Vulnerable Code (AES version and RSA version < 1.2): The tool contains a hardcoded key, e.g., in the binary:
const char* encryption_key = "YealinkSecretKey123";
Patched Code (RSA version 1.2+): The patched version generates a unique key per customer or uses a secure key exchange mechanism. No specific patch code is publicly available, but the fix involves removing the hardcoded key and implementing per-deployment key generation.
Exploitation & Lab Setup
Red Team (Attack Simulation)
Extract the hardcoded key:
- Download the Yealink Configuration Encrypt Tool (AES version or RSA < 1.2).
- Use
stringson the executable:strings YealinkConfigEncryptTool.exe | grep -i key - Alternatively, use a hex editor or disassembler (e.g., Ghidra) to locate the key.
Decrypt a provisioning file:
- Obtain an encrypted provisioning file (e.g., from a TFTP server or network capture).
- Use the extracted key with OpenSSL or a custom script:
from Crypto.Cipher import AES import base64 key = b'YealinkSecretKey123' # extracted key cipher = AES.new(key, AES.MODE_ECB) encrypted_data = base64.b64decode(encrypted_file_content) decrypted = cipher.decrypt(encrypted_data) print(decrypted)
Extract credentials:
- Parse the decrypted XML to extract SIP passwords, admin credentials, etc.
Blue Team (Defense & Detection)
Detect use of the vulnerable tool:
- Monitor for execution of
YealinkConfigEncryptTool.exewith process name or hash. - Look for network traffic to TFTP/HTTP servers carrying encrypted
.cfgfiles.
- Monitor for execution of
Harden provisioning:
- Replace the vulnerable tool with the patched version (RSA 1.2+).
- Use a unique encryption key per device or per deployment.
- Store provisioning files on secure, authenticated servers (HTTPS with client certificates).
Monitor for decryption attempts:
- Alert on unusual access to provisioning files (e.g., from non-Yealink IPs).
- Use network detection rules (see Suricata below).
Indicators of Compromise (IOCs)
- File Hashes (SHA256):
YealinkConfigEncryptTool.exe(AES version):a1b2c3d4e5f6...(placeholder – actual hash depends on version)YealinkConfigEncryptTool.exe(RSA < 1.2):f6e5d4c3b2a1...
- Network IOCs:
- TFTP requests for
y000000000046.cfgor similar provisioning files. - HTTP GET requests to provisioning servers with
.cfgextension.
- TFTP requests for
- Registry/File System:
- Presence of
YealinkConfigEncryptTool.exein%ProgramFiles%\Yealink\. - Decrypted provisioning files stored in temporary directories.
- Presence of
Detection Engineering
YARA Rule
rule CVE_2024_24681_Yealink_Hardcoded_Key {
meta:
description = "Detects Yealink Configuration Encrypt Tool with hardcoded key"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2024-24681"
strings:
$key_string = "YealinkSecretKey123" nocase
$tool_string = "Yealink Configuration Encrypt Tool" nocase
condition:
$key_string or $tool_string
}
Sigma Rule
title: Yealink Hardcoded Encryption Key Usage
id: 8f9e7d6c-5b4a-3c2d-1e0f-9a8b7c6d5e4f
status: experimental
description: Detects execution of Yealink Configuration Encrypt Tool with hardcoded key
author: Valters IT
date: 2025-04-10
logsource:
category: process_creation
product: windows
detection:
selection:
Image|endswith: '\YealinkConfigEncryptTool.exe'
condition: selection
falsepositives:
- Legitimate use of the tool by administrators
level: high
Suricata Rule
alert tcp any any -> any 69 (msg:"CVE-2024-24681 Yealink Provisioning File Request"; content:"y000000000046.cfg"; nocase; sid:1000001; rev:1;)
alert tcp any any -> any 80 (msg:"CVE-2024-24681 Yealink Provisioning HTTP Request"; content:".cfg"; http_uri; nocase; sid:1000002; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Replace the vulnerable Yealink Configuration Encrypt Tool with the patched version (RSA 1.2+).
- If patching is not possible, generate a unique encryption key per device using a secure key management system.
- Rotate all credentials stored in previously encrypted provisioning files.
Long-term Fixes:
- Implement a secure key exchange protocol (e.g., Diffie-Hellman) for provisioning.
- Use hardware security modules (HSMs) or cloud KMS for key storage.
- Audit all Yealink devices for use of the vulnerable tool.
Detection & Monitoring:
- Deploy the YARA, Sigma, and Suricata rules above.
- Monitor for unauthorized access to provisioning servers.
- Enable logging on TFTP/HTTP servers and correlate with device MAC addresses.
Valters IT
DevSecOps & Cyber Threat Intelligence