Skip to main content

Woodpecker CI EUVDEUVD-2026-78774

| CVE-2026-61549 CRITICAL
Improper Privilege Management (CWE-269)
2026-07-14 https://github.com/woodpecker-ci/woodpecker GHSA-qf34-295c-26v8
Critical
Disputed · 9.0 Vendor: https://github.com/woodpecker-ci/woodpecker
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain Push access to connected repo
  2. Delivery
    Commit pipeline setting serviceAccountName
  3. Exploit
    Pod launches under privileged ServiceAccount
  4. Execution
    Use mounted token to query Kubernetes API
  5. Persist
    Read Secrets / exfiltrate credentials
  6. Impact
    Escalate 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.

Act Now Prioritize within 24-48h. Why: CRITICAL severity.
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

woodpecker 1.0.0, < 3.16.0

Affected Packages

go github.com/woodpecker-ci/woodpecker no fix
go go.woodpecker-ci.org/woodpecker no fix
go go.woodpecker-ci.org/woodpecker/v2 no fix
go go.woodpecker-ci.org/woodpecker/v3 fix: 3.16.0
euvd woodpecker_1_0_0 fix: 3.16.0

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)
Vendor (https://github.com/woodpecker-ci/woodpecker) PRIMARY 9.0 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
vuln.today AI 8.5 HIGH

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.

3.1 AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H
SUSE 8.2 MEDIUM

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

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
High
Vulnerable system: Availability
High
Subsequent system: Confidentiality
High
Subsequent system: Integrity
High
Subsequent system: Availability
High

Lifecycle Timeline

3
Analysis Updated
Sep 15, 2026 - 15:28 vuln.today
v2 - CVSS changed
CVSS changed
Sep 15, 2026 - 15:22 NVD
9.0 (CRITICAL)
CVE Published
Jul 14, 2026 - 20:29 cve.org
HIGH

DescriptionCVE.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.0 through v3.15.0
  • Source: pipeline/backend/kubernetes/backend_options.go (field ServiceAccountName),

pipeline/backend/kubernetes/pod.go (assigned to pod spec with no gating)

Executive ViewAI

Why It Matters

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.

Business Impact: Severe
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.2%
Top 94% exploitable
Prevalence
Low
niche open-source CI tool, only the Kubernetes-backend subset is affected
Threat Intel
1
1 source
Data Quality
6 sources
Confidence: High

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.

SignalValue
Severity CRITICAL
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
Very High

Priority Score

45
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +45
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Privilege escalation occurs when an attacker leverages flaws in access control mechanisms to gain permissions beyond what they were originally granted.

CVE-2025-1974 CRITICAL POC
9.8 Mar 25

A critical vulnerability in Kubernetes ingress-nginx controller allows unauthenticated attackers with pod network access

CVE-2026-45321 CRITICAL POC
9.6 May 12

Credential-harvesting malware compromised 84 versions of 42 TanStack npm packages on 2026-05-11 via chained GitHub Actio

CVE-2025-1098 HIGH POC
8.8 Mar 25

Kubernetes ingress-nginx contains a configuration injection vulnerability via the mirror-target and mirror-host Ingress

CVE-2025-24514 HIGH POC
8.8 Mar 25

A security issue was discovered in ingress-nginx https://github.com/kubernetes/ingress-nginx where the `auth-url` Ingres

CVE-2025-1097 HIGH POC
8.8 Mar 25

A security issue was discovered in ingress-nginx https://github.com/kubernetes/ingress-nginx where the `auth-tls-match-c

CVE-2020-8554 MEDIUM POC
6.3 Jan 21

Kubernetes API server in all versions allow an attacker who is able to create a ClusterIP service and set the spec.exter

CVE-2023-3676 HIGH POC
8.8 Oct 31

A security issue was discovered in Kubernetes where a user that can create pods on Windows nodes may be able to escalate

CVE-2025-55190 CRITICAL POC
9.9 Sep 04

Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes. Rated critical severity (CVSS 9.9), this vulne

CVE-2026-34976 CRITICAL POC
10.0 Apr 02

Unauthenticated remote attackers can trigger complete database overwrites, server-side file reads, and SSRF attacks agai

CVE-2018-18843 CRITICAL POC
10.0 Dec 04

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

CVE-2026-54680 CRITICAL POC
9.9 Jul 29

Fluentd configuration injection in the kube-logging Logging operator before 6.6.0 allows a namespace-scoped user who can

CVE-2025-64709 CRITICAL POC
9.9 Nov 13

Authenticated Typebot users can abuse the webhook block (HTTP Request component) in versions prior to 3.13.1 to issue ar

Vendor StatusVendor

SUSE

Severity: Moderate

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy