argoproj / argoproj/argo-workflows
S3 Artifact multi-namespace security vulnerability
- Dominant language
- Go
- Stars
- 17k
- Forks
- 3.7k
- Avg merge
- 1d 20h
- Merged PRs (30d)
- 138
Description
**Is this a BUG REPORT or FEATURE REQUEST?**:
Both
**What happened**:
Context:
We want to run workflows in multiple namespaces.
We want to use s3 for storing artifacts.
Storing and retrieving artifacts is handled by the argoexec sidecar pod.
For s3 this pod _directly_ connects to s3.
To connect to s3 the sidecar needs s3 credentials. These credentials need to be present in each namespace that we want to run workflows.
Having these credentials in each namespace opens up the s3 bucket to all namespaces. Having artifacts from one namespace available to other namespaces.
Proper namespace isolation cannot be done in this way.
**What you expected to happen**:
Storing and retrieving artifacts is proxied by the controller which handles the connection to s3. The controller first checks if the workflow is authorized to obtain the artifact.
This way direct access to the storage location is shielded and the artifact storage can be used for all namespaces.
Running a controller in each namespace or having a s3 bucket per namespace (currently not possible) are not feasible scaling solutions.
**How to reproduce it (as minimally and precisely as possible)**:
Run workflows in seperate namespaces
**Anything else we need to know?**:
**Environment**:
- Argo version: 2.2.1
- Kubernetes version : 1.12.4
Contributor guide
Research direction
Start by examining the argoexec sidecar's artifact storage and retrieval path and the controller entry points described in the issue. Trace how S3 credentials and namespace authorization are handled, then verify that artifacts cannot be accessed across namespaces while shared S3 storage remains usable.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- aws, kubernetes
- Domain
- backend-api-design, cloud, security
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100