Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain low-scoped authenticated API key
-
ExploitCall /api/v1/upload and /api/v1/preview without permission
-
ExecutionStage arbitrary files bypassing quota and feed decoders
-
ImpactServe payloads unauthenticated via /api/v1/download
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization checks on every request
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires the attacker to possess a valid SnapOtter API key of ANY scope - the description confirms even a settings:read-scoped key is sufficient, because the /api/v1/upload, /api/v1/preview and /api/v1/preview/generate handlers sat outside both the requireFileAccess gate (which protected /api/v1/files) and the tool-access middleware (which only fired for /api/v1/tools/). The limiting factor is that unauthenticated callers cannot reach these routes; authentication alone, with no file or tool permission, was the only prerequisite. Affected deployments are SnapOtter versions 1.15.10 through 2.2.0; the fix is the referenced commit. The downstream unauthenticated exposure occurs via /api/v1/download serving the staged files. |
| Impact | This is a genuine but moderate-priority broken-access-control flaw, not a critical one. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N) and the 5.3 MEDIUM score align well with the description: exploitation is network-reachable and low-complexity but requires an authenticated principal (PR:L) - the description explicitly notes even a settings:read-scoped API key suffices, confirming the low-privilege barrier. Impact is correctly scoped as limited (VC:N/VI:L/VA:L): no confidentiality loss, only low integrity (staging arbitrary files outside quota) and low availability (quota bypass plus feeding crafted input to image/video decoders). No EPSS score was provided and the vulnerability is NOT in CISA KEV, so there is no evidence of active exploitation; exploitation status is best characterized as no public exploit identified. A fix commit is public (1544966b) which discloses the exact vulnerable routes and the precise missing checks, lowering the bar for an attacker to reproduce the issue even though no weaponized PoC is provided. The decoder-feeding angle (Sharp, libheif, LibRaw, FFmpeg over caller-supplied bytes) is the most serious latent risk - it is a potential pivot to memory-safety bugs in those libraries - but that secondary impact is not itself quantified here. Net: a real issue worth patching, gated by requiring any valid API key, consistent across all signals. |
| Exploit ScenarioDerived | An attacker who holds any low-privilege SnapOtter API key - even one scoped only to settings:read - sends requests directly to /api/v1/upload and /api/v1/preview, which never performed permission checks. They stage arbitrary files that bypass the storage quota and are then served to anyone unauthenticated through /api/v1/download, and they feed malformed media to the image/video decoders. No public exploit exists, but the public fix commit precisely identifies the three unguarded handlers. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 12, 2026
Missing authorization enforcement in SnapOtter 1.15.10 through 2.2.0 lets any holder of a valid API key - including one scoped only to settings:read - call the /api/v1/upload, /api/v1/preview and /api/v1/preview/generate handlers, staging arbitrary files outside their storage quota and feeding crafted bytes to the image and video decoders (Sharp, libheif, LibRaw, FFmpeg) behind the tool workflow. Because staged content is subsequently served by /api/v1/download without authentication, a low-privilege authenticated foothold is converted into unauthenticated file hosting and an expanded decoder attack surface. Exploitation requires a valid key but no file or tool permission; no public exploit code has been identified at time of analysis, and the issue is rated moderate (CVSS 3.1 5.3, PR:L), consistent with confirmed integrity and availability impact but no confidentiality impact.
RemediationAI
Upstream fix available (PR/commit); released patched version not independently confirmed. The corrective change is commit 1544966b52b8f2b40ef3794e43ffd4f0214550ba (https://github.com/snapotter-hq/SnapOtter/commit/1544966b52b8f2b40ef3794e43ffd4f0214550ba), which introduces a shared requireFileAccess helper in apps/api/src/permissions.ts, applies it to /api/v1/upload, and applies requirePermission("tools:use") to /api/v1/preview and /api/v1/preview/generate, with regression coverage in tests/integration/security/upload-preview-authorization.test.ts; operators should track the SnapOtter repository for the first tagged release containing that commit, since no patched version number is confirmed in the available data. Until a build containing the fix is deployed, the practical compensating controls are: because any authenticated principal - including holders of a settings:read-only key - can reach these routes, audit and revoke or re-issue every API key that is not strictly required, accepting that this breaks legitimate integrations and, if any key remains, the flaw remains reachable; alternatively block /api/v1/upload, /api/v1/preview and /api/v1/preview/generate at a reverse proxy or WAF with a rule requiring a privileged session, with the trade-off that legitimate upload and preview functionality stops working for all users; and since staged files are served unauthenticated via /api/v1/download, consider gating or blocking that path at the edge as well, which will break legitimate file downloads. Monitor storage consumption and unexpected file creation for evidence of quota bypass, and review the VulnCheck advisory and the upstream commit for the definitive fix scope.
Affected VersionsENISA
Affected Packages
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
This is a CWE-862 (Missing Authorization) broken-access-control defect in SnapOtter, a self-hosted file and media asset manager whose API is implemented in TypeScript on the Fastify framework. SnapOtter enforces authorization through two distinct mechanisms: the requireFileAccess helper, which guarded routes registered under /api/v1/files (and the user-files module), and a tool-access middleware that only fires for routes registered under /api/v1/tools/. The three affected handlers sat outside both enforcement points - /api/v1/upload persisted caller-supplied bytes to disk and was registered in apps/api/src/routes/files.ts outside the module that carried the gate, while the preview handlers explicitly called getAuthUser(request) and discarded the result, a deliberate "optional auth" pattern that made authentication alone sufficient regardless of the operator's permission scoping. The upstream fix moves requireFileAccess into permissions.ts so it can be reused, adds it to the upload route, and places requirePermission("tools:use") in front of /api/v1/preview and /api/v1/preview/generate because those paths spawn FFmpeg and decode attacker-controlled bytes through Sharp, libheif and LibRaw. The commit comment also notes the gate now runs before resource resolution so unauthorized callers receive 403 rather than a 404 that would confirm whether an identifier exists.
Know when the next one hits your stack
- 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
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:L/SC:N/SI:N/SA:N
Network API reachable (AV:N), no special conditions (AC:L), but any authenticated API key is required so PR:L not PR:N; limited integrity/availability impact only, no confidentiality.
Primary rating from Vendor (vulncheck).
CVSS VectorVendor: vulncheck
DescriptionCVE.org
SnapOtter 1.15.10 through 2.2.0 contains a missing authorization vulnerability that allows any authenticated principal to call the /api/v1/upload, /api/v1/preview and /api/v1/preview/generate handlers without permission checks. Attackers holding even a settings:read-scoped API key can stage arbitrary files outside storage quota, served unauthenticated via /api/v1/download, and feed crafted input to image and video decoders.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
EUVD-2026-97885
GHSA-j3v8-3vrc-7ghh
NVD
CVE.org
EPSS
Exploit-DB