☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]

CVE-2025-67445

CVE-2025-67445 Denial of Service in Totolink
📅 PUBLISHED: 2026-02-24 00:00 UTC 🔄 UPDATED: 2026-10-02 19:31 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: 0.35%
👁️
0.35% probability
8.7× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
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
7.5
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-67445 is a critical denial-of-service (DoS) vulnerability affecting the TOTOLINK X5000R router running firmware version V9.1.0cu.2415_B20250515. The flaw resides in the /cgi-bin/cstecgi.cgi CGI binary, which mishandles the CONTENT_LENGTH environment variable. By sending a crafted, oversized POST request, an unauthenticated remote attacker can trigger memory exhaustion or a segmentation fault, causing the management web interface to crash and become unavailable. The vulnerability is classified under CWE-770 (Allocation of Resources Without Limits or Throttling) and is currently unpatched. No public exploit code or proof-of-concept is available at this time.

⚡ 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:N/I:N/A:H
  • Base Score: 7.5 (High)
  • Attack Vector: Network (AV:N)
  • Attack Complexity: Low (AC:L)
  • Privileges Required: None (PR:N)
  • User Interaction: None (UI:N)
  • Scope: Unchanged (S:U)
  • Confidentiality Impact: None (C:N)
  • Integrity Impact: None (I:N)
  • Availability Impact: High (A:H)

Threat Level: High. The vulnerability is remotely exploitable without authentication, requires no user interaction, and directly impacts the availability of the router's management interface. While no public exploit exists, the simplicity of the attack vector (large POST request) makes it trivial to weaponize.

Deep Dive & Mechanics

The vulnerability is a classic resource exhaustion flaw in the CGI handler cstecgi.cgi. The CGI reads the CONTENT_LENGTH environment variable, which is set by the web server (lighttpd) based on the Content-Length header of an incoming HTTP POST request. The code then performs a memory allocation using malloc(CONTENT_LENGTH + 1) without any upper bound validation.

Root Cause:

  • The CGI does not check if CONTENT_LENGTH exceeds a reasonable maximum (e.g., the expected maximum request body size).
  • The web server (lighttpd) does not enforce a request size limit for this specific CGI endpoint, allowing an attacker to set Content-Length to an arbitrarily large value (e.g., several gigabytes).
  • When malloc is called with an extremely large size, it can either:
    • Return NULL (if the system cannot allocate that much memory), leading to a null-pointer dereference and segmentation fault.
    • Succeed but exhaust available system memory, causing the CGI process to be killed by the kernel's OOM killer or causing the entire system to become unresponsive.

Attack Flow:

  1. Attacker sends an HTTP POST request to /cgi-bin/cstecgi.cgi with a Content-Length header set to a very large value (e.g., Content-Length: 9999999999).
  2. The web server passes the CONTENT_LENGTH environment variable to the CGI.
  3. The CGI calls malloc(CONTENT_LENGTH + 1) without validation.
  4. Memory exhaustion or segmentation fault occurs, crashing the CGI process.
  5. The web interface becomes unavailable until the CGI process is restarted (if at all).

Vulnerable vs. Patched Code

Vulnerable Code (Conceptual):

// cstecgi.cgi - vulnerable version
#include <stdlib.h>
#include <string.h>

int main() {
    char *content_length_str = getenv("CONTENT_LENGTH");
    if (content_length_str == NULL) {
        // handle missing header
        return 1;
    }
    long content_length = atol(content_length_str);
    // VULNERABLE: No bounds check on content_length
    char *buffer = (char *)malloc(content_length + 1);
    if (buffer == NULL) {
        // handle malloc failure - but may already be too late
        return 1;
    }
    // read POST data into buffer...
    free(buffer);
    return 0;
}

Patched Code (Conceptual):

// cstecgi.cgi - patched version
#include <stdlib.h>
#include <string.h>
#include <limits.h>

#define MAX_POST_SIZE 1048576  // 1 MB limit

int main() {
    char *content_length_str = getenv("CONTENT_LENGTH");
    if (content_length_str == NULL) {
        return 1;
    }
    long content_length = atol(content_length_str);
    // PATCH: Validate content_length against a maximum
    if (content_length <= 0 || content_length > MAX_POST_SIZE) {
        // reject oversized request
        return 1;
    }
    char *buffer = (char *)malloc(content_length + 1);
    if (buffer == NULL) {
        return 1;
    }
    // read POST data into buffer...
    free(buffer);
    return 0;
}

Key Differences:

  • The patched code introduces a MAX_POST_SIZE constant (e.g., 1 MB) and validates the content_length against it before allocation.
  • The patched code also checks for negative or zero values to prevent integer underflow issues.

Exploitation & Lab Setup

Red Team

Prerequisites:

  • Target: TOTOLINK X5000R with firmware V9.1.0cu.2415_B20250515
  • Network access to the router's management interface (typically port 80 or 443)
  • No authentication required

Exploitation Steps:

  1. Identify the target router's IP address (e.g., 192.168.1.1).
  2. Send a crafted HTTP POST request with an oversized Content-Length header:
    curl -X POST http://192.168.1.1/cgi-bin/cstecgi.cgi \
         -H "Content-Length: 9999999999" \
         -H "Content-Type: application/x-www-form-urlencoded" \
         --data-binary @/dev/zero
    
    Alternatively, using netcat:
    echo -e "POST /cgi-bin/cstecgi.cgi HTTP/1.1\r\nHost: 192.168.1.1\r\nContent-Length: 9999999999\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n" | nc 192.168.1.1 80
    
  3. The CGI process will crash, causing the web interface to become unresponsive.
  4. Verify the DoS by attempting to access the router's web interface (e.g., http://192.168.1.1). It should time out or return an error.

Expected Outcome: The router's management web interface becomes unavailable until the CGI process is manually restarted or the router is rebooted.

Blue Team

Detection:

  • Monitor for HTTP POST requests to /cgi-bin/cstecgi.cgi with abnormally large Content-Length headers (e.g., > 1 MB).
  • Look for repeated connection attempts to the same CGI endpoint from a single source IP.
  • Monitor system logs for OOM killer events or segmentation faults in the cstecgi process.

Mitigation:

  • Immediate: Restrict access to the management interface to trusted IP addresses only (e.g., via firewall rules).
  • Temporary: Disable the vulnerable CGI endpoint if not required, or implement a reverse proxy that enforces request size limits.
  • Long-term: Apply a firmware patch from TOTOLINK when available, or implement input validation in the CGI code.

Hunting Queries:

  • Search for HTTP requests with Content-Length exceeding 1 MB targeting /cgi-bin/cstecgi.cgi.
  • Correlate with system logs showing malloc failures or segmentation faults.

Indicators of Compromise (IOCs)

  • Network IOCs:

    • HTTP POST requests to /cgi-bin/cstecgi.cgi with Content-Length > 1048576 (1 MB)
    • Source IP addresses repeatedly sending large POST requests to the router
    • Unusual HTTP response codes (e.g., 500 Internal Server Error, connection resets)
  • System IOCs:

    • Kernel logs indicating OOM killer activity (e.g., Out of memory: Kill process)
    • Segmentation fault logs for the cstecgi process (e.g., segfault at ... in cstecgi)
    • High memory usage spikes on the router
  • File IOCs:

    • Core dump files generated by the crashed CGI process (if enabled)

Detection Engineering

YARA Rule

rule CVE_2025_67445_TOTOLINK_X5000R_DOS {
    meta:
        description = "Detects HTTP POST requests targeting TOTOLINK X5000R CGI with oversized Content-Length"
        author = "Valters IT"
        date = "2025-04-10"
        cve = "CVE-2025-67445"
        severity = "high"
    strings:
        $cgi_path = "/cgi-bin/cstecgi.cgi"
        $content_length = /Content-Length:\s*\d{7,}/  // 7+ digits = >= 1,000,000
    condition:
        $cgi_path and $content_length
}

Sigma Rule

title: TOTOLINK X5000R DoS via Oversized POST Request
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects HTTP POST requests to /cgi-bin/cstecgi.cgi with Content-Length exceeding 1 MB
author: Valters IT
date: 2025-04-10
tags:
    - attack.t1499
    - cve.2025.67445
logsource:
    category: webserver
    product: lighttpd
detection:
    selection:
        cs-method: POST
        cs-uri-stem: "/cgi-bin/cstecgi.cgi"
        sc-content-length|gte: 1048577
    condition: selection
falsepositives:
    - Legitimate large file uploads (unlikely for this endpoint)
level: high

Suricata Rule

alert http $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS (
    msg:"CVE-2025-67445 TOTOLINK X5000R DoS Attempt";
    flow:to_server,established;
    content:"POST"; http_method;
    content:"/cgi-bin/cstecgi.cgi"; http_uri;
    content:"Content-Length"; http_header;
    pcre:"/Content-Length:\s*\d{7,}/i";
    classtype:attempted-dos;
    sid:10000001;
    rev:1;
    reference:cve,2025-67445;
    priority:1;
)

Remediation & Mitigation

Immediate Actions:

  1. Restrict Network Access: Limit access to the router's management interface to trusted IP addresses only using firewall rules or ACLs.
  2. Disable CGI Endpoint: If the /cgi-bin/cstecgi.cgi endpoint is not required, disable it in the web server configuration.
  3. Implement Reverse Proxy: Place a reverse proxy (e.g., Nginx, HAProxy) in front of the router that enforces a maximum request body size (e.g., client_max_body_size 1m).

Long-term Fix:

  • Apply a firmware patch from TOTOLINK when available. The patch should include input validation on the CONTENT_LENGTH environment variable, limiting it to a reasonable maximum (e.g., 1 MB).
  • If patching is not possible, consider replacing the router with a supported model.

Workaround:

  • If the router's firmware cannot be updated, implement a custom iptables rule to drop packets with excessive Content-Length headers:
    iptables -A INPUT -p tcp --dport 80 -m string --string "Content-Length: " --algo bm -m connbytes --connbytes 1048577: --connbytes-dir both --connbytes-mode bytes -j DROP
    
    (Note: This is a simplified example; actual implementation may require more complex string matching.)

Valters IT

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