CVE-2026-27111

5.0 MEDIUM

📋 TL;DR

Kargo versions 1.9.0 to 1.9.2 have an authorization bypass vulnerability where three REST API endpoints omit the 'promote' verb check. This allows users with standard Kubernetes RBAC permissions to trigger promotions even if they were deliberately denied this sensitive operation. Organizations using affected Kargo versions for software artifact promotion are impacted.

💻 Affected Systems

Products:
  • Kargo
Versions: v1.9.0 to v1.9.2
Operating Systems: All
Default Config Vulnerable: ⚠️ Yes
Notes: Only affects the newer REST API endpoints; the legacy gRPC API correctly enforces the promote verb.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Unauthorized users could promote untested or malicious artifacts through production pipelines, potentially deploying vulnerable or malicious code to production environments.

🟠

Likely Case

Users with standard Kubernetes permissions but without explicit promote permissions could bypass intended access controls and trigger promotions they shouldn't be authorized for.

🟢

If Mitigated

With proper network segmentation and minimal RBAC permissions, impact would be limited to authorized users who already have some level of access.

🌐 Internet-Facing: LOW - Kargo is typically deployed internally as part of CI/CD infrastructure rather than internet-facing.
🏢 Internal Only: HIGH - This is an internal authorization bypass affecting sensitive promotion operations within the software delivery pipeline.

🎯 Exploit Status

Public PoC: ✅ No
Weaponized: UNKNOWN
Unauthenticated Exploit: ✅ No
Complexity: LOW

Exploitation requires authenticated access with standard Kubernetes RBAC permissions for the underlying resources.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: v1.9.3

Vendor Advisory: https://github.com/akuity/kargo/security/advisories/GHSA-5vvm-67pj-72g4

Restart Required: Yes

Instructions:

1. Backup current Kargo configuration. 2. Upgrade Kargo to version 1.9.3 or later. 3. Restart Kargo components. 4. Verify the fix by testing authorization on affected endpoints.

🔧 Temporary Workarounds

Disable REST API endpoints

all

Temporarily disable the three vulnerable REST API endpoints until patching is possible.

# Configure Kargo to disable affected endpoints or restrict access via network policies

Restrict RBAC permissions

linux

Tighten Kubernetes RBAC to remove patch/create permissions on freights/status and promotions from users who shouldn't have promote access.

kubectl edit rolebinding -n kargo-system
# Remove patch/create permissions from unauthorized users

🧯 If You Can't Patch

  • Implement network policies to restrict access to Kargo REST API endpoints to only authorized users/services
  • Audit and minimize RBAC permissions for all users, ensuring no one has both standard permissions and is denied promote verb

🔍 How to Verify

Check if Vulnerable:

Check Kargo version: kubectl get deployment -n kargo-system kargo-controller -o jsonpath='{.spec.template.spec.containers[0].image}' | grep -o 'v1\.9\.[0-2]'

Check Version:

kubectl get deployment -n kargo-system kargo-controller -o jsonpath='{.spec.template.spec.containers[0].image}'

Verify Fix Applied:

After upgrade, test that users without promote permissions cannot access /v1beta1/projects/{project}/freight/{freight}/approve, /v1beta1/projects/{project}/stages/{stage}/promotions, and /v1beta1/projects/{project}/stages/{stage}/promotions/downstream endpoints

📡 Detection & Monitoring

Log Indicators:

  • Unauthorized promotion attempts via REST API
  • Successful promotions from users without promote permissions
  • Access to /v1beta1/projects/*/freight/*/approve or /v1beta1/projects/*/stages/*/promotions* endpoints

Network Indicators:

  • HTTP requests to vulnerable endpoints from unauthorized sources

SIEM Query:

source="kargo" AND (path="/v1beta1/projects/*/freight/*/approve" OR path="/v1beta1/projects/*/stages/*/promotions*") AND user NOT IN authorized_promote_users

🔗 References

📤 Share & Export