Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain Push access to connected repo
-
DeliveryCommit pipeline setting serviceAccountName
-
ExploitPod launches under privileged ServiceAccount
-
ExecutionUse mounted token to query Kubernetes API
-
PersistRead Secrets / exfiltrate credentials
-
ImpactEscalate to cluster takeover
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V8 - Authorization Least privilege enforcement
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires the Woodpecker Kubernetes backend to be in use, an attacker holding Push permission on a repository connected to that instance (authenticated, PR:L), and - for meaningful impact - a privileged ServiceAccount that exists and is reachable in the namespace where pipeline pods run (the AT:P attack requirement). Exploitation is via the pipeline option backend_options.kubernetes.serviceAccountName in step backend options. It is limited by: only affected when the Kubernetes backend is configured (Docker/local backends are not vulnerable); the attacker must already have write/Push access; and the payoff is bounded by the RBAC actually granted to ServiceAccounts in that namespace - a namespace with only a minimally-privileged default ServiceAccount yields little escalation. No end-user interaction is needed beyond triggering the pipeline. |
| Impact | The vendor CVSS 4.0 base is 9.0 (AV:N/AC:L/AT:P/PR:L/UI:N with VC/VI/VA:H and subsequent-system SC/SI/SA:H), reflecting a network-reachable, low-privilege-authenticated attacker whose success additionally depends on a precondition (AT:P) - namely that a privileged ServiceAccount actually exists and is reachable in the pipeline namespace. That AT:P plus the SC/SI/SA:H subsequent-system impact is what pushes the score into the critical range, and it is a fair model: the vulnerability is real and the impact (cluster takeover) is severe, but exploitation value is entirely contingent on namespace RBAC posture. No EPSS score, KEV entry, or SSVC decision was supplied; there is no public exploit identified and no evidence of active exploitation, so this is a genuine-but-conditional priority rather than an internet-wide worm risk. Two limiting factors keep real-world risk below the raw number: the attacker must already hold Push (write) access on a connected repo, and a suitably privileged ServiceAccount must be present in the namespace - in a well-segmented single-tenant namespace with a minimal default ServiceAccount, exploitation yields little. Priority is highest for multi-tenant Woodpecker deployments that share a namespace with privileged workloads. |
| Exploit ScenarioDerived | An attacker with Push access to a repo connected to a Kubernetes-backed Woodpecker instance commits a pipeline YAML that sets backend_options.kubernetes.serviceAccountName to a privileged ServiceAccount in the pipeline namespace (for example one bound to a broad ClusterRole). The pipeline pod launches under that identity, and the attacker's step uses the mounted token to read Kubernetes Secrets and call the API server, exfiltrating database credentials and API keys or creating further privileged workloads toward cluster takeover. No public exploit code is required - the attack is a few lines of pipeline configuration. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 16, 2026
Privilege escalation in Woodpecker CI (v1.0.0 through v3.15.0) using the Kubernetes backend allows any user with Push permission on a connected repository to set the pipeline pod's serviceAccountName to an arbitrary ServiceAccount in the pipeline namespace, inheriting that account's RBAC rights. Because the backend_options.kubernetes.serviceAccountName value was written straight into the pod spec with no admin gating, a low-privileged pipeline author can reach a privileged ServiceAccount to exfiltrate secrets (DB credentials, API keys, TLS certs) and potentially take over the cluster. No public exploit identified at time of analysis; not in CISA KEV.
RemediationAI
Upgrade to Woodpecker CI v3.16.0, which is the vendor-released patch (PR #6792 / commit 5df9d52260626c074c6caafb2dc83d3bc6b53be1); after upgrading, setting serviceAccountName from a step is disabled by default and only honored if an admin explicitly sets WOODPECKER_BACKEND_K8S_SERVICE_ACCOUNT_NAME_ALLOW_FROM_STEP=true on the agent, so leave that flag unset in multi-tenant setups. If you cannot upgrade immediately, apply compensating controls per the advisory: restrict Push access on connected repositories to trusted users only (reduces who can trigger it but does not close the flaw); harden the pipeline namespace so no privileged ServiceAccount exists or is bound there and keep the default ServiceAccount minimally privileged; disable ServiceAccount token automounting (automountServiceAccountToken: false) for accounts pipelines should not use (may break workloads that legitimately need a token); enforce an admission policy (OPA/Gatekeeper, Kyverno, or a ValidatingAdmissionPolicy) that rejects pipeline pods carrying an unexpected serviceAccountName (requires policy engine maintenance); and run a dedicated, isolated namespace per org/instance with no sensitive RBAC bindings to contain blast radius. Advisory and patch: https://github.com/woodpecker-ci/woodpecker/security/advisories/GHSA-qf34-295c-26v8 and https://github.com/woodpecker-ci/woodpecker/pull/6792.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 5 packages in go, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Woodpecker CI is an open-source, container-native continuous integration engine (a Drone fork) that dispatches pipeline steps as workloads via pluggable backends. The Kubernetes backend (Go module go.woodpecker-ci.org/woodpecker, packages under pipeline/backend/kubernetes) constructs a core/v1 Pod for each step. The root cause is CWE-269 (Improper Privilege Management): in pod.go, podSpec() assigned spec.ServiceAccountName = options.ServiceAccountName directly from user-controlled step backend options, unlike other sensitive fields (pod labels, annotations, tolerations, affinity, native secrets) which were already gated behind admin *AllowFromStep flags. In Kubernetes, a pod's serviceAccountName determines which mounted token and therefore which RBAC identity the pod runs as, so allowing pipeline authors to choose it grants them any RBAC permission bound to a reachable ServiceAccount in the pipeline namespace. The fix (commit 5df9d52260626c074c6caafb2dc83d3bc6b53be1, PR #6792) introduces the WOODPECKER_BACKEND_K8S_SERVICE_ACCOUNT_NAME_ALLOW_FROM_STEP flag (default false) and only sets spec.ServiceAccountName when the admin has explicitly opted in.
Know when Kubernetes gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
Sources disagree (Medium–Critical)CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H
PR:L for required Push access; AC:H because impact hinges on a privileged ServiceAccount being reachable in the namespace; S:C as the pod escapes into cluster RBAC identity with full C/I/A impact.
vuln.today treats the vendor’s rating as authoritative. A higher third-party CVSS (e.g. CISA-ADP) is shown for transparency but does not drive the headline severity.
CVSS VectorVendor: https://github.com/woodpecker-ci/woodpecker
Lifecycle Timeline
3DescriptionCVE.org
Impact
A privilege escalation vulnerability affects Woodpecker instances using the Kubernetes backend.
The pipeline option backend_options.kubernetes.serviceAccountName was passed directly to the pod spec without any admin gating.
Who is impacted: any operator running the Kubernetes backend. Any user with Push permission on a connected repository can run pipeline pods under an arbitrary ServiceAccount in the pipeline namespace, gaining that account's RBAC permissions. If a privileged ServiceAccount is reachable in that namespace, this can lead to secret exfiltration (database credentials, API keys, TLS certs) and full cluster takeover.
Patches
https://github.com/woodpecker-ci/woodpecker/pull/6792
Workarounds
Operators who cannot upgrade immediately can mitigate by any of:
- Restrict Push access on repositories connected to the Kubernetes-backed instance to
trusted users only.
- Harden the pipeline namespace: ensure no privileged ServiceAccount exists or is bound in
the namespace where pipeline pods run; keep the default ServiceAccount minimally privileged.
- Disable ServiceAccount token automounting for ServiceAccounts that should not be used by
pipelines.
- Enforce an admission policy (e.g. OPA/Gatekeeper, Kyverno, or a ValidatingAdmissionPolicy)
that rejects pipeline pods setting an unexpected serviceAccountName.
- Use a dedicated, isolated namespace per org/instance with no sensitive RBAC bindings.
Resources
- Vulnerable option introduced in commit
609ba481b5e912f59aaae8ca7bc22b44523c5e37 - Affected versions:
v1.0.0throughv3.15.0 - Source:
pipeline/backend/kubernetes/backend_options.go(fieldServiceAccountName),
pipeline/backend/kubernetes/pod.go (assigned to pod spec with no gating)
Articles & Coverage 1
Executive ViewAI
Woodpecker CI (versions 1.0.0-3.15.0) running on Kubernetes contains a critical privilege escalation flaw allowing any repository developer to assume elevated service accounts and directly access production secrets, credentials, and cluster infrastructure. This transforms a typical CI/CD developer role into a vector for complete cluster compromise and sensitive data exfiltration. Although no public exploit has been identified at time of analysis, the low prerequisite requirements and straightforward exploitation path present significant risk.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Privilege escalation occurs when an attacker leverages flaws in access control mechanisms to gain permissions beyond what they were originally granted.
More in Kubernetes
View allA critical vulnerability in Kubernetes ingress-nginx controller allows unauthenticated attackers with pod network access
Credential-harvesting malware compromised 84 versions of 42 TanStack npm packages on 2026-05-11 via chained GitHub Actio
Kubernetes ingress-nginx contains a configuration injection vulnerability via the mirror-target and mirror-host Ingress
A security issue was discovered in ingress-nginx https://github.com/kubernetes/ingress-nginx where the `auth-url` Ingres
A security issue was discovered in ingress-nginx https://github.com/kubernetes/ingress-nginx where the `auth-tls-match-c
Kubernetes API server in all versions allow an attacker who is able to create a ClusterIP service and set the spec.exter
A security issue was discovered in Kubernetes where a user that can create pods on Windows nodes may be able to escalate
Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes. Rated critical severity (CVSS 9.9), this vulne
Unauthenticated remote attackers can trigger complete database overwrites, server-side file reads, and SSRF attacks agai
The Kubernetes integration in GitLab Enterprise Edition 11.x before 11.2.8, 11.3.x before 11.3.9, and 11.4.x before 11.4
Fluentd configuration injection in the kube-logging Logging operator before 6.6.0 allows a namespace-scoped user who can
Authenticated Typebot users can abuse the webhook block (HTTP Request component) in versions prior to 3.13.1 to issue ar
EUVD-2026-78774
GHSA-qf34-295c-26v8
NVD
CVE.org
EPSS
Exploit-DB