{"id":"CVE-2026-63502","kind":"vulnerability","aliases":["CVE-2026-63502"],"related":[],"title":"Yeti: export task name lets authenticated users read and write arbitrary files","description":"Yeti bridges the gap between CTI and DFIR practitioners by providing a Forensics Intelligence platform and pipeline. Prior to 2.5.1, YETI derives ExportTask.file_name from the user-controlled task name and passes it to core/clients/file_storage/classes/local_storage.py without sanitizing traversal sequences or enforcing path confinement. A low-privileged authenticated user using the default local storage backend can call POST /api/v2/tasks/export/new with a traversal name and use ExportTask.file_contents through GET /api/v2/tasks/export/{export_id}/content to read files accessible to the YETI service account. Running ExportTask.run() can also write attacker-controlled export output to an attacker-selected writable path. The impact depends on the service account's filesystem permissions, and universal code execution is not established. This issue is fixed in version 2.5.1.","summary":"Yeti's export feature builds a file path from a user-chosen task name without blocking directory traversal sequences, so a low-privileged logged-in user can read files the Yeti service account can access. Running the export can also write attacker-controlled output to a chosen writable path.","severity":"high","cvss":8.3,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["dfir","package","self-hosted","threat-intel","yeti"],"not_affected_if":["non-local-storage-backend","version-2.5.1-or-later"],"how_to_check":"- Check the installed Yeti version and whether it is below `2.5.1`\n- Confirm whether the default local storage backend is in use (core/clients/file_storage/classes/local_storage.py)\n- Review whether non-admin users can call POST /api/v2/tasks/export/new","fix":"- Move Yeti to `2.5.1` or later","status":"open","published_at":"2026-11-03T20:18:17+00:00","first_seen_at":"2026-11-03T20:49:23+00:00","triaged_at":"2026-11-03T20:49:50+00:00","updated_at":"2026-11-03T20:49:50+00:00","category":"package","confidence":0.75,"triage":{"at":"2026-11-03T20:49:50Z","model":"claude-haiku-5-5","output":{"fix":"- Move Yeti to `2.5.1` or later","reach":"network","title":"Yeti: export task name lets authenticated users read and write arbitrary files","impact":"medium","summary":"Yeti's export feature builds a file path from a user-chosen task name without blocking directory traversal sequences, so a low-privileged logged-in user can read files the Yeti service account can access. Running the export can also write attacker-controlled output to a chosen writable path.","audience":"businesses","category":"package","nicknames":[],"who_cares":["yeti","self-hosted","dfir","threat-intel"],"confidence":0.75,"fix_status":"available","needs_auth":"yes","worst_case":"attacker reads or writes files the service account can access","analyst_note":"","how_to_check":"- Check the installed Yeti version and whether it is below `2.5.1`\n- Confirm whether the default local storage backend is in use (core/clients/file_storage/classes/local_storage.py)\n- Review whether non-admin users can call POST /api/v2/tasks/export/new","plain_action":"","needs_analyst":false,"not_affected_if":["version-2.5.1-or-later","non-local-storage-backend"],"who_is_affected":"Teams running self-hosted Yeti before 2.5.1 with the default local file storage, where any logged-in user can create export tasks. Impact depends on what the Yeti service account can read or write on the host. Deployments on patched versions or with a different storage backend are not described as affected.","user_interaction":"no","needs_special_setup":"no","severity_if_unknown":"high"},"cost_usd":0.000707,"input_tokens":4364,"output_tokens":541,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-2026':14A,17A '-63502':15A,18A '/api/v2/tasks/export':151C '/api/v2/tasks/export/new':140C '/content':154C '2.5.1':100C,204C 'access':65B,158C 'account':63B,163C,187C 'also':70B,167C 'arbitrari':11A 'attack':73B,170C,177C 'attacker-control':72B,169C 'attacker-select':176C 'authent':6A,129C 'backend':136C 'block':44B 'bridg':82C 'build':32B 'call':138C 'chosen':40B,78B 'code':193C 'confin':124C 'content':148C 'control':74B,109C,171C 'core/clients/file_storage/classes/local_storage.py':116C 'cti':86C 'cve':13A,16A 'default':133C 'depend':183C 'deriv':102C 'dfir':19B,88C 'directori':45B 'enforc':122C 'establish':197C 'execut':194C 'export':2A,30B,68B,152C,172C 'exporttask.file':103C,147C 'exporttask.run':165C 'featur':31B 'file':12A,34B,59B,157C 'filesystem':189C 'fix':201C 'forens':93C 'gap':84C 'get':150C 'host':23B 'id':153C 'impact':182C 'intel':26B 'intellig':94C 'issu':199C 'let':5A 'local':134C 'log':54B 'logged-in':53B 'low':51B,127C 'low-privileg':50B,126C 'name':4A,42B,104C,111C,144C 'output':75B,173C 'packag':20B 'pass':113C 'path':35B,80B,123C,180C 'permiss':190C 'pipelin':97C 'platform':95C 'post':139C 'practition':89C 'prior':98C 'privileg':52B,128C 'provid':91C 'read':8A,58B,156C 'run':66B,164C 'sanit':118C 'select':178C 'self':22B 'self-host':21B 'sequenc':47B,120C 'servic':62B,162C,186C 'storag':135C 'task':3A,41B,110C 'threat':25B 'threat-intel':24B 'travers':46B,119C,143C 'univers':192C 'use':131C,146C 'user':7A,39B,56B,108C,130C 'user-chosen':38B 'user-control':107C 'version':203C 'without':43B,117C 'writabl':79B,179C 'write':10A,71B,168C 'yeti':1A,27B,28B,61B,81C,101C,161C","nicknames":[],"mitigations":[],"who_affected":"Teams running self-hosted Yeti before 2.5.1 with the default local file storage, where any logged-in user can create export tasks. Impact depends on what the Yeti service account can read or write on the host. Deployments on patched versions or with a different storage backend are not described as affected.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["dfir","high","package","selfhosted","threatintel","yeti"],"campaign_type":null,"first_public_at":"2026-07-01T14:36:16+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:L","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-63502","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-63502","severity":null,"published_at":"2026-11-03T20:18:17+00:00","modified_at":"2026-11-03T20:18:17+00:00","first_seen_at":"2026-11-03T20:49:23+00:00","fetched_at":"2026-11-03T20:49:23+00:00","note":null}],"documents":[{"id":60619,"url":"https://github.com/yeti-platform/yeti/commit/bfd7c2424dc05dea2d46b5b106b5071f959d5d5a","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":60608,"url":"https://github.com/yeti-platform/yeti/releases/tag/2.5.1","title":"Release notes: github.com","kind":"release","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Release notes: github.com"},{"id":60621,"url":"https://github.com/yeti-platform/yeti/security/advisories/GHSA-4q3w-w2g5-8wqq","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-07-01T14:36:16+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"}],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}