CVE-2024-47827
Executive Summary
CVE-2024-47827 is a race condition vulnerability in Argo Workflows, an open-source container-native workflow engine for Kubernetes. The flaw exists in a global variable within version 3.6.0-rc1, allowing any authenticated user with workflow execution privileges to crash the Argo Workflows controller on demand. This results in a denial of service (DoS) condition, disrupting all workflow orchestration in the cluster. The vulnerability has a CVSS score of 5.7 (Medium) and is fixed in version 3.6.0-rc2. No public exploit code or proof-of-concept is currently available.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
CVSS Breakdown & Threat Level
- CVSS Score: 5.7 (Medium)
- Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
- Attack Vector: Network (AV:N) – The vulnerability can be triggered remotely.
- Attack Complexity: Low (AC:L) – No special conditions are required.
- Privileges Required: Low (PR:L) – An attacker needs only a low-privileged user account with workflow execution permissions.
- User Interaction: None (UI:N) – No user action is needed.
- Scope: Unchanged (S:U) – The impact is confined to the vulnerable component.
- Confidentiality Impact: None (C:N) – No data exposure.
- Integrity Impact: None (I:N) – No data modification.
- Availability Impact: High (A:H) – The controller crashes, causing a denial of service.
Threat Level: Medium. The vulnerability is easy to exploit but requires authenticated access and only affects availability.
Deep Dive & Mechanics
The vulnerability is a race condition in a global variable within the Argo Workflows controller. In version 3.6.0-rc1, the controller uses a shared global variable to manage workflow state without proper synchronization. When multiple workflows are executed concurrently, a race condition can occur where one workflow’s operation corrupts the global state, causing the controller to panic and crash.
Root Cause: The lack of mutex or atomic operations on the global variable allows concurrent goroutines to read and write the variable simultaneously, leading to a data race. This is a classic CWE-362 (Concurrent Execution using Shared Resource with Improper Synchronization) issue.
Attack Vector: An authenticated user with permission to create or execute workflows can craft a sequence of workflow submissions that trigger the race condition. The attacker does not need special privileges beyond standard workflow execution rights.
Impact: A successful exploit crashes the Argo Workflows controller pod, halting all workflow processing. The controller must be restarted (e.g., by Kubernetes) to restore service, but the attacker can repeat the exploit.
Vulnerable vs. Patched Code
Vulnerable Code (3.6.0-rc1): The vulnerable code uses a global variable without synchronization. For example:
var globalState map[string]string
func updateState(key, value string) {
globalState[key] = value // Race condition
}
Patched Code (3.6.0-rc2): The fix introduces a mutex to protect the global variable:
var (
globalState map[string]string
mu sync.Mutex
)
func updateState(key, value string) {
mu.Lock()
defer mu.Unlock()
globalState[key] = value // Safe
}
The patch ensures that all accesses to the global variable are serialized, preventing the race condition.
Exploitation & Lab Setup
Red Team
Prerequisites:
- Access to a Kubernetes cluster running Argo Workflows 3.6.0-rc1.
- A user account with permissions to create and execute workflows (e.g.,
argo submit).
Exploitation Steps:
- Identify the Controller: Locate the Argo Workflows controller pod:
kubectl get pods -n argo | grep argo-workflows-controller - Craft Malicious Workflows: Create multiple workflow YAML files that trigger concurrent operations on the same global variable. For example, workflows that rapidly create and delete artifacts or update workflow status.
- Submit Workflows Concurrently: Use a script to submit multiple workflows simultaneously:
for i in {1..10}; do argo submit malicious-workflow-$i.yaml & done wait - Monitor Crash: Check if the controller crashes:
Look for panic messages or container restarts.kubectl logs -n argo <controller-pod> --tail=50
Expected Outcome: The controller pod crashes, and Kubernetes restarts it. The attacker can repeat the process to maintain DoS.
Blue Team
Detection:
- Monitor for rapid workflow submissions from a single user.
- Alert on controller pod restarts or crash loops.
- Use the detection rules below.
Mitigation:
- Immediately upgrade to Argo Workflows 3.6.0-rc2 or later.
- Restrict workflow execution permissions to trusted users only.
- Implement rate limiting on workflow submissions.
Indicators of Compromise (IOCs)
- Log Entries: Controller logs showing panic messages, e.g.,
fatal error: concurrent map writesorpanic: runtime error: invalid memory address. - Pod Events: Frequent restarts of the
argo-workflows-controllerpod. - Network Traffic: Unusual patterns of workflow submission API calls from a single source.
Detection Engineering
YARA Rule
rule CVE_2024_47827_Argo_Workflows_Race_Condition {
meta:
description = "Detects Argo Workflows controller crash logs indicative of CVE-2024-47827"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2024-47827"
strings:
$panic1 = "fatal error: concurrent map writes" ascii wide
$panic2 = "panic: runtime error: invalid memory address" ascii wide
$panic3 = "goroutine" ascii wide
condition:
any of ($panic*) and #panic3 > 5
}
Sigma Rule
title: Argo Workflows Controller Crash - CVE-2024-47827
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects Argo Workflows controller crash events caused by race condition
author: Valters IT
date: 2025-04-10
references:
- https://nvd.nist.gov/vuln/detail/CVE-2024-47827
logsource:
product: kubernetes
service: pod
detection:
selection:
pod: "argo-workflows-controller*"
message|contains:
- "fatal error: concurrent map writes"
- "panic: runtime error: invalid memory address"
condition: selection
falsepositives:
- Legitimate crashes due to other bugs
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (
msg:"CVE-2024-47827 Argo Workflows Controller Crash Attempt";
flow:to_server,established;
content:"POST"; http_method;
content:"/api/v1/workflows/"; http_uri;
content:"argo"; http_client_body;
pcre:"/(workflow|submit)/i";
threshold: type both, track by_src, count 10, seconds 60;
classtype:attempted-dos;
sid:1000001;
rev:1;
)
Remediation & Mitigation
Immediate Actions:
- Upgrade: Update Argo Workflows to version 3.6.0-rc2 or later. This is the only complete fix.
- Restrict Access: Limit workflow execution permissions to only trusted users and service accounts.
- Monitor: Enable logging and alerting on controller crashes and rapid workflow submissions.
Long-Term Measures:
- Implement rate limiting on the Argo Workflows API.
- Use network policies to restrict access to the controller.
- Regularly update Argo Workflows to the latest stable version.
Workarounds:
- If upgrade is not immediately possible, consider disabling workflow execution for untrusted users, but this may impact functionality.
Valters IT
DevSecOps & Cyber Threat Intelligence Expert