CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-40886

CVE-2026-40886: Denial of Service via Unchecked Annotation Parsing in Argo Workflows

Amit Schendel
Amit Schendel
Senior Security Researcher

Apr 23, 2026·7 min read·38 visits

Executive Summary (TL;DR)

Argo Workflows fails to properly validate the array index when parsing the pod garbage collection annotation. Submitting a workflow with a malformed annotation causes a persistent Go runtime panic in the controller process, resulting in a denial of service.

CVE-2026-40886 is a high-severity denial-of-service vulnerability in Argo Workflows caused by an unhandled Go runtime panic. A malformed Kubernetes annotation triggers an out-of-bounds array access in the controller's pod informer, leading to a permanent crash loop that halts all workflow orchestration operations.

Vulnerability Overview

Argo Workflows relies on a central controller to orchestrate container-native workflows across a Kubernetes cluster. The controller utilizes a Kubernetes Informer to monitor pod state changes and manage resource lifecycles, including garbage collection operations. This vulnerability resides within the controller's pod informer logic, specifically in the function responsible for determining pod garbage collection strategies.

The underlying flaw is categorized as CWE-129: Improper Validation of Array Index. When the controller processes a pod containing the workflows.argoproj.io/pod-gc-strategy annotation, it fails to ensure the annotation string meets expected formatting constraints before accessing the resulting indexed elements. This oversight creates a critical fragility in the core event processing loop.

The security impact is a high-severity Denial of Service (DoS). Because the missing validation leads to a Go runtime panic within a background goroutine, the entire controller process terminates abruptly. Furthermore, the persistent nature of Kubernetes API resources ensures the controller will repeatedly encounter the malformed pod upon restart, resulting in a permanent CrashLoopBackOff state that halts all workflow orchestration cluster-wide.

Root Cause Analysis

The root cause of CVE-2026-40886 is an unchecked memory access during string tokenization in the podGCFromPod() function. This function extracts the value of the workflows.argoproj.io/pod-gc-strategy annotation and attempts to parse it into a strategy type and a delay duration. The implementation incorrectly assumed that the annotation value would always contain a forward slash character acting as a delimiter.

The vulnerable code utilizes the strings.Split(val, "/") function from the Go standard library. When passed a string without the specified delimiter, strings.Split returns a string slice containing exactly one element representing the original string. Immediately following this operation, the code explicitly accesses the second element of the resulting slice via parts[1].

In the Go programming language, attempting to access an index beyond the bounds of a slice triggers a synchronous runtime panic. Since this index access occurs without first verifying the length of the parts slice (len(parts) > 1), a maliciously crafted or inadvertently malformed annotation guarantees an out-of-bounds read and subsequent runtime panic.

Compounding the issue, this panic originates inside the pod informer's event handler. In Go, an unrecovered panic within a goroutine unwinds the stack and crashes the entire application process. The controller lacks a global recovery mechanism for this specific informer goroutine, escalating a localized parsing error into a total application failure.

Code Analysis and Patch Details

An examination of the controller code reveals the specific mechanics of the vulnerability and the simplicity of the subsequent patch. The vulnerable segment in the controller codebase manually structures the PodGC object using hardcoded slice indices.

The vulnerable implementation forces a panic if the parts slice has a length of 1:

func podGCFromPod(pod *apiv1.Pod) wfv1.PodGC {
    if val, ok := pod.Annotations[common.AnnotationKeyPodGCStrategy]; ok {
        parts := strings.Split(val, "/")
        // CRITICAL VULNERABILITY: parts[1] accessed without bounds checking
        return wfv1.PodGC{Strategy: wfv1.PodGCStrategy(parts[0]), DeleteDelayDuration: parts[1]}
    }
    return wfv1.PodGC{Strategy: wfv1.PodGCOnPodNone}
}

The official patch applied in commit 4fe54e529eff5519233287251e5adf9a61b9fc67 addresses the flaw by transitioning from strings.Split to strings.Cut. Introduced in Go 1.18, strings.Cut is designed specifically for safe string partitioning and avoids slice allocations entirely.

The patched implementation safely handles missing delimiters:

func podGCFromPod(pod *apiv1.Pod) wfv1.PodGC {
    if val, ok := pod.Annotations[common.AnnotationKeyPodGCStrategy]; ok {
        strategy, delay, _ := strings.Cut(val, "/")
        // FIX: strings.Cut assigns empty string to delay if "/" is absent
        return wfv1.PodGC{Strategy: wfv1.PodGCStrategy(strategy), DeleteDelayDuration: delay}
    }
    return wfv1.PodGC{Strategy: wfv1.PodGCOnPodNone}
}

If the forward slash delimiter is absent, strings.Cut returns the original string as the strategy variable and an empty string as the delay variable. This eliminates the out-of-bounds slice access while maintaining intended functionality for properly formatted annotations. The fix is comprehensive and mitigates variant attacks targeting this specific parsing path.

Exploitation Methodology

Exploitation of CVE-2026-40886 requires minimal privileges: an attacker needs only the standard role-based access control (RBAC) permissions required to create Workflow resources within the cluster. Network access to the Kubernetes API server or the Argo Workflows API endpoint is necessary to submit the malicious payload.

The attack sequence is deterministic and highly reliable. The attacker submits a YAML manifest defining a new Workflow. Within this manifest, the attacker injects the workflows.argoproj.io/pod-gc-strategy annotation under the podMetadata block, assigning it a string value that lacks a forward slash delimiter.

A verified Proof-of-Concept (PoC) demonstrating this attack involves applying the following workflow manifest:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  name: crash-podgc
spec:
  entrypoint: main
  serviceAccountName: default
  podGC:
    strategy: OnPodCompletion
  podMetadata:
    annotations:
      workflows.argoproj.io/pod-gc-strategy: "NoSlash"
  templates:
    - name: main
      container:
        image: alpine:3.18
        command: [echo, "hello"]

Upon submission, the Kubernetes API persists the resource and schedules the underlying pod. The Argo Workflows controller detects the new pod via its informer cache mechanisms. As the controller executes podGCFromPod() during the event processing phase, it parses the malformed annotation, triggers the array index panic, and terminates execution entirely.

Impact Assessment and Architecture Context

The impact of this vulnerability extends far beyond a simple transient application crash due to the design of Kubernetes controllers. Kubernetes operates on a declarative state model. When the controller process crashes, the malformed pod object remains registered persistently in the underlying etcd data store.

When the orchestration platform detects the Argo Workflows controller pod has terminated, the corresponding deployment engine automatically restarts the pod to enforce the desired replica count. Upon initialization, the newly spawned controller synchronizes its local informer cache with the Kubernetes API, immediately pulling the malicious pod state back into its processing queue.

This architectural behavior guarantees a permanent denial of service condition. The workflow controller enters an unrecoverable CrashLoopBackOff state, rendering the entire workflow orchestration system inoperable. Existing workflow execution will halt, and new workflows will remain pending indefinitely.

The assigned CVSS v3.1 score of 7.7 accurately reflects this operational impact. While the vulnerability does not directly permit data exfiltration or arbitrary code execution, the absolute loss of system availability combined with a low exploitation barrier designates this flaw as a critical operational risk.

Remediation and Mitigation Strategy

The primary and most effective remediation for CVE-2026-40886 is upgrading to a patched release of Argo Workflows. The vulnerability is fully resolved in the official releases of v3.7.14 and v4.0.5. System administrators are strongly advised to deploy these updates immediately, as the exploit requirements are trivial and the disruption severe.

If upgrading the controller is not immediately feasible, defense-in-depth measures can be implemented at the Kubernetes API layer. Administrators can deploy an admission controller, such as OPA Gatekeeper or Kyverno, to validate the workflows.argoproj.io/pod-gc-strategy annotation on all incoming Workflow objects. The admission policy should be configured to reject any requests where the annotation value fails to match the expected formatting schema.

For clusters already experiencing active exploitation and trapped in a persistent crash loop, manual administrative intervention is required to restore service. The controller process cannot self-heal from this corrupted state, as the problematic payload resides within the Kubernetes API.

Recovery is achieved by deleting the malicious resource directly from the cluster using standard administrative tooling. Executing kubectl delete workflow <workflow-name> -n <namespace> removes the poisoned state from the API server. Once the resource is purged, the Argo Workflows controller will restart successfully, bypass the previously malformed state, and resume standard orchestration processing.

Official Patches

ArgoprojOfficial GitHub Security Advisory GHSA-5jv8-h7qh-rf5p

Fix Analysis (1)

Technical Appendix

CVSS Score
7.7/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:N/A:H

Affected Systems

Argo Workflows ControllerKubernetes Clusters running Argo Workflows v3.6.xKubernetes Clusters running Argo Workflows v3.7.xKubernetes Clusters running Argo Workflows v4.0.x

Affected Versions Detail

Product
Affected Versions
Fixed Version
Argo Workflows
Argoproj
>= 3.6.5, <= 3.6.19v3.7.14
Argo Workflows
Argoproj
>= 3.7.0, <= 3.7.13v3.7.14
Argo Workflows
Argoproj
>= 4.0.0, <= 4.0.4v4.0.5
AttributeDetail
CVE IDCVE-2026-40886
CVSS v3.1 Score7.7
Attack VectorNetwork
CWECWE-129
ImpactDenial of Service (Availability: High)
Exploit StatusProof of Concept Available
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1499.004Endpoint Denial of Service: Application Exhaustion
Impact
CWE-129
Improper Validation of Array Index

The software uses untrusted input to calculate an array index but does not validate that the index is within expected bounds.

Known Exploits & Detection

Proof-of-ConceptMinimal Workflow manifest demonstrating the injection of the malformed 'workflows.argoproj.io/pod-gc-strategy' annotation

Vulnerability Timeline

Vulnerability discovered and reported to project maintainers
2026-04-13
Advisory GHSA-5jv8-h7qh-rf5p published by Argoproj
2026-04-23
CVE-2026-40886 formally published
2026-04-23
Patched versions v3.7.14 and v4.0.5 released
2026-04-23

References & Sources

  • [1]Official Advisory GHSA-5jv8-h7qh-rf5p
  • [2]NVD Record CVE-2026-40886
  • [3]CVE.org Entry
  • [4]Argo Workflows Patch Commit

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 12 hours ago•CVE-2026-11748
6.9

CVE-2026-11748: Unauthenticated LDAP Injection in Central Dogma Server Authentication

An LDAP injection vulnerability exists in the centraldogma-server-auth-shiro module of LY Corporation Central Dogma before version 0.84.0. The search logic dynamically constructs LDAP search filters by interpolating user-provided usernames without escaping RFC 4515 metacharacters. Unauthenticated remote attackers can leverage this flaw to bypass authentication, enumerate directory hierarchies, and access unauthorized resources.

Alon Barad
Alon Barad
7 views•6 min read
•about 13 hours ago•CVE-2026-11746
9.4

CVE-2026-11746: Use of Hard-coded ZooKeeper Replication Secret 'ch4n63m3' in Central Dogma Server

CVE-2026-11746 is a critical vulnerability in Central Dogma Server prior to version 0.84.0, where an embedded ZooKeeper replication secret silently falls back to a publicly known, hard-coded default string ('ch4n63m3'). Remote attackers with access to the replication network can authenticate as legitimate cluster peers, potentially leading to unauthorized data exposure, state manipulation, or complete cluster takeover.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 14 hours ago•CVE-2026-56665
4.2

CVE-2026-56665: Logical Validation Bypass in ZITADEL External JWT Identity Provider

A logical verification flaw in ZITADEL's external JWT Identity Provider validation allows attackers to bypass session expiration checks. If an incoming JWT lacks the 'exp' claim, the system skips validation entirely, creating an indefinitely valid session. This issue has been addressed in versions 3.4.12 and 4.15.2.

Alon Barad
Alon Barad
4 views•7 min read
•about 15 hours ago•CVE-2026-59149
6.5

CVE-2026-59149: Sibling Directory Path Traversal in Mockoon Backend Server

CVE-2026-59149 identifies a directory traversal vulnerability in `@mockoon/commons-server`, the backend mock-server library powering the Mockoon application. The flaw occurs in the path containment validation logic used during raw file response generation. An unauthenticated attacker can exploit this weakness to retrieve arbitrary files from sibling directories sharing a common prefix with the designated static base directory.

Amit Schendel
Amit Schendel
6 views•5 min read
•about 16 hours ago•CVE-2026-59148
8.8

CVE-2026-59148: Unauthenticated Administrative API and CORS Misconfiguration in Mockoon

An in-depth analysis of CVE-2026-59148, a high-severity flaw in Mockoon where unauthenticated administrative endpoints and a wildcard Cross-Origin Resource Sharing (CORS) policy allow remote execution, state poisoning, and credential theft.

Alon Barad
Alon Barad
5 views•6 min read
•about 17 hours ago•CVE-2026-56666
4.8

CVE-2026-56666: Account Takeover via Improper Email Verification in ZITADEL Federated Identity Handler

An improper authentication vulnerability (CWE-287) in ZITADEL's external identity provider handler before version 4.15.3 allows remote attackers to perform complete account takeover. When auto-linking by email is enabled, ZITADEL verifies that the local target account has a verified email address but fails to verify if the external provider confirmed ownership of that same email. Attackers can exploit this by registering an unverified account with a victim's email address on a permissive external provider, leading to unauthorized account binding and persistent access.

Amit Schendel
Amit Schendel
2 views•7 min read