Skip to main content
CVE Vulnerability Database
Vulnerability Database/CVE-2026-56231

CVE-2026-56231: Capgo BOLA Auth Bypass Vulnerability

CVE-2026-56231 is a broken object level authorization flaw in Capgo that allows authenticated attackers to manipulate build jobs across tenants. This article covers technical details, affected versions, and mitigation.

Published:

CVE-2026-56231 Overview

CVE-2026-56231 is a Broken Object Level Authorization (BOLA) vulnerability in Capgo versions before 12.128.2. The flaw exists in the POST /build/start/:jobId and POST /build/cancel/:jobId endpoints. These handlers authorize requests using only the attacker-controlled app_id in the request body. They never verify that the jobId in the URL belongs to that app_id or to the same tenant. An authenticated user holding the app.build_native permission for any owned app can start or cancel arbitrary builder jobs across other tenants. The weakness is classified under CWE-285: Improper Authorization.

Critical Impact

Cross-tenant build sabotage, unauthorized compute consumption, and downstream billing impact against victim organizations.

Affected Products

  • Capgo versions prior to 12.128.2
  • Self-hosted Capgo build orchestration deployments
  • Multi-tenant Capgo instances exposing the build job control API

Discovery Timeline

  • 2026-06-24 - CVE-2026-56231 published to NVD
  • 2026-06-25 - Last updated in NVD database

Technical Details for CVE-2026-56231

Vulnerability Analysis

The vulnerability resides in Capgo's build job control API. Two endpoints, POST /build/start/:jobId and POST /build/cancel/:jobId, issue privileged commands to the builder service using a server-held builder API key. Before issuing those commands, the handlers must confirm that the requesting user owns the target jobId. They do not. Instead, the handler reads the app_id field directly from the request body and checks only that the caller has the app.build_native permission on that supplied app_id. The jobId from the URL path is then forwarded to the builder without any ownership or tenant binding check.

Root Cause

The root cause is missing object-level authorization between two related identifiers. The permission check operates on app_id from a client-controlled body, while the privileged action operates on jobId from the URL. There is no server-side lookup confirming that jobId belongs to app_id, nor that both belong to the same tenant or organization. This decoupling allows an attacker to satisfy the authorization gate using their own app while targeting a victim's job.

Attack Vector

An authenticated attacker with a legitimate Capgo account creates or selects any app they control that has the app.build_native permission. The attacker obtains or guesses a victim's jobId, then issues POST /build/start/:victimJobId or POST /build/cancel/:victimJobId with an app_id belonging to the attacker. The server validates permission against the attacker's app, then forwards the start or cancel command to the builder for the victim's job. The result is denial of service against active builds, forced restarts that consume victim compute quotas, and potential financial impact through unauthorized billing events.

Detection Methods for CVE-2026-56231

Indicators of Compromise

  • Build job state transitions where the actor's app_id does not match the owning tenant of the referenced jobId
  • Repeated POST /build/start/:jobId or POST /build/cancel/:jobId requests from a single account targeting jobs across multiple tenants
  • Unexpected build cancellations or restarts reported by tenants who did not initiate the action

Detection Strategies

  • Correlate API access logs to compare the app_id in the request body against the tenant that owns the jobId in the URL path
  • Alert on any authenticated session interacting with jobId values outside its own tenant scope
  • Baseline normal builder API call patterns per account and flag accounts that suddenly act on a wide range of jobId values

Monitoring Recommendations

  • Enable verbose audit logging for /build/start/ and /build/cancel/ endpoints, capturing actor, app_id, jobId, and resolved tenant
  • Forward builder API and webhook logs to a centralized analytics pipeline for cross-tenant anomaly review
  • Track billing and compute consumption per tenant and alert on spikes that do not correlate with that tenant's own build submissions

How to Mitigate CVE-2026-56231

Immediate Actions Required

  • Upgrade Capgo to version 12.128.2 or later, which addresses the BOLA flaw
  • Audit recent /build/start/ and /build/cancel/ activity for cross-tenant abuse and notify affected tenants
  • Rotate the server-held builder API key if logs indicate the endpoints were abused

Patch Information

Capgo has released a fixed version in 12.128.2. The patch enforces that the jobId provided in the URL is resolved server-side and validated against the authenticated user's tenant before any builder command is issued. Refer to the GitHub Security Advisory GHSA-72j4-9qp5-hfrg and the VulnCheck Advisory on the Capgo BOLA flaw for full remediation guidance.

Workarounds

  • Restrict the app.build_native permission to a minimum set of trusted users until patched
  • Place the build control endpoints behind an API gateway rule that rejects requests where the resolved tenant for jobId differs from the caller's tenant
  • Temporarily disable external access to /build/start/:jobId and /build/cancel/:jobId if upgrading cannot be performed immediately
bash
# Example reverse-proxy guard pseudocode
# Reject build control calls where caller tenant != jobId tenant
location ~ ^/build/(start|cancel)/([A-Za-z0-9-]+)$ {
    access_by_lua_block {
        local caller_tenant = ngx.var.http_x_tenant_id
        local job_tenant   = resolve_job_tenant(ngx.var[2])
        if caller_tenant ~= job_tenant then
            return ngx.exit(403)
        end
    }
    proxy_pass http://capgo_backend;
}

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.