GHSA-jcc8-g2q4-9fxq

Suggest an improvement
Source
https://github.com/advisories/GHSA-jcc8-g2q4-9fxq
Import Source
https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/05/GHSA-jcc8-g2q4-9fxq/GHSA-jcc8-g2q4-9fxq.json
JSON Data
https://api.osv.dev/v1/vulns/GHSA-jcc8-g2q4-9fxq
Aliases
Downstream
Published
2026-05-04T20:11:01Z
Modified
2026-05-13T13:56:05.040427Z
Severity
  • 8.2 (High) CVSS_V4 - CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N CVSS Calculator
Summary
Argo Vulnerable to Unauthenticated Memory Exhaustion (DoS) in Webhook Interceptor
Details

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:

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).
Database specific
{
    "cwe_ids": [
        "CWE-770"
    ],
    "github_reviewed": true,
    "github_reviewed_at": "2026-05-04T20:11:01Z",
    "nvd_published_at": "2026-05-09T04:16:24Z",
    "severity": "HIGH"
}
References

Affected packages

Go / github.com/argoproj/argo-workflows/v3

Package

Name
github.com/argoproj/argo-workflows/v3
View open source insights on deps.dev
Purl
pkg:golang/github.com/argoproj/argo-workflows/v3

Affected ranges

Type
SEMVER
Events
Introduced
0Unknown introduced version / All previous versions are affected
Fixed
3.7.14

Database specific

source
"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/05/GHSA-jcc8-g2q4-9fxq/GHSA-jcc8-g2q4-9fxq.json"

Go / github.com/argoproj/argo-workflows/v4

Package

Name
github.com/argoproj/argo-workflows/v4
View open source insights on deps.dev
Purl
pkg:golang/github.com/argoproj/argo-workflows/v4

Affected ranges

Type
SEMVER
Events
Introduced
4.0.0
Fixed
4.0.5

Database specific

source
"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/05/GHSA-jcc8-g2q4-9fxq/GHSA-jcc8-g2q4-9fxq.json"