Automated Threat Modeling

Bitwarden Cloud CVE-2026-43639: Quick Look at the Provider Organization Takeover Vulnerability

CVE-2026-43639 is a missing-authorization flaw in Bitwarden Server. Through an unprotected API endpoint, provider service users could hijack arbitrary organizations on the Cloud platform.

CVE Analysis

7 min read

ZeroPath CVE Analysis
ZeroPath CVE Analysis

2026-05-11

Bitwarden Cloud CVE-2026-43639: Quick Look at the Provider Organization Takeover Vulnerability
Experimental AI-Generated Content

This CVE analysis is an experimental publication that is completely AI-generated. The content may contain errors or inaccuracies and is subject to change as more information becomes available. We are continuously refining our process.

If you have feedback, questions, or notice any errors, please reach out to us.

[email protected]

Introduction

A missing authorization check in Bitwarden Server's provider API let any vetted provider service user silently hijack arbitrary organizations on the Bitwarden Cloud platform. The attack canceled the victim organization's subscription and seized billing control. For the millions of organizations relying on Bitwarden Cloud for credential management, this was a serious control-plane risk, even though the organization symmetric key still protected encrypted vault data. The flaw is patched in version 2026.4.0.

Bitwarden is one of the most widely adopted open-source password managers, and has ranked first in the G2 Enterprise Grid for eleven consecutive quarters. It serves individuals, teams, and enterprises, with both cloud-hosted and self-hosted deployment options.

Technical information

Root cause: Authorization disparity between GET and POST

The core issue is a classic authorization gap between two related API operations on the same resource. The POST /providers/{providerId}/clients/existing endpoint lets a provider associate an existing organization with their provider account. The corresponding GET request enforced ownership correctly, through SQL queries that restricted results to organizations owned by the calling user. The POST request had no equivalent check and accepted any organization GUID in the request body.

The controller validated only that the caller was a confirmed member of their own provider. It never verified whether the caller had any relationship to the target organization named in the request body. This is a textbook instance of CWE-862 (Missing Authorization).

Attack flow

An attacker with a legitimate (vetted) Bitwarden provider account could exploit this in four steps:

  1. Obtain the GUID of the victim organization. GUIDs are not publicly enumerable, but an attacker may be able to get one through other information disclosure vectors or social engineering.

  2. Send a request to POST /providers/{providerId}/clients/existing with the victim organization's GUID in the request body and the attacker's own provider ID in the URL path.

  3. Let the service method process the request. It performs these destructive state changes on the victim organization automatically, before any proper authorization boundary is reached:

    • Cancels the victim's Stripe subscription with immediate invoicing enabled
    • Overwrites the organization's billing email to match the attacker's provider
    • Nullifies the gateway subscription ID and expiration date
    • Sets the organization status to "Managed" and links it to the attacker's provider
  4. The control-plane takeover is now complete, and the attacker controls the organization's billing relationship and management status. Decrypting the vault data is not possible without the organization symmetric key, but the administrative and financial takeover succeeds regardless.

The fix

Commit 0918bfd adds three distinct authorization layers to the endpoint:

var userId = _currentContext.UserId; if (!userId.HasValue) { return Error.Unauthorized(); } var (provider, result) = await TryGetBillableProviderForAdminOperation(providerId); if (provider == null) return result; if (!await _currentContext.OrganizationOwner(requestBody.OrganizationId)) { return Error.Unauthorized(); }

The patch does three things:

  • It raises the required role to provider admin, via TryGetBillableProviderForAdminOperation.
  • It checks that the caller is an owner of the target organization.
  • It ensures the organization appears in the list of addable organizations.

The fix also adds integration tests that assert Unauthorized and NotFound responses for invalid attempts.

Cloud-only scope

The vulnerable endpoint carries the SelfHosted(NotSelfHostedOnly = true) attribute, which restricts it to Bitwarden Cloud environments. Self-hosted Bitwarden installations never expose this endpoint, so this vulnerability does not affect them at all.

Severity assessment

SourceScoreNotes
VulnCheck CNA8.9 High (CVSS 4.0)AV:N/AC:H/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H
Researcher Assessment8.0 HighAdjusted during triage for high privilege requirements and complexity
NVDPendingNVD assessment not yet published

The high-privilege requirement (a vetted provider account) and the need for a valid target organization GUID moderate the practical exploitability, but the impact of a successful attack is severe.

Affected systems and versions

  • Bitwarden Server versions prior to 2026.4.0 running in Cloud environments are vulnerable.
  • Self-hosted Bitwarden installations are not affected, because the SelfHosted(NotSelfHostedOnly = true) attribute restricts the vulnerable endpoint to Cloud.
  • Bitwarden Server version 2026.4.0 and later include the fix.

Vendor security history

Bitwarden publishes its source code repositories, holds SOC 2 Type II and SOC 3 compliance certifications, and runs an active Vulnerability Disclosure Program through HackerOne. It responded quickly to this report, completing triage within days and merging the fix shortly after.

In a separate incident on April 22, 2026, the Bitwarden security team identified a malicious package distributed through the npm delivery path for the Bitwarden CLI and contained the compromise within 93 minutes. There was no evidence of vault data access. That incident is unrelated to CVE-2026-43639, but the two came close together in time, which is a good reason to monitor every update channel for Bitwarden components.

References

Detect & fix
what others miss

Works with
  • GitHub
  • GitLab
  • Bitbucket
  • Azure DevOps Services
  • Gerrit
  • CVS
  • Jira
  • Linear
  • Slack
  • Security Compass
Explore integrations
Security magnifying glass visualization