Skip to main content

SnapOtter EUVDEUVD-2026-97885

| CVE-2026-109562 MEDIUM
Missing Authorization (CWE-862)
2026-10-12 disclosure@vulncheck.com GHSA-j3v8-3vrc-7ghh
5.3
CVSS 4.0 · Vendor: vulncheck
View

Attack ChainAIDerived

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

  1. Access
    Obtain low-scoped authenticated API key
  2. Exploit
    Call /api/v1/upload and /api/v1/preview without permission
  3. Execution
    Stage arbitrary files bypassing quota and feed decoders
  4. Impact
    Serve 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
No patch listed yet 0.2% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – 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

SnapOtter 1.15.10 ≤2.2.0

Affected Packages

euvd snapotter no fix

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

Vendor (vulncheck) PRIMARY 5.3 MEDIUM
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
vuln.today AI 5.4 MEDIUM

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.

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

Primary rating from Vendor (vulncheck).

CVSS VectorVendor: vulncheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
Low
Vulnerable system: Availability
Low
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

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

EPSS Score
0.2%
Top 89% exploitable
Prevalence
Low
niche self-hosted open-source app, no broad enterprise footprint
Social Media
1
Sightings
Data Quality
5 sources
Confidence: Medium

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.2%
Patch available No
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
No
Human Impact· derived
Medium

Priority Score

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

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

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