Skip to main content

Ente Server CVE-2026-104875

| EUVDEUVD-2026-100469 HIGH
Authorization Bypass Through User-Controlled Key (CWE-639)
2026-10-13 security-advisories@github.com
7.1
CVSS 3.1 · Vendor: github
View

Attack ChainAIDerived

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

  1. Access
    Authenticate as an accepted emergency contact
  2. Exploit
    Submit crafted approve-recovery with own userID and session UUID
  3. Execution
    Flip session WAITING→READY and clear wait_till
  4. Impact
    Retrieve recovery info and complete account takeover

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Object-level authorization, IDOR prevention
Exploitation Conditions

Exploitation requires the attacker to already be an emergency contact that the victim previously ADDED AND ACCEPTED - the bug does not grant recovery rights over arbitrary accounts. Given that relationship, the attacker calls POST /emergency-contacts/approve-recovery supplying their own client-controlled userID plus a recovery-session UUID; the pre-fix server authorized on those client-supplied values and updated the row by UUID alone (CWE-639), letting the attacker move the session WAITING→READY, clear wait_till, and bypass the owner-configured notice period to retrieve recovery information. A secondary variant affects the reject/stop transitions: any user who KNOWS another recovery-session UUID could cancel a session they are not party to. Limiting factors: authenticated access as an established, victim-approved contact is mandatory; the attack is inherently targeted to that one relationship; the notice-period bypass only accelerates an already-authorized recovery path rather than creating one; and all vectors are closed in server image 2026.07.09.

Impact

Signals point to a moderate, conditional risk rather than a drop-everything emergency. The CVSS 3.1 vector (AV:N/AC:H/PR:L/UI:R) describes a network-reachable but authenticated attack of high complexity: the attacker must already be an accepted emergency contact of the specific victim, which is why PR:L and AC:H apply and why impact is bounded to victims who deliberately onboarded the attacker. Impact is genuinely high once conditions are met (C:H/I:H/A:H - the flaw clears the owner-configured waiting period and yields recovery of an end-to-end-encrypted account, i.e. account takeover). There is no KEV listing and no EPSS score in the provided data, so 'no public exploit identified at time of analysis' applies - the only public code consists of the vendor FIX commits and PRs, which demonstrate the root cause (CWE-639, user-controlled userID/session UUID trusted without ownership checks) but are not weaponized exploit code. The required pre-existing, victim-initiated trust relationship makes this inherently targeted rather than mass-exploitable, further lowering real-world urgency. Note the precondition tension: the input marks UI:R, but the 'user interaction' is really the victim's prior one-time acceptance of the attacker as a contact (a precondition), not interaction during exploitation - verify intent with the vendor advisory GHSA-2hxj-953x-c2vw. EPSS and KEV data are absent and should be checked before final prioritization.

Exploit ScenarioDerived

A person the victim previously added and accepted as an emergency contact initiates account recovery, then sends a crafted POST /emergency-contacts/approve-recovery request supplying their own userID and the recovery-session UUID. Because the server authorized on the client-supplied identifiers and updated the session by UUID alone, the attacker transitions the victim's session from WAITING to READY and clears wait_till, skipping the owner-configured notice period and continuing to recover the victim's end-to-end-encrypted account. No weaponized public exploit exists - only the vendor's fix commits are public.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 13, 2026

An authorization bypass in the Ente server (the self-hosted/cloud 'museum' backend) lets an emergency contact who was already added and accepted by a victim call POST /emergency-contacts/approve-recovery with their own client-supplied user ID and a recovery-session UUID, prematurely moving the victim's emergency recovery session from WAITING to READY, clearing the wait_till value, and skipping the owner-configured notice period to retrieve recovery information. The same insufficiently scoped update pattern affects the reject and stop transitions, so any party who merely knows another user's recovery-session UUID could cancel a session they are not part of. Exploitation requires authenticated access as an established, victim-approved emergency contact and does not create recovery rights over arbitrary accounts; there is no confirmed active exploitation and no public exploit identified at time of analysis, though the vulnerability is scored 7.1 and fixed in server image 2026.07.09.

RemediationAI

Upgrade to Ente server image 2026.07.09 or later, which contains the authorization fix; the two fix commits are 1fc4956f90277076559c16dedbfad10cb4d1227b and b3fa9f566466ac3660e276a67621130d684957e7 merged via pull requests 11311 and 11342, and full details are in advisory GHSA-2hxj-953x-c2vw. Self-hosted operators who cannot upgrade immediately should treat the emergency-recovery endpoints as untrusted: restrict access to /emergency-contacts/approve-recovery and the reject/stop routes to trusted networks or a reverse-proxy allowlist and audit emergency_recovery rows for sessions that transitioned from WAITING to READY with an unexpectedly cleared wait_till, understanding that these are compensating controls and not equivalent to the patch. Because the attack requires the victim to have already added and accepted the attacker as an emergency contact, review and prune emergency-contact relationships to remove anyone the account owner no longer recognizes, and notify users that an unexpected recovery-session cancellation could indicate the weak-bounded reject/stop variant. Rotating or disabling existing emergency-recovery sessions after patching closes any session that may have been transitioned by a client-supplied UUID.

Affected VersionsENISA

ente < 0.1.18
ghcr.io/ente/server < 2026.07.09

Affected Packages

euvd ente fix: 0.1.18
euvd ghcr_io_ente_server fix: 2026.07.09

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in euvd

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

Technical ContextAI · show details

The root cause is CWE-639 (Authorization Bypass Through User-Controlled Key): the Go backend in Ente's server component trusted client-supplied identifiers instead of deriving ownership from the session record. In the pre-fix code path, the handler compared the request's userID against the caller's authenticated identity and then executed UpdateRecoveryStatusForID using only the client-supplied recovery-session UUID, so the database row was selected and updated by an attacker-controlled key rather than one bound to the requester. The fix introduces ApproveRecoveryForSession, which first loads the row with GetRecoverRowByID and validates that session.UserID and session.EmergencyContactID match the request before performing a scoped UPDATE constrained by id, user_id, emergency_contact_id, and an allowed previous status set. This binds the transition to the true session parties and enforces the WAITING-to-READY state machine, and the accompanying unit test TestApproveRecoveryRejectsSpoofedSessionPartiesBeforeUpdate asserts a spoofed session-parties request returns permission denied while the row remains in WAITING. The underlying technology is the Ente emergency-recovery feature, an end-to-end encrypted account-recovery workflow built on an emergency_recovery table with status and wait_till microsecond timestamps, exposed via Gin HTTP endpoints under /emergency-contacts.

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 (github) PRIMARY 7.1 HIGH
AV:N/AC:H/PR:L/UI:R/S:U/C:H/I:H/A:H
vuln.today AI 7.5 HIGH

Network API with authenticated attacker holding an accepted-contact role (PR:L) and a strong relationship precondition (AC:H); the prior acceptance is a precondition not active interaction, so UI:N; recovery yields full account takeover (C/I/A:H).

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

Primary rating from Vendor (github).

CVSS VectorVendor: github

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

Lifecycle Timeline

2
Patch available
Oct 13, 2026 - 20:20 EUVD
CVE Published
Oct 13, 2026 - 19:17 cve.org
HIGH 7.1

DescriptionCVE.org

Ente provides end-to-end encrypted cloud services and security tools. Prior to server image 2026.07.09, the POST /emergency-contacts/approve-recovery endpoint authorized approval using a client-supplied userID and updated an emergency recovery session using only its client-supplied recovery-session UUID. An accepted emergency contact could submit the contact's own identifier, transition the victim's session from WAITING to READY, clear wait_till, retrieve recovery information, and continue account recovery before the owner-configured notice period expired. Exploitation of the approval bypass required the victim to have previously added and accepted the attacker as an emergency contact, and it did not create recovery rights for an arbitrary account. Separately, the same insufficiently scoped update pattern affected the reject and stop recovery transitions, allowing a user who knew another recovery-session UUID to potentially cancel a session to which the user was not a party. This issue is fixed in server image 2026.07.09.

Technical POC Analysis

CWE-639 (Authorization Bypass Through User-Controlled Key) in the emergency-contact recovery flow of the Ente server image (ghcr.io/ente/server, the Go "museum" backend).

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

An authorization flaw in the Ente server ('museum' backend) used for self-hosted and cloud deployments allows a party who already holds an established, victim-approved emergency contact relationship to bypass the account owner's configured waiting period and reach recovery information early, or to cancel a recovery session they are not part of. Exposure is limited to accounts whose owners have designated emergency contacts, so the risk is insider-adjacent and narrow rather than a broad, opportunistic compromise vector. Leadership should treat this as a data-protection and user-trust issue for any Ente deployment with emergency recovery enabled, and note that no public exploit was identified at time of analysis.

Business Impact: Medium
Compensating Controls

Apply vendor patch (server image 2026.07.09); until the upgrade is validated and deployed, disable or tightly restrict the emergency recovery feature, alert on approve-recovery/reject/stop transitions, and require owners to re-confirm emergency contact relationships.

Threat Intelligence Overview

EPSS Score
0.3%
Top 73% exploitable
Prevalence
Low
niche open-source E2EE privacy app, limited production/enterprise footprint
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 HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.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
Medium

Priority Score

36
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +36
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