Skip to main content

Immich ML Service EUVDEUVD-2026-114375

| CVE-2026-119328 MEDIUM
Path Traversal (CWE-22)
2026-10-30 GitHub_M
6.5
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Reach unauthenticated ML /predict on port 3003
  2. Delivery
    Send crafted options with attacker-controlled cache_dir
  3. Exploit
    Model files written to target, induce load failure
  4. Execution
    clear_cache() runs shutil.rmtree on path
  5. Impact
    Recursive deletion / arbitrary write in mounted volumes

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Path canonicalization, traversal prevention
MITRE ATT&CK

2 techniques across 2 tactics: Discovery, Collection

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

The ML FastAPI service must be network-reachable on its port (3003), which is the default: it has no authentication on any route and binds all interfaces, and the release docker-compose.prod.yml publishes 3003:3003 (otherwise it is still reachable to anything on the Docker network or in remote-ML deployments). The arbitrary-write sink triggers on any /predict request because snapshot_download writes to the attacker-supplied cache_dir. The destructive recursive-delete sink additionally requires inducing a model-load failure (OSError/InvalidProtobuf/BadZipFile/NoSuchFile), which the attacker can provoke, e.g. via a model_format mismatch. Actual impact is bounded by container filesystem permissions and whether the chosen path is writable/deletable by the ML process; the model-name allowlist limits the flaw to path write/delete and prevents escalation to code execution. Affected versions are <= 3.0.3 (confirmed), fixed in 3.3.0.

Impact

This is a genuine, unauthenticated, network-reachable integrity/availability flaw (CWE-22/CWE-73) in Immich's machine-learning service, but the severity signals conflict and must be reconciled. CVSS vector AV:N/AC:L/PR:N/UI:N confirms remote, low-complexity, unauthenticated exploitation with no user interaction - the advisory corroborates this (no auth on any ML route, binds [::]:3003, docker-compose.prod.yml publishes 3003:3003). The two CVSS scores disagree on impact: NVD rates it 6.5 with C:N/I:L/A:L, while the vendor GHSA rates it 8.6 with C:N/I:H/A:H. The discrepancy is explicitly about impact magnitude, not mechanism: the primary() sink is shutil.rmtree() on an attacker-chosen cache_dir, which can recursively delete a mounted photo/data volume - that justifies the vendor's I:H/A:H, and I assess the higher impact as the more defensible reading because data loss of a mounted library is realistic. No EPSS score and no KEV status were provided, so there is no evidence of active exploitation; the vuln.today decision label is this_month (prioritize, not emergency). A validated proof-of-concept is published in the GHSA advisory itself (the author states the real shutil.rmtree deleted an attacker-named directory on the Linux code path), so working exploitation detail is public even though this is not CISA-KEV-listed. Importantly, the advisory and the CVE description both confirm the model-name allowlist prevents escalation to arbitrary-model deserialization or RCE - despite the input Tags claiming 'RCE' and 'Deserialization', those are not achievable here. Net: a real priority for any internet- or shared-network-exposed ML deployment, bounded to write/delete (no confidentiality, no code execution), not a theoretical high-CVSS-only issue.

Exploit ScenarioDerived

An attacker with network access to the unauthenticated ML service (default port 3003) sends a crafted /predict request whose options object sets cache_dir to a sensitive writable path such as a mounted /data photo volume; model files are written there, and by inducing a model-load failure (e.g. a model_format mismatch) the attacker causes clear_cache() to call shutil.rmtree() on that path, recursively deleting it. A validated proof-of-concept curl request is published in the GHSA advisory, which states the real shutil.rmtree deleted an attacker-named victim directory on the Linux container path.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 30, 2026

Unauthenticated filesystem path injection in Immich's machine-learning service (vulnerable through 3.0.3, fixed in 3.3.0) lets any client that can reach port 3003 supply an arbitrary cache_dir through the /predict options object, turning model download into an arbitrary-directory write and, on a provoked model-load failure, into a recursive delete of an attacker-chosen path. The endpoint has no authentication on any route and the release docker-compose publishes 3003:3003, so the flaw is reachable pre-auth wherever the ML port is exposed; an attacker-shaped request that sets cache_dir to a mounted media or data volume can corrupt or destroy stored files, bounded by the ML process's filesystem permissions. The model-name allowlist prevents escalation to arbitrary-model deserialization or code execution despite the RCE/deserialization tags attached to this record; a validated proof-of-concept request is documented in the vendor advisory and was executed against the real shutil.rmtree code path, and no CISA KEV listing or confirmed in-the-wild exploitation is present in the available data. The CVE record carries CVSS 6.5 while the upstream advisory and our independent assessment score it 8.6 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H), reflecting full pre-auth integrity and availability impact when the ML port is reachable.

RemediationAI

Vendor-released patch: Immich 3.3.0. Upgrade the machine-learning container (and the stack it runs with) to v3.3.0, which is published at https://github.com/immich-app/immich/releases/tag/v3.3.0 and delivered by PR https://github.com/immich-app/immich/pull/31856 / commit ab159b81182f26a8943f5dd66b719e8cdaad4626; the fix restructures the request into typed Pydantic pipeline models and typed option classes, so cache_dir, model_format and session are no longer client-settable and the delete handler can no longer be pointed at an arbitrary path. Where upgrading immediately is not possible, the advisory-recommended interim measures are to allowlist the permitted options keys before they are spread into the model constructor (dropping cache_dir, model_format and session) or to validate that any effective cache_dir is contained within settings.cache_folder - both require patching the ML source and must be reapplied on upgrade; and to add authentication to the ML service or bind it to loopback or an internal-only interface and remove the 3003:3003 port publication from docker-compose.prod.yml. Binding to loopback or removing the published port means any remote-ML worker outside the Docker network loses access to the service until a proxy or authenticated tunnel is put in front of it. Note that the availability impact of the delete sink persists for as long as a writable, attacker-reachable cache_dir path is accepted, so these workarounds reduce exposure but only 3.3.0 removes the root cause. Details in the advisory at https://github.com/immich-app/immich/security/advisories/GHSA-72rm-x7xr-v679.

Affected VersionsENISA

immich < 3.3.0

Affected Packages

euvd immich fix: 3.3.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The affected component is Immich's Python machine-learning service, a FastAPI application binding all interfaces ([::]:3003) with no authentication on any route. In machine-learning/immich_ml/main.py, get_entries() parses the client-supplied entries form field and run_inference() forwards the per-entry options dictionary as keyword arguments into model_cache.get(...); InferenceModel.__init__ in models/base.py then binds self.cache_dir = Path(cache_dir) straight from the request. That attacker-controlled path feeds two sinks: snapshot_download(cache_dir=self.cache_dir, local_dir=self.cache_dir) for the write, and clear_cache() → shutil.rmtree(self.cache_dir), which the load handler invokes on OSError, InvalidProtobuf, BadZipFile or NoSuchFile. This is CWE-22/CWE-73 external control of a file path combined with CWE-306 missing authentication; the arbitrary-write sink fires on any /predict request, while the destructive delete additionally requires the attacker to induce a model-load failure, which is achievable, for example, via a model_format mismatch, and on the Linux container shutil.rmtree.avoids_symlink_attacks is True so the delete proceeds. The model name→source mapping is allowlisted in constants.py, so the flaw is confined to path write and recursive delete rather than arbitrary-model loading or code execution. Impact is bounded by container filesystem permissions and whether the chosen path is writable and deletable by the ML process.

Know when Immich gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 6.5 MEDIUM
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L
vuln.today AI 9.1 CRITICAL

Unauthenticated remote request with no user interaction (PR:N/UI:N/AV:N/AC:L); no data disclosure (C:N) but attacker-controlled arbitrary write and recursive deletion of mounted volumes gives I:H/A:H.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
Low
Availability
Low

Lifecycle Timeline

1
Patch available
Oct 30, 2026 - 21:18 EUVD

DescriptionCVE.org

Immich is a high-performance self-hosted photo and video management solution. Prior to 3.3.0, the unauthenticated machine-learning /predict endpoint in machine-learning/immich_ml/main.py accepted an options object and passed its values into model construction in machine-learning/immich_ml/models/base.py without restricting security-sensitive parameters. An attacker with network access to the service could set cache_dir to an arbitrary writable path, causing model downloads to write there and causing clear_cache() to pass that path to shutil.rmtree() after selected model-loading failures. Depending on filesystem permissions and the selected path, this could modify files in mounted data locations or recursively delete an attacker-selected directory. The model-name allowlist prevents this issue from becoming arbitrary-model deserialization or code execution. This issue is fixed in version 3.3.0.

Threat Intelligence Overview

EPSS Score
0.4%
Top 62% exploitable
Prevalence
Medium
very popular self-hosted photo app, large homelab footprint, not enterprise-ubiquitous
Data Quality
3 sources
Confidence: Low

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact· derived
Medium

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.

More in Immich

View all
CVE-2026-59258 HIGH POC
7.2 Jul 15

Album ownership takeover in immich before 3.0.3 allows a user with shared-album editor access to escalate to full owner

CVE-2026-23896 HIGH POC
7.2 Jan 29

Immich versions prior to 2.5.0 contain an improper access control flaw that allows any authenticated API key to escalate

CVE-2026-53662 CRITICAL
9.6 Jun 23

Reflected cross-site scripting in Immich (commits 4ffa26c9 through pre-4eb1003) allows a single-click account takeover o

CVE-2026-108165 MEDIUM POC
5.3 Oct 10

Authenticated partners in Immich through 3.3.1 can read metadata from assets stored in another user's Locked Folder - in

CVE-2026-105764 HIGH
7.7 Oct 05

Remote code execution in Immich before 3.2.4 lets any authenticated non-admin user with upload permission run arbitrary

CVE-2026-82272 HIGH
7.1 Aug 28

Locked asset visibility bypass in Immich through 3.1.0 exposes private photo and video assets to unauthorized viewers vi

CVE-2026-103532 MEDIUM
6.9 Oct 01

Improper authorization in Immich's Shared Link Preview Handler (server/src/utils/access.ts, function checkSharedLinkAcce

CVE-2026-25118 MEDIUM
6.3 Apr 03

Immich prior to version 2.6.0 discloses shared album passwords in cleartext within URL query parameters during authentic

CVE-2026-35455 MEDIUM
5.4 Apr 08

Stored Cross-Site Scripting in Immich photo management platform versions prior to 2.7.0 enables authenticated attackers

CVE-2026-40096 MEDIUM
5.1 Apr 14

Open redirect vulnerability in Immich prior to version 2.7.3 allows authenticated attackers to craft malicious shared al

CVE-2026-119329 MEDIUM
4.3 Oct 30

Immich before 3.0.0 leaks the GPS coordinates and asset identifiers of a sharer's archived photos and videos to view-onl

CVE-2026-119330 LOW
3.5 Oct 30

Immich before 3.2.0 lets an authenticated regular user attach another user's asset to a shared link they legitimately ow

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy