GitHub Advisoryadvisory · Go
GHSA-jcc8-g2q4-9fxq Argo Vulnerable to Unauthenticated Memory Exhaustion (DoS) in Webhook Interceptor
HIGH
Official page ↗
- Aliases
- CVE-2026-42294
- Ecosystem
- Go
- Packages
- github.com/argoproj/argo-workflows/v3, github.com/argoproj/argo-workflows/v4
- Severity
- High
- CVSS vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
- Weaknesses
- CWE-770
- Reviewed
- 2026-05-04
Affected packages
• Go github.com/argoproj/argo-workflows/v3: < 3.7.14 → fixed in 3.7.14
• Go github.com/argoproj/argo-workflows/v4: >= 4.0.0, < 4.0.5 → fixed in 4.0.5
Description
Severity: Medium
Component: Webhook Interceptor (`server/auth/webhook`)
Vulnerability Type: Denial of Service (DoS)
Description
The Webhook Interceptor loads the entire request body into memory before authenticating the request or verifying its signature. This occurs on the `/api/v1/events/` endpoint, which is publicly accessible (albeit intended for webhooks). An attacker can send a request with an extremely large body (e.g., multiple gigabytes), causing the Argo Server to allocate excessive memory, potentially leading to an Out-Of-Memory (OOM) crash and denial of service.
Vulnerable Code
In `server/auth/webhook/interceptor.go`:
```go
func (i *WebhookInterceptor) addWebhookAuthorization(r *http.Request, kube kubernetes.Interface) error {
// ... basic checks ...
// Vulnerability: Reads entire body into memory unconditionally
buf, _ := io.ReadAll(r.Body)
defer func() { r.Body = io.NopCloser(bytes.NewBuffer(buf)) }()
// ... subsequent logic finds correct service account and secret ...
// ... verification happens later ...
}
```
The `io.ReadAll` call happens before the signature verification loop.
Impact
• Service Availability: An attacker can crash the Argo Server, disrupting workflow execution and API access for all users.
PoC (Conceptual)
1. Target the webhook endpoint: `POST /api/v1/events/some-namespace`
2. Send a `Content-Length: 1000000000` (1GB) header.
3. Stream 1GB of random data.
4. Monitor server memory usage. It will spike until 1GB is allocated or the process crashes.
Recommendation
1. Limit Body Size: Enforce a strict limit on webhook body size (e.g., 10MB) using `http.MaxBytesReader`.
2. Streaming Verification: If possible, verify the signature in a streaming fashion or use a temporary file for large payloads (though typically webhooks are small).
Related
Alias · CVE (1)
- CVE-2026-42294 Argo Workflows is an open source container-native workflow engine for orchestrating parallel jobs on Kubernetes. vulnerability
Weakness · CWE (1)
- CWE-770 Allocation of Resources Without Limits or Throttling weakness
References
- https://github.com/argoproj/argo-workflows/security/advisories/GHSA-jcc8-g2q4-9fxq web
- https://nvd.nist.gov/vuln/detail/CVE-2026-42294 advisory
- https://github.com/argoproj/argo-workflows/commit/7abb4de6c3599e2d5d960ba4d5de4cf1df109965 web
- https://access.redhat.com/security/cve/CVE-2026-42294 web
- https://bugzilla.redhat.com/show_bug.cgi?id=2468443 web
- https://github.com/argoproj/argo-workflows package
- https://github.com/argoproj/argo-workflows/releases/tag/v3.7.14 web
- https://github.com/argoproj/argo-workflows/releases/tag/v4.0.5 web
- https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-42294.json web