Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessUser's group revoked in identity provider
-
ExploitConcurrent group refreshes race for same user
-
ExecutionOut-of-order commit re-persists stale membership
-
ImpactUser retains revoked group access ~10 minutes
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V15 - Secure Coding and Architecture Concurrency control, locking
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 | Exploitation requires that (1) a user's group membership was just revoked in the upstream auth/identity provider, and (2) two or more group-refresh operations for that same identity run concurrently and commit to the database out of order - the specific condition the fix addresses by serializing refreshes with golang.org/x/sync/singleflight and adding an auth_provider_groups_last_checked claim check in persistGroups. Limiting factors that reduce real-world risk: the attacker (or affected user) must already be authenticated (PR:L), the race is timing-dependent and not attacker-controllable (AT:P, AC:H), the stale access self-heals after roughly ten minutes (bounded by the group check period), and impact is confined to retaining previously-held group-based access rather than gaining new privileges. This is only meaningful where group refreshes legitimately overlap during an active revocation. |
| Impact | This is a genuinely low-priority issue, and the signals are internally consistent rather than conflicting. The vendor-assigned CVSS 4.0 vector (AV:N/AC:H/AT:P/PR:L/UI:N) scores only 2.3: exploitation requires an already-authenticated user (PR:L), high attack complexity (AC:H), and a present-but-uncontrollable race condition (AT:P), with only low confidentiality and integrity impact (VC:L/VI:L) and no availability impact. There is no CISA KEV listing and no public exploit code identified, so this is neither actively exploited nor weaponized. EPSS is not provided in the input, but given the timing-dependent, non-attacker-controlled nature of the flaw, meaningful exploitation probability would be expected to be very low. The one caveat is window of exposure rather than attacker capability: the flaw silently extends revoked access for roughly ten minutes, which matters for high-assurance environments performing emergency de-provisioning (e.g., offboarding or incident response) but is not a broadly exploitable vulnerability. No key signals conflict with the description; the main gap is the absence of EPSS data in the input. |
| Exploit ScenarioDerived | An administrator revokes a user's group membership in the upstream identity provider (for example, during offboarding or an access incident). Because two group-refresh operations for that same user commit to Obot's database out of order, the stale membership is re-persisted, and the user continues to hold the revoked group-based access for about ten minutes. No public exploit code exists, the condition is not attacker-controlled (AT:P), and triggering it reliably requires winning a narrow timing race (AC:H). |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 07, 2026
Obot versions 0.25.0 through 0.25.5 and 0.26.0 can persist stale group memberships after an administrator revokes a user's group in the upstream identity provider, leaving the user with revoked group-based access for roughly ten minutes. The flaw is a race condition (CWE-362) in the auth provider group-refresh path: when two refreshes for the same identity overlap and commit out of order, an older refresh overwrites the newer one and restores memberships that were just removed. It is a genuinely low-priority issue - the CVSS 4.0 score is 2.3 (assessed independently as CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:L/A:N), exploitation requires an already-authenticated user (PR:L), the timing is not attacker-controllable (AC:H), impact is limited to retaining previously held access rather than gaining new privileges, and the condition self-heals within the group check period; no public exploit code has been identified at time of analysis and there is no CISA KEV entry.
RemediationAI
Vendor-released patch: upgrade to Obot 0.25.6 or 0.26.1 (release tag v0.26.1 at https://github.com/obot-platform/obot/releases/tag/v0.26.1), or apply the upstream fixes in commits 6f81dac8d344cf6b2161f500460fb7b2a975c415 and 09e4d5b5d1e4a5f35a6cbcff96f3c460c3f9e278; see advisory GHSA-929v-v9hq-5xhr. Because the race only manifests when two refreshes for the same identity overlap, until patched the most effective compensating control is to serialize group refreshes: run a single gateway replica or restrict the affected identity's traffic to one instance, accepting the loss of horizontal scalability and failover. A second option is to force an immediate manual group re-sync (or remove/re-add the user's identity in Obot) right after revoking a group in the identity provider, which shrinks the roughly ten-minute stale-access window but increases refresh load and races if done repeatedly; shortening the group check period similarly reduces exposure while increasing provider traffic. Where access must be terminated instantly, revoke the user's Obot session/account or block the identity at the gateway rather than relying on the IdP group revocation alone, at the cost of losing the user's associated configuration and requiring re-provisioning. Detection should focus on gateway logs and the auth_provider_groups_last_checked column for out-of-order or duplicate refreshes for the same identity, and note that no vendor-released mitigation short of the 0.25.6/0.26.1 upgrade removes the race itself.
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
Obot is a Go-based platform whose gateway client resolves a user's group memberships from an external auth/identity provider and caches them in its own database (CPE cpe:2.3:a:obot-platform:obot). The vulnerable code path in pkg/gateway/client/group.go fetches groups from the provider over HTTP in a 'fetch phase' and then reconciles them in a short-lived 'persist phase' transaction; because the fetch happens outside the transaction and the persist step had no optimistic-concurrency guard, two concurrent refreshes for the same identity (for example across multiple gateway replicas, or an automatic refresh overlapping a revocation-triggered one) could both read the pre-revocation state and commit in the wrong order, with the older commit landing last and resurrecting revoked memberships. This is a classic CWE-362 race condition on shared state, aggravated by the fact that group data is also cached per identity with a periodic refresh window (about ten minutes) that bounds how long the stale state survives. The upstream fix (commit 6f81dac8d344cf6b2161f500460fb7b2a975c415, with related commit 09e4d5b5d1e4a5f35a6cbcff96f3c460c3f9e278) serializes refreshes per identity using golang.org/x/sync/singleflight so peers block and adopt the leader's result, adds a ten-second refresh timeout and a one-minute failure cooldown, and introduces an auth_provider_groups_last_checked claim check (a compare-and-set on the identity row) inside persistGroups so a writer whose lastChecked value no longer matches discards its stale fetch and re-reads cached groups.
Know when Obot 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:L/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
AC:H because exploitation depends on winning a non-controllable commit-ordering race; PR:L because the affected principal is an authenticated user; C:L/I:L for retained group access and stale membership persisted, A:N as no availability impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
Obot 0.25.0 before 0.25.6 and 0.26.0 before 0.26.1 contains a race condition in auth provider group refreshes that can restore group memberships just revoked in the identity provider. When overlapping refreshes for the same user commit out of order, stale memberships are persisted and the user retains revoked group-based access for about ten minutes.
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.
Race conditions occur when multiple concurrent requests exploit the brief time gap between checking a condition and acting upon it (TOCTOU - Time of Check, Time of Use).
Obot deployments started with the README's Docker quickstart expose port 0.0.0.0:8080 with authentication disabled, allo
Authorization bypass in Obot before v0.21.1 lets any authenticated user with a known MCP Server ID connect to restricted
OAuth dynamic client registration in Obot through v0.22.1 allows unauthenticated remote attackers to register an OAuth c
An authorization bypass in Obot 0.21.1 through 0.24.1 lets any authenticated account holding the low-privileged 'Basic-r
Server-side request forgery in Obot through v0.22.1 allows an authenticated user holding the Power User, Power User Plus
Obot versions 0.12.0 through 0.26.1 return admin- and power-user-supplied static secrets (API keys, tokens) on MCP catal
Unauthenticated disclosure of MCP Registry metadata affects Obot deployments running versions up to and including v0.22.
Authorization bypass in Obot 0.26.0 through 0.26.1 lets an authenticated user who matches any configured vMCP (virtual M
EUVD-2026-94311
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB