Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSteal or harvest never-expire access token
-
DeliveryReplay token to Ech0 API
-
ExploitMiddleware accepts JWT lacking exp claim
-
ExecutionVictim logout/admin-delete fails to revoke
-
ImpactMaintain perpetual authenticated access
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V7 - Session Management Session expiration enforcement
|
| Exploitation Conditions | The specific precondition is that a token was created with Ech0's 'never expire' (NEVER_EXPIRY / expiry=0) option AND that token has been leaked to or stolen by the attacker - this is the AT:P attack requirement in the CVSS vector. The attacker needs no credentials of their own (PR:N) and no user interaction (UI:N), and the token works remotely over the network (AV:N). What LIMITS exploitation: only never-expire tokens are vulnerable (default/normal tokens with an exp claim are properly revoked), and the attacker must first obtain such a token out-of-band, which raises complexity (AC:H). Neither logout, admin token deletion, nor RevokeToken will stop a valid stolen never-expire token; the only condition that ends access is rotation of the JWT signing secret. |
| Impact | Signals are mixed and require judgment. The published CVSS 4.0 base score is 9.1 (critical) with VC:H/VI:H, reflecting the severe confidentiality and integrity consequence of perpetual authenticated access, but the vector itself tempers likelihood with AC:H and AT:P - exploitation is not turnkey. Crucially, the vulnerability is a post-compromise persistence/failure-to-revoke issue: an attacker must FIRST obtain a valid never-expire token (theft, logging, backup exposure, or a separate leak), which is the real gating condition rather than a network-reachable memory-corruption bug. There is no CISA KEV entry and no POC in the supplied data, and no EPSS score was provided, so exploitation-probability signals are absent - this reads as a serious latent-risk/hardening issue rather than a mass-exploited remote flaw. The defensive priority is nonetheless high for any operator who has issued never-expire tokens, because the impact is total and long-lived and normal revocation gives a false sense of safety (logout appears to fail with a 500, and admin deletion silently leaves the token usable). Missing data to flag: the description states 'Ech0 before 4.7.3' while the Go package metadata lists the fix as pseudo-version 1.4.8-0.20260503041146-eab62379c795 - verify the correct release tag with the vendor advisory before remediating. |
| Exploit ScenarioDerived | An attacker obtains a valid Ech0 access token that was created with the 'never expire' option - for example harvested from browser storage, a proxy log, a leaked backup, or a compromised client. Because the token has no exp claim and every revocation path fails, the victim's logout and even the admin's 'Delete token' action do not stop it, so the attacker replays the token against the API and retains full authenticated access indefinitely. No public POC is referenced, but the failure modes are precisely documented in the GHSA advisory with exact file and line references. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 25, 2026
Persistent authentication bypass in Ech0 (lin-snow's self-hosted lightweight publishing/memo app) before 4.7.3 lets an attacker who has stolen a 'never-expire' access token retain valid authenticated access indefinitely. Because such tokens carry no JWT 'exp' claim, all three revocation paths fail - logout panics on the nil ExpiresAt field, RevokeToken short-circuits when remaining TTL is zero, and admin 'Delete token' never blacklists the JTI - so a leaked token stays cryptographically valid until the operator rotates the signing key. No public exploit identified at time of analysis; there is no CISA KEV listing and no POC referenced in the provided intelligence.
RemediationAI
Upgrade Ech0 to 4.7.3 (Go module fixed version 1.4.8-0.20260503041146-eab62379c795, commit eab62379c795c3f4850a9ca938ae3f27d7171541); confirm the exact release tag via the GHSA advisory at https://github.com/lin-snow/Ech0/security/advisories/GHSA-fpw6-hrg5-q5x5. Patching alone does NOT invalidate already-issued never-expire tokens, so also rotate the JWT signing secret across the instance to cryptographically invalidate every existing token (side effect: this forces all users and integrations to re-authenticate and breaks any legitimately-configured never-expire API tokens, which must be reissued). As an immediate compensating control before/if you cannot patch, audit and delete all never-expire access tokens and stop issuing them (prefer bounded-lifetime tokens so the blacklist mechanism actually functions), and monitor for HTTP 500 responses on the logout endpoint as an indicator of the nil-panic path being hit. If the JWT secret is stored in configuration, restrict read access to it, since secret rotation is the only reliable kill-switch until the fix is deployed.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in go, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The flaw lives in Ech0's JWT session layer (github.com/lin-snow/Ech0). At internal/util/jwt/jwt.go:103-105 an access token created with the NEVER_EXPIRY option (expiry=0) skips setting claims.ExpiresAt, producing a JWT with no 'exp' claim; the jwt/v5 parser does not require 'exp' by default, so the middleware at internal/middleware/auth.go accepts it. Revocation is implemented as a JTI blacklist cache keyed to the token's remaining TTL, which structurally cannot represent an unbounded token. This is a textbook CWE-613 (Insufficient Session Expiration): the session/token cannot be reliably invalidated once issued. The three concrete failure sites are logout at internal/handler/auth/auth.go:154/:163 (dereferences claims.ExpiresAt.Time → nil panic → Gin Recovery returns HTTP 500 before blacklisting), RevokeToken at internal/repository/auth/auth.go:45-50 (returns early when remainTTL <= 0), and the admin delete at internal/service/setting/access_token_service.go:183-185 (removes the DB row but never calls RevokeToken). CPE identifies the single affected product as cpe:2.3:a:lin-snow:ech0.
Know when Ech0 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
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N
Attacker needs no own credentials (PR:N) but must first obtain a leaked never-expire token, a real prerequisite (AC:H); stolen session yields full read/write, no availability impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
Ech0 before 4.7.3 fails to properly revoke access tokens created with never-expire option, allowing attackers to maintain perpetual authenticated access after token theft. Three independent revocation mechanisms fail: logout panics on nil ExpiresAt field, RevokeToken skips when remainTTL is zero, and admin delete does not blacklist the JTI, leaving stolen tokens cryptographically valid until JWT secret rotation.
Executive ViewAI
Ech0 versions before 4.7.3 contain a critical authentication bypass where stolen access tokens with no expiration date remain permanently valid, as all token revocation mechanisms fail due to missing JWT expiration claims. Organizations using Ech0 face indefinite unauthorized access to their publishing and memo systems if any access token is compromised, creating persistent data theft and integrity risks. This vulnerability is particularly severe for deployments storing sensitive organizational communications or confidential content.
Force immediate re-authentication of all Ech0 users to invalidate sessions. Implement strict network segmentation with IP whitelisting for Ech0 access. Enable comprehensive access logging and monitoring for suspicious token activity. Rotate all administrative signing keys immediately. Disable new token issuance until version 4.7.3 or later is available and deployed. If Ech0 stores sensitive data, disable the service entirely until patched. No vendor-released patch identified at time of analysis.
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
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
OAuth redirect URI validation in Ech0 through 4.5.6 allows session hijacking via exchange-code theft by exploiting incom
Authorization bypass in Ech0 before 4.5.1 allows any authenticated non-admin user to invoke privileged admin endpoints b
Denial of service in Ech0 before 5.0.1 allows unauthenticated remote attackers to saturate server CPU by exploiting a qu
Privilege escalation in Ech0 before 4.4.3 allows an attacker holding an admin's profile:read access token to change the
Server-side request forgery in Ech0 before version 4.7.3 allows authenticated users to pivot through the application ser
Scope enforcement in Ech0 4.3.4 and earlier is opt-in at the route level, meaning privileged admin routes that omit the
Missing administrator authorization on dashboard log endpoints in Ech0 before 4.4.3 allows any authenticated low-privile
Scope enforcement bypass in Ech0's comment panel admin API allows any holder of a valid admin-issued access token - rega
Unauthenticated metric inflation in Ech0 before 4.7.3 allows any remote attacker to arbitrarily increment the fav_count
Unauthenticated remote attackers can increment the fav_count of any echo - including private ones - in Ech0 through 4.5.
Ech0 before version 4.7.3 exposes guest commenter email addresses to unauthenticated remote callers via public comment-l
Unsalted MD5 password hashing in Ech0's `MD5Encrypt` function (`internal/util/crypto/crypto.go`) stores credentials in a
EUVD-2026-65450
GHSA-3r5q-vfpj-wprr
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB