VYPR
Unrated severityNVD Advisory· Published Jun 21, 2026

Capgo - Cross-App Build Job Access via app_id/job_id Mismatch in /build/status and /build/logs

CVE-2026-56229

Description

Capgo before 12.128.2 contains an authorization bypass vulnerability in the /build/status and /build/logs endpoints that allows attackers to access build jobs belonging to different applications by supplying a mismatched app_id and job_id combination. Limited API keys restricted to a single app can retrieve build status and logs from other apps by providing an authorized app_id while using a job_id from an unauthorized app, exposing sensitive build information including logs, metadata, and potentially credentials.

AI Insight

LLM-synthesized narrative grounded in this CVE's description and references.

Patches

Vulnerability mechanics

Root cause

"The authorization check is performed only against the user-supplied app_id, and the endpoints do not verify that the job_id belongs to that app_id."

Attack vector

An attacker who possesses a limited API key restricted to a single app (App A) can access build status and logs for a build job belonging to a different app (App B) by supplying App A's `app_id` while using App B's `job_id`. The authorization check is performed only against the user-supplied `app_id`, and the endpoints do not verify that the `job_id` belongs to that `app_id` [ref_id=1]. This allows cross-app information exposure for native build jobs, including sensitive build metadata, environment info, and potentially credentials [ref_id=1].

Affected code

The vulnerability resides in `supabase/functions/_backend/public/build/status.ts` and `supabase/functions/_backend/public/build/logs.ts`. Both endpoints perform authorization via `checkPermission(c, 'app.read', { appId: app_id })` using the user-supplied `app_id` but then fetch build data using only the `job_id` without verifying that the `job_id` belongs to that `app_id`. In contrast, `upload.ts` is noted as safer because it queries `build_requests` by `builder_job_id` and checks permission against the database-derived `app_id`.

What the fix does

The advisory recommends that before calling the builder in `/build/status` and `/build/logs`, the application should bind `job_id` to `app_id` by querying `build_requests` by `builder_job_id`, verifying that the database-derived `app_id` matches the request's `app_id` (or ignoring the request's `app_id` entirely), and then running permission checks against the database-derived `app_id` [ref_id=1]. This ensures that even if an attacker supplies a mismatched `app_id`, the authorization check is performed against the actual app that owns the build job.

Preconditions

  • authAttacker must have a limited API key restricted to a single app (App A)
  • inputAttacker must know or guess a job_id belonging to a different app (App B)
  • configThe target build job (App B) must exist and be accessible via the /build/status or /build/logs endpoints

Generated on Jun 22, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

2

News mentions

0

No linked articles in our index yet.