Capgo - Deleted Bundle Selection via Missing Deletion Filter in /updates Endpoint
Description
Capgo before 12.128.12 fails to filter deleted app versions when joining channels during /updates resolution, allowing deleted bundles to remain selectable. Attackers can continue deploying deleted bundles to devices by exploiting the missing app_versions.deleted filter in channel version joins.
AI Insight
LLM-synthesized narrative grounded in this CVE's description and references.
Affected products
1Patches
Vulnerability mechanics
Root cause
"Missing `app_versions.deleted` filter in channel version joins allows deleted bundles to remain selectable by /updates."
Attack vector
An authenticated app user deletes a bundle through the normal backend API, which only sets `app_versions.deleted = true` without detaching the channel reference. The `/updates` resolution logic joins `channels.version = app_versions.id` without filtering `app_versions.deleted = false`, so the deleted bundle remains eligible for update selection. As long as the deleted bundle still has a deliverable source (e.g., `external_url`), devices querying `/updates` continue to receive that bundle. This allows an attacker who can delete a bundle to inadvertently or maliciously keep it deployable to devices on any channel that still references it [ref_id=1].
What the fix does
The advisory does not include a published patch diff. It identifies that the fix must add a filter for `app_versions.deleted = false` in the `/updates` selection queries at `supabase/functions/_backend/utils/pg.ts:354-365` (device override path) and `:388-409` (default channel path). Without this filter, deleted bundles remain joinable and resolvable. The advisory also notes that the delete flow at `supabase/functions/_backend/public/bundle/delete.ts:27-36` should either clear the channel reference or reject deletion when a channel still points to the version [ref_id=1].
Preconditions
- authAttacker must have an authenticated app user account capable of deleting bundles via the backend API
- configA channel must still reference the deleted bundle's app_versions.id
- inputThe deleted bundle must have a deliverable source (external_url, r2_path, or manifest entries)
Generated on Jun 23, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
2- github.com/Cap-go/capgo/security/advisories/GHSA-hqq2-87cp-j83xmitrevendor-advisory
- www.vulncheck.com/advisories/capgo-deleted-bundle-selection-via-missing-deletion-filter-in-updates-endpointmitrethird-party-advisory
News mentions
0No linked articles in our index yet.