Repository navigation
[main] Update osv-vulnerability-alerts [SECURITY] (main) - #2173
ospk8s-renovate[bot] wants to merge 1 commit into
Conversation
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: ospk8s-renovate[bot] The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
|
Hi @ospk8s-renovate[bot]. Thanks for your PR. I'm waiting for a openstack-k8s-operators member to verify that this patch is reasonable to test. If it is, they should reply with Regular contributors should join the org to skip this step. Once the patch is verified, the new status will be reflected by the I understand the commands that are listed here. DetailsInstructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. |
|
Important Review skippedBot user detected. To trigger a single review, invoke the
|
OpenStackControlPlane CRD Size Report
Threshold reference
|
|
Build failed (check pipeline). Post ✔️ openstack-k8s-operators-content-provider SUCCESS in 3h 54m 07s |
17e74eb to
698c679
Compare
ℹ️ Artifact update noticeFile name: api/go.modIn order to perform the update(s) described in the table above, Renovate ran the
Details:
File name: go.modIn order to perform the update(s) described in the table above, Renovate ran the
Details:
|
698c679 to
a2415fe
Compare
This PR contains the following updates:
v1.18.6→v1.19.6v1.83.1→v1.83.2cert-manager: Direct ACME Challenge resources can bypass Issuer DNS01 solver policy and use ClusterIssuer DNS credentials
BIT-cert-manager-2026-62290 / CVE-2026-62290 / GHSA-8rvj-mm4h-c258
More information
Details
Summary
Challengeresources underacme.cert-manager.iocan be created directly by namespace users. On create, cert-manager performs no admission validation tying the Challenge to anOrder, an owner reference, or an Issuer-selected solver. The ACME Challenge controller then reconciles the direct resource and usesChallenge.spec.solveras the DNS01 provider configuration.When the direct Challenge references a
ClusterIssuer, cert-manager derives the DNS provider secret namespace and ambient-credential policy from theClusterIssuerreference, but the DNS provider configuration itself is attacker-controlled throughChallenge.spec.solver. This lets a namespace user bypassIssuer/ClusterIssuersolver selectors such asdnsZones,dnsNames, andmatchLabels, and make the cert-manager controller use ClusterIssuer DNS credentials for attacker-selected provider settings and DNS names.In the acme-dns case, this becomes credential disclosure because the attacker-controlled solver host receives the
X-Api-UserandX-Api-Keyheaders loaded by cert-manager from the ClusterIssuer resource namespace.Attack preconditions
challenges.acme.cert-manager.ioresources in at least one namespace.Challengeresources cluster-wide.ClusterIssuerexists in the cluster.ClusterIssuerhas a DNS01 solver that uses a Secret in the cluster resource namespace, or relies on ambient credentials enabled forClusterIssuer.Severity
Rationale: a tenant with namespace-level ACME Challenge create permissions, including permissions granted by cert-manager's aggregate edit role, can cause a cluster-scoped controller to use DNS credentials or ambient cloud credentials outside the Issuer's intended solver policy. With acme-dns specifically, this can disclose the referenced acme-dns account credential to an attacker-controlled endpoint. With other DNS providers, the impact is credential use, Issuer policy bypass, and unauthorized DNS mutation risk unless a provider-specific credential disclosure path is separately demonstrated.
Why this is not just RBAC misconfiguration
cert-manager's documented end-user workflow does not require users to manually create
Challengeresources. Challenges are internal ACME workflow objects generated from Orders after cert-manager has selected a solver from the referenced Issuer or ClusterIssuer. If default or aggregate roles grant namespace users permission to create these resources, the controller still should not treat a user-controlledChallenge.spec.solveras authoritative for a referencedClusterIssuer.The security boundary is the Issuer/ClusterIssuer solver policy and credential configuration. Direct Challenge creation bypasses that boundary because the controller derives credential namespace and ambient credential permission from
issuerRef, while accepting the DNS provider configuration from the untrusted Challenge object.Affected components
challenges.acme.cert-manager.ioAffected versions tested
The issue was reproduced on:
mastercommit2c0f1a6a4v1.20.2commite5b7b1845v1.19.5commitcda7b7896v1.18.6commit4699caabbSee
VERSION_TEST_MATRIX.mdfor the command matrix and outputs.Technical details
Relevant code paths:
internal/apis/acme/validation/challenge.go:44-45:ValidateChallengereturns no errors on create.deploy/crds/acme.cert-manager.io_challenges.yaml:spec.solveris a required user-controlled field onChallenge.pkg/controller/acmechallenges/scheduler/scheduler.go:51-58: scheduler lists all Challenges.pkg/controller/acmechallenges/controller.go:180-197: scheduler setsstatus.processing=true.pkg/controller/acmechallenges/sync.go:139-183: controller loads the referenced Issuer and then presents the Challenge.pkg/issuer/acme/dns/dns.go:81: DNS solverPresentignores the issuer object argument.pkg/issuer/acme/dns/dns.go:180-187: DNS provider config and resource namespace are derived fromChallenge.spec.pkg/controller/helper.go:39-44:ClusterIssuerreferences use the cluster resource namespace.pkg/controller/helper.go:66-72: ambient credentials are allowed based onissuerRef.kind.internal/apis/config/controller/v1alpha1/defaults.go:68-69: ClusterIssuer ambient credentials default to enabled.deploy/charts/cert-manager/templates/rbac.yaml:517-519: the aggregate edit role can create/updatechallengesandorders.The normal
Orderflow selects a solver from the Issuer:pkg/util/solverpicker/solverpicker.go: solver selectors are evaluated.pkg/controller/acmeorders/util.go:94-106: solvers are fetched from the Issuer and selected.pkg/controller/acmeorders/util.go:131-142: the selected solver is copied into the generated Challenge.The direct
Challengeflow skips that selection entirely because the direct object already contains a solver.Proof of concept
PoC A: low-privileged namespace user can persist a direct ClusterIssuer Challenge
The following script starts k3s in Docker, installs only the relevant CRDs, creates a platform-owned ClusterIssuer, creates a namespace user with Challenge create permission but no secret or ClusterIssuer read permission, and creates a direct DNS01 Challenge referencing that ClusterIssuer and a cluster resource namespace secret.
The ClusterIssuer is configured to use a legitimate acme-dns host for
victim.example.com. The direct Challenge uses that same DNS name, but replaces the acme-dns host with an attacker-controlled endpoint. This demonstrates credential disclosure without relying on an out-of-policy DNS name.A broader DNS policy-bypass variant is also possible when the referenced credential or ambient provider can operate on the attacker-selected DNS name. In that case, the same direct Challenge path bypasses the Issuer/ClusterIssuer solver selectors and provider configuration.
Run from the cert-manager repository root:
Expected output:
This proves that the API accepts the direct object from a user who cannot read the target secret or ClusterIssuer.
PoC B: acme-dns provider sends referenced credentials to the configured host
This self-contained unit PoC demonstrates the concrete acme-dns impact: the acme-dns provider uses the configured host and sends credentials from account JSON as HTTP headers.
Run from repository root:
Expected output:
Combined with PoC A and the code path in
pkg/issuer/acme/dns/dns.go, this shows that a direct Challenge can select an attacker-controlled acme-dns host while causing cert-manager to load account JSON from the ClusterIssuer resource namespace.Credential impact scope
The concrete credential-disclosure proof in this report is for the acme-dns provider: the attacker-controlled
hostreceives theX-Api-UserandX-Api-Keyvalues loaded from the referenced account JSON.For other DNS01 providers, this report should be read as credential use, policy bypass, and DNS mutation risk. The controller may use platform-owned secrets or ambient cloud credentials to perform DNS operations selected by the attacker-controlled Challenge. Provider-specific credential disclosure should not be assumed without a separate provider-level PoC.
Expected behavior
Users should not be able to create standalone
Challengeresources that cause cert-manager to use arbitrary solver configuration under the authority of a referenced Issuer or ClusterIssuer. If directChallengeresources are intentionally exposed, the controller should only reconcile Challenges that are owned by cert-manager-created Orders and whose solver config was selected from the referenced Issuer.Actual behavior
A user with namespace-level Challenge create permission can create a direct Challenge with arbitrary solver configuration. The controller reconciles it, derives credential namespace and ambient credential permission from
issuerRef, and uses attacker-controlled provider settings.Suggested remediation
Possible mitigations:
Challengeresources unless the controller or admission layer can confirm an existing cert-manager-createdOrderthat owns the Challenge.ChallengeandOrdercreation permissions out of aggregateeditunless direct use is a supported security boundary.Severity
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
gRPC-Go xDS servers: Denial of Service (DoS) via crash due to missing
:authorityandHostheadersCVE-2026-84445 / GHSA-2v4p-qf9q-27wj
More information
Details
A vulnerability exists in gRPC-Go servers configured with
xds.NewGRPCServer()where a crafted request missing both:authorityandHostheaders can cause a server panic, resulting in a Denial of Service (DoS).Servers built with
xds.NewGRPCServerinstall an xDS routing interceptor on every RPC. This interceptor looks up the request’s:authorityheader to pick a virtual host. The HTTP/2 server transport previously accepted requests that had neither:authoritynorHost. When this happened, the xDS routing interceptor attempted to access the first element of an empty slice of authorities, leading to an index out of bounds panic. Since the per-RPC goroutine does not recover from panics, the entire server process would terminate.This panic occurs in the interceptor pipeline, meaning the transport credentials handshake (TLS, mTLS, or ALTS) and HTTP/2 connection establishment must complete successfully before the crafted request can reach this logic.
Impact
An attacker can cause a complete outage of the gRPC server by sending a request missing both
:authorityandHostheaders, provided they can successfully establish a transport connection.Patches
The issue has been addressed in
master(and backported to1.84.0,1.83.2and1.82.2). The fix updates the HTTP/2 transport layer to reject requests missing both:authorityandHostheaders early, maintaining consistency with and other gRPC language implementations.Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:XReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
gRPC-Go xDS servers: Denial of Service (DoS) via crash due to missing
:authorityandHostheadersCVE-2026-84445 / GHSA-2v4p-qf9q-27wj / GO-2026-6443
More information
Details
A vulnerability exists in gRPC-Go servers configured with
xds.NewGRPCServer()where a crafted request missing both:authorityandHostheaders can cause a server panic, resulting in a Denial of Service (DoS).Servers built with
xds.NewGRPCServerinstall an xDS routing interceptor on every RPC. This interceptor looks up the request’s:authorityheader to pick a virtual host. The HTTP/2 server transport previously accepted requests that had neither:authoritynorHost. When this happened, the xDS routing interceptor attempted to access the first element of an empty slice of authorities, leading to an index out of bounds panic. Since the per-RPC goroutine does not recover from panics, the entire server process would terminate.This panic occurs in the interceptor pipeline, meaning the transport credentials handshake (TLS, mTLS, or ALTS) and HTTP/2 connection establishment must complete successfully before the crafted request can reach this logic.
Impact
An attacker can cause a complete outage of the gRPC server by sending a request missing both
:authorityandHostheaders, provided they can successfully establish a transport connection.Patches
The issue has been addressed in
master(and backported to1.84.0,1.83.2and1.82.2). The fix updates the HTTP/2 transport layer to reject requests missing both:authorityandHostheaders early, maintaining consistency with and other gRPC language implementations.Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:XReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Server panic via missing authority or Host headers in google.golang.org/grpc
CVE-2026-84445 / GHSA-2v4p-qf9q-27wj / GO-2026-6443
More information
Details
In google.golang.org/grpc, servers configured with xDS routing can panic when processing requests that lack both :authority and Host headers. The HTTP/2 transport layer accepted requests missing these headers, and the xDS server routing interceptor attempted to index the empty authority slice, causing an unhandled panic and terminating the server.
Severity
Unknown
References
This data is provided by OSV and the Go Vulnerability Database (CC-BY 4.0).
Release Notes
cert-manager/cert-manager (github.com/cert-manager/cert-manager)
v1.19.6Compare Source
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
This patch release fixes a security issue (
GHSA-8rvj-mm4h-c258, HIGH) where the defaultcert-manager-editaggregate ClusterRole granted namespace users permission to create ACMEChallengeandOrderresources directly. A user who could create aChallengereferencing aClusterIssuercould supply attacker-controlled solver configuration while cert-manager loaded credentials from theClusterIssuer's namespace, bypassing Issuer solver selectors (dnsZones,dnsNames,matchLabels). With the acme-dns provider specifically, this could disclose DNS credentials to an attacker-controlled endpoint.This release also includes Go version bumps to address reported CVEs. All users should upgrade.
Changes by Kind
Bug or Regression
createand Ordercreate,patch,updateverbs from thecert-manager-editaggregate ClusterRole (GHSA-8rvj-mm4h-c258). (#8941, @wallrj-cyberark)Other (Cleanup or Flake)
v1.25.11to fix CVE-2026-27145, CVE-2026-42504, and CVE-2026-42507 (#8925, @wallrj-cyberark)v1.19.5Compare Source
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
This is a simple patch release to fix some reported vulnerabilities. All users are recommended to upgrade.
Changes by Kind
Other (Cleanup or Flake)
v1.19.4Compare Source
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
v1.19.4 is a simple patch release to fix some reported vulnerabilities - notably CVE-2026-24051 and CVE-2025-68121. All users should upgrade.
Changes by Kind
Bug or Regression
v1.19.3Compare Source
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
This release contains three bug fixes, including a fix for the MODERATE severity DoS issue in GHSA-gx3x-vq4p-mhhv. All users should upgrade to the latest release.
Changes by Kind
Bug or Regression
Other (Cleanup or Flake)
v1.19.2Compare Source
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
We updated Go to fix some vulnerabilities in the standard library.
Changes since
v1.19.1Bug or Regression
CVE-2025-47914andCVE-2025-58181which were reported by Trivy. (#8283, @SgtCoDFish)v1.25.5to fixCVE-2025-61727andCVE-2025-61729(#8294, @wallrj-cyberark)global.nodeSelectorto helm chart to perform amergeand allow for a singlenodeSelectorto be set across all services. (#8233, @cert-manager-bot)Other (Cleanup or Flake)
golang/x/crypto(#8270, @SgtCoDFish)v1.19.1Compare Source
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
We reverted the CRD-based API defaults for
Certificate.Spec.IssuerRefandCertificateRequest.Spec.IssuerRefafter they were found to cause unexpected certificate renewals after upgrading to 1.19.0. We will try re-introducing these API defaults in cert-manager1.20.We fixed a bug that caused certificates to be re-issued unexpectedly if the
issuerRefkind or group was changed to one of the "runtime" default values.We upgraded Go to
1.25.3to address the following security vulnerabilities:CVE-2025-61724,CVE-2025-58187,CVE-2025-47912,CVE-2025-58183,CVE-2025-61723,CVE-2025-58186,CVE-2025-58185,CVE-2025-58188, andCVE-2025-61725.Changes since
v1.19.0:Bug or Regression
issuerRefof a Certificate was omitted, upgrading to1.19.xincorrectly caused the certificate to be renewed (#8175, @cert-manager-bot)v1.19.0Compare Source
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
This release focuses on expanding platform compatibility, improving deployment flexibility, enhancing observability, and addressing key reliability issues.
Changes since
v1.18.0:Feature
global.nodeSelectorto helm chart to allow for a singlenodeSelectorto be set across all services. (#7818, @StingRayZA)pathTypeExactin ACME HTTP01 Ingress challenge solvers. (#7795, @sspreitzer)applyconfigurationsallowing clients to make type-safe server-side apply requests for cert-manager resources. (#7866, @erikgb)certmanager_certificate_challenge_statusPrometheus metric. (#7736, @hjoshi123)protocolfield forrfc2136DNS01 provider (#7881, @hjoshi123)hostUsersflag to all pods. Not set by default. (#7973, @hjoshi123)--acme-http01-solver-resource-*settings. (#7972, @lunarwhite)CAInjectorMergingfeature has been promoted to BETA and is now enabled by default (#8017, @ThatsMrTalbot)certificatemetrics to the collector approach. (#7856, @hjoshi123)Bug or Regression
error waiting for authorization(#7796, @hjoshi123)class,ingressClassName,name) are specified simultaneously (#8021, @lunarwhite)global.rbac.disableHTTPChallengesRoleHelm option. (#7836, @inteon)pathlabel of core ACME client metrics and will require users to update their monitoring dashboards and alerting rules if using those metrics. (#8109, @mladen-rusev-cyberark)ingress-nginxin E2E tests to ensure compatibility (#7792, @wallrj)Other (Cleanup or Flake)
tokenrequestRoleBinding resource to improve consistency (#7761, @lunarwhite)maps.Copyfor cleaner map handling (#8092, @quantpoet)vault-client-goto the newvault/apiclient. (#8059, @armagankaratosun)grpc/grpc-go (google.golang.org/grpc)
v1.83.2: Release 1.83.2Compare Source
Security
:authorityandHostheaders with HTTP 400 and statusInternal. (#9365)Configuration
📅 Schedule: (in timezone America/New_York)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR has been generated by Mend Renovate CLI.