Skip to content

DVO-411: Upgrade to Go 1.25#653

Open
ncaak wants to merge 6 commits intoapp-sre:masterfrom
ncaak:upgrade/DVO-411/update-golang-1.25
Open

DVO-411: Upgrade to Go 1.25#653
ncaak wants to merge 6 commits intoapp-sre:masterfrom
ncaak:upgrade/DVO-411/update-golang-1.25

Conversation

@ncaak
Copy link
Copy Markdown
Contributor

@ncaak ncaak commented Mar 25, 2026

summary

Upgrade to Go 1.25, the most recent supported version on the go-toolset image.

Current linting tool is not compatible with 1.25 so it was needed to upgrade.

misc

  • Upgraded libraries
  • Upgraded linting tool to 2.10
  • Migrated the previous linting configuration to the new format (required)
  • Minor linting fix

Summary by CodeRabbit

Release Notes

  • Chores
    • Upgraded Go toolchain from 1.24.0 to 1.25.0 with updated platform requirements
    • Updated dependencies to latest stable versions, including Kubernetes, Prometheus, OpenTelemetry, Docker/containerd, and supporting libraries
    • Enhanced code quality and linting configuration

@openshift-ci-robot
Copy link
Copy Markdown
Collaborator

openshift-ci-robot commented Mar 25, 2026

@ncaak: This pull request references DVO-411 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the task to target either version "4.22." or "openshift-4.22.", but it targets "0.7.15" instead.

Details

In response to this:

summary

Upgrade to Go 1.25, the most recent supported version on the go-toolset image.

Current linting tool is not compatible with 1.25 so it was needed to upgrade.

misc

  • Upgraded libraries
  • Upgraded linting tool to 2.10
  • Migrated the previous linting configuration to the new format (required)
  • Minor linting fix

Instructions 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 openshift-eng/jira-lifecycle-plugin repository.

@openshift-ci
Copy link
Copy Markdown

openshift-ci bot commented Mar 25, 2026

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: ncaak

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 25, 2026

📝 Walkthrough

Walkthrough

Updated Go toolchain from 1.24.0 to 1.25.0, upgraded golangci-lint from v1 to v2, reorganized linting configuration to match the new version, updated numerous direct and indirect dependencies, and refactored a switch statement for improved code clarity.

Changes

Cohort / File(s) Summary
Linting Configuration
.golangci.yml, ci/golangci-lint.sh
Updated golangci-lint from v1.64.7 to v2.10.1, converted .golangci.yml to version 2 format, reorganized linter configuration with revive rules and formatters, added global exclusion patterns for generated code.
Go Toolchain & Dependencies
go.mod
Bumped Go version from 1.24.0 to 1.25.0, upgraded direct dependencies (openshift/api, prometheus/client_golang, spf13/pflag, stretchr/testify, uber/zap, k8s.io stack), updated numerous indirect dependencies, added OpenTelemetry packages and JSON-schema modules.
Code Refactoring
pkg/utils/selector.go
Refactored switch statement from boolean case conditions to direct key-value switch, maintaining identical parsing behavior for label selector requirements.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested labels

approved, lgtm

Suggested reviewers

  • BaiyangZhou
  • opokornyy

Poem

🐰 Hops of glee, from Go one-twenty-four,
To one-twenty-five, we leap once more!
Linters upgraded, deps refined with care,
Switch statements cleaned—code debonair!

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately reflects the primary objective of the pull request—upgrading the project to Go 1.25—which is clearly the main change across the configuration files and dependencies.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@openshift-ci-robot
Copy link
Copy Markdown
Collaborator

openshift-ci-robot commented Mar 25, 2026

@ncaak: This pull request references DVO-411 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the task to target either version "4.22." or "openshift-4.22.", but it targets "0.7.15" instead.

Details

In response to this:

summary

Upgrade to Go 1.25, the most recent supported version on the go-toolset image.

Current linting tool is not compatible with 1.25 so it was needed to upgrade.

misc

  • Upgraded libraries
  • Upgraded linting tool to 2.10
  • Migrated the previous linting configuration to the new format (required)
  • Minor linting fix

Summary by CodeRabbit

Release Notes

  • Chores
  • Upgraded Go toolchain from 1.24.0 to 1.25.0 with updated platform requirements
  • Updated dependencies to latest stable versions, including Kubernetes, Prometheus, OpenTelemetry, Docker/containerd, and supporting libraries
  • Enhanced code quality and linting configuration

Instructions 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 openshift-eng/jira-lifecycle-plugin repository.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (1)
ci/golangci-lint.sh (1)

9-12: Verify the existence check path aligns with the intended behavior.

The script checks for bin/golangci-lint (local path) but installs to $(go env GOPATH)/bin. This means the binary will always be reinstalled unless a local ./bin/golangci-lint exists. If this is intentional (to allow local binary overrides), consider adding a clarifying comment. Otherwise, consider aligning the check with the actual install location.

The version bump to v2.10.1 correctly aligns with the v2 configuration format in .golangci.yml.

💡 Option A: Check GOPATH location instead
 export BINARY=bin/golangci-lint
-if [ ! -f "$BINARY" ]; then
+if ! command -v golangci-lint &> /dev/null; then
     curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/HEAD/install.sh | sh -s -- -b "$(go env GOPATH)/bin" v2.10.1
 fi
💡 Option B: Add clarifying comment for current behavior
+# Check for local binary override; if not present, install to GOPATH/bin
 export BINARY=bin/golangci-lint
 if [ ! -f "$BINARY" ]; then
     curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/HEAD/install.sh | sh -s -- -b "$(go env GOPATH)/bin" v2.10.1
 fi
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@ci/golangci-lint.sh` around lines 9 - 12, The existence check uses
BINARY=bin/golangci-lint but the installer places the binary into $(go env
GOPATH)/bin, so the script will reinstall unless a local ./bin/golangci-lint
exists; either change the check to test "$(go env GOPATH)/bin/golangci-lint" (so
it matches the actual install target) or keep the current local-path check and
add a clarifying comment above BINARY explaining that a local
./bin/golangci-lint is preferred and will override the GOPATH install; update
references to BINARY and the curl install command accordingly (look for BINARY,
"$BINARY", and the install target "$(go env GOPATH)/bin") so the behavior and
intent are consistent.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.golangci.yml:
- Around line 19-25: The revive linter config uses the deprecated
skip-package-name-checks option in the var-naming rule (see var-naming and
skip-package-name-checks), so remove the third nested argument that sets
skip-package-name-checks and instead add/configure the separate package-naming
rule (e.g., add a rule entry for package-naming and set disabled: true or
configure it as needed); update the revive.rules list to keep var-naming with
only its first two argument lists and add package-naming for package name
control.

In `@go.mod`:
- Around line 3-5: The toolchain version in go.mod currently uses "toolchain
go1.25.7"; update this to the latest patch "toolchain go1.25.8" so the project
builds with the March 5, 2026 security/stability fixes—edit the go.mod entry
that contains the toolchain declaration and replace go1.25.7 with go1.25.8
(leave the "go 1.25.0" directive unchanged unless you intend to bump the
language version as well).
- Line 36: The go.mod currently pulls vulnerable transitive modules (e.g.,
github.com/containerd/containerd v1.7.11) via golang.stackrox.io/kube-linter;
fix by upgrading the kube-linter dependency to a version that vendors patched
transitives and, if an immediate upgrade isn't available, add go.mod replace
directives for the critical transitive modules (at minimum replace
google.golang.org/grpc to a patched semver and likewise replace
github.com/containerd/containerd, github.com/docker/docker,
github.com/antonmedv/expr or expr-lang/expr, kedacore/keda/v2, and
helm.sh/helm/v3) to secure versions, then run go mod tidy && go mod vendor (or
re-run your build) to ensure the updated transitive graph is used and CI
verifies no vulnerable versions remain.

---

Nitpick comments:
In `@ci/golangci-lint.sh`:
- Around line 9-12: The existence check uses BINARY=bin/golangci-lint but the
installer places the binary into $(go env GOPATH)/bin, so the script will
reinstall unless a local ./bin/golangci-lint exists; either change the check to
test "$(go env GOPATH)/bin/golangci-lint" (so it matches the actual install
target) or keep the current local-path check and add a clarifying comment above
BINARY explaining that a local ./bin/golangci-lint is preferred and will
override the GOPATH install; update references to BINARY and the curl install
command accordingly (look for BINARY, "$BINARY", and the install target "$(go
env GOPATH)/bin") so the behavior and intent are consistent.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: d0b18424-f4a1-4319-b362-094f3c0506c7

📥 Commits

Reviewing files that changed from the base of the PR and between a527811 and 2057994.

⛔ Files ignored due to path filters (1)
  • go.sum is excluded by !**/*.sum
📒 Files selected for processing (4)
  • .golangci.yml
  • ci/golangci-lint.sh
  • go.mod
  • pkg/utils/selector.go

Comment on lines +19 to +25
revive:
rules:
- name: var-naming
arguments:
- []
- []
- - skip-package-name-checks: true
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🌐 Web query:

golangci-lint v2 revive var-naming rule configuration

💡 Result:

In golangci-lint v2, the revive linter's var-naming rule is configured in the .golangci.yml file under linters-settings.revive.rules. The var-naming rule takes two arguments: a list of allowed initialisms (lowercase accepted) and a list of blocked initialisms (uppercase required). Example configuration: linters: enable: - revive linters-settings: revive: rules: - name: var-naming arguments: [ ["id", "json"], ["ID", "JSON"] ] This allows "id" and "json" in lowercase but requires "ID" and "JSON" in uppercase where specified. By default, revive behaves like golint with common initialisms like ID, HTTP. Note: Not all revive TOML options (e.g. upperCaseConst) are directly supported via golangci-lint YAML; only the two initialism lists are exposed for var-naming. For full revive config, run revive standalone with revive.toml.

Citations:


🌐 Web query:

revive var-naming rule skip-package-name-checks option golangci-lint

💡 Result:

Yes, there is a skip-package-name-checks option for the var-naming rule in the revive linter, which is integrated with golangci-lint. This option was added via merged PR #941 in November 2023 to allow skipping package name checks while keeping variable naming checks enabled. In recent versions (post-2025 updates), the var-naming rule documentation notes that legacy package-related options like skip-package-name-checks are deprecated and treated as no-ops (ignored), with package naming checks moved to a separate package-naming rule. To configure in golangci-lint's .golangci.yml: linters-settings: revive: rules: - name: var-naming arguments: - true # or {skipPackageNameChecks: true} depending on config format; check exact syntax in revive docs For up-to-date usage as of 2026, disable package-naming rule instead: linters: enable: - revive linters-settings: revive: rules: - name: package-naming disabled: true

Citations:


🌐 Web query:

golangci-lint revive var-naming arguments three parameters options

💡 Result:

The revive var-naming rule in golangci-lint takes two main arguments: an allowlist of initialisms (slice of strings) and a blocklist of initialisms (another slice of strings). These are passed as an array containing two arrays in the .golangci.yml configuration. Example configuration: linters-settings: revive: rules: - name: var-naming arguments: - - ID - HTTP - - VM This allows acronyms like ID and HTTP to be treated specially (e.g., userId instead of userID), while blocking VM (e.g., requires customVM). The golangci-lint documentation notes only 2 arguments for var-naming. There is an open question about configuring a third parameter like upperCaseConst (to allow ALL_CAPS constants), but the standard configuration uses exactly two parameters: the allow and block lists. No confirmed support for three parameters was found in official docs or recent issues; attempts to add {upperCaseConst=true} as a third argument failed. For full details, see revive docs: var-naming accepts two slices of strings for allowlist/blocklist initialisms.

Citations:


🏁 Script executed:

# Let's also check if there's a golangci-lint reference configuration available
curl -s https://raw.githubusercontent.com/golangci/golangci-lint/master/.golangci.reference.yml | grep -A 20 "var-naming" | head -30

Repository: app-sre/deployment-validation-operator

Length of output: 768


The var-naming rule argument format is correct; however, the skip-package-name-checks option is deprecated.

The nested list structure arguments: [[], [], [- skip-package-name-checks: true]] is actually the documented format for var-naming's third parameter (options) in golangci-lint. However, according to current revive documentation (post-2025), the skip-package-name-checks option has been deprecated and is treated as a no-op. Use the separate package-naming rule instead to control package name checks:

revive:
  rules:
    - name: var-naming
      arguments:
        - []
        - []
    - name: package-naming
      disabled: true  # or configure as needed
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.golangci.yml around lines 19 - 25, The revive linter config uses the
deprecated skip-package-name-checks option in the var-naming rule (see
var-naming and skip-package-name-checks), so remove the third nested argument
that sets skip-package-name-checks and instead add/configure the separate
package-naming rule (e.g., add a rule entry for package-naming and set disabled:
true or configure it as needed); update the revive.rules list to keep var-naming
with only its first two argument lists and add package-naming for package name
control.

Comment on lines +3 to +5
go 1.25.0

toolchain go1.24.13
toolchain go1.25.7
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🌐 Web query:

Go 1.25 release date and latest patch version

💡 Result:

Go 1.25.0 was released on August 12, 2025. As of March 25, 2026, the latest patch version is Go 1.25.8, released on March 5, 2026.

Citations:


Update toolchain to the latest Go 1.25 patch version.

Go 1.25.0 is a valid release and toolchain go1.25.7 is stable. However, Go 1.25.8 was released on March 5, 2026, and should replace go1.25.7 to benefit from the latest security patches and stability improvements.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@go.mod` around lines 3 - 5, The toolchain version in go.mod currently uses
"toolchain go1.25.7"; update this to the latest patch "toolchain go1.25.8" so
the project builds with the March 5, 2026 security/stability fixes—edit the
go.mod entry that contains the toolchain declaration and replace go1.25.7 with
go1.25.8 (leave the "go 1.25.0" directive unchanged unless you intend to bump
the language version as well).

github.com/chai2010/gettext-go v1.0.2 // indirect
github.com/containerd/containerd v1.7.29 // indirect
github.com/containerd/errdefs v0.3.0 // indirect
github.com/containerd/containerd v1.7.11 // indirect
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check which direct dependency pulls in vulnerable transitive deps
echo "=== Checking dependency graph for vulnerable packages ==="

# Check what requires containerd
echo "--- containerd required by:"
go mod graph | grep containerd/containerd | head -10

# Check what requires docker
echo "--- docker required by:"
go mod graph | grep "docker/docker " | head -10

# Check what requires helm
echo "--- helm required by:"
go mod graph | grep "helm.sh/helm" | head -10

# Check what requires grpc
echo "--- grpc required by:"
go mod graph | grep "google.golang.org/grpc " | head -10

# Check latest kube-linter version
echo "--- Current kube-linter version:"
grep kube-linter go.mod

Repository: app-sre/deployment-validation-operator

Length of output: 1875


🏁 Script executed:

cat -n go.mod

Repository: app-sre/deployment-validation-operator

Length of output: 8836


🌐 Web query:

containerd v1.7.11 security vulnerability CVE integer overflow privilege escalation

💡 Result:

Yes, containerd v1.7.11 is affected by CVE-2024-40635, a security vulnerability involving an integer overflow in User ID handling that can lead to privilege escalation by allowing containers to run as root (UID 0). CVE-2024-40635 affects containerd versions prior to 1.6.38, from 1.7.0 (including) up to but excluding 1.7.27, and from 2.0.0 up to but excluding 2.0.4. Since v1.7.11 falls within the 1.7.0 to <1.7.27 range, it is vulnerable. The vulnerability occurs when containers are launched with a User set as a UID:GID larger than the maximum 32-bit signed integer (MaxInt32), causing an overflow that results in the container running as root. This can lead to unexpected behavior in environments requiring non-root users. CVSS v3.1 score: 7.8 (HIGH), with vector AV:L/AC:L/PR:H/UI:N/S:C/C:L/I:L/A:N. CWE-190 (Integer Overflow or Wraparound). Official containerd security advisory: GHSA-265r-hfxg-fhmg. Fixed in v1.7.27 (commit 05044ec). Workarounds: Use only trusted images and restrict permissions for importing images to trusted users. No evidence of a separate integer overflow privilege escalation vulnerability specific to v1.7.11 beyond CVE-2024-40635. Another recent containerd vuln, CVE-2024-25621 (directory permissions LPE), affects up to v1.7.28 and is fixed in v1.7.29, so v1.7.11 is also vulnerable to that, but it is not an integer overflow.

Citations:


🌐 Web query:

docker v24.0.7 CVE cache poisoning authorization bypass firewalld

💡 Result:

Docker v24.0.7 is vulnerable to CVE-2024-24557, a cache poisoning vulnerability in the classic builder (non-BuildKit) that allows attackers with Dockerfile knowledge to poison the cache by pulling specially crafted images, potentially altering build outcomes. Patched in v24.0.9. It is also vulnerable to CVE-2024-41110, an authorization plugin (AuthZ) bypass regression allowing specially crafted API requests (Content-Length: 0) to skip body inspection, enabling unauthorized actions if AuthZ plugins are used. Patched in later versions beyond v24.0.9. No vulnerability directly matches "cache poisoning authorization bypass firewalld" as a single CVE. However, recent firewalld-related issues include CVE-2025-54388 (published ~July 2025), where firewalld reload on Moby/Docker v28.2.0-28.3.2 fails to recreate iptables rules, exposing localhost-published container ports to remote hosts with bridge network routing (CVSS 5.1 Medium). Patched in v28.3.3. Docker v24.0.7 (older branch) predates this and uses different versioning, so unaffected by CVE-2025-54388. Docker v24.0.7 release notes mention no firewalld-specific security fixes; it focuses on bug fixes and component upgrades. Firewalld issues appear in much newer Moby releases (v28.x). No evidence of cache poisoning combined with auth bypass or firewalld in v24.0.7.

Citations:


🌐 Web query:

google.golang.org/grpc v1.65.0 CVE authorization bypass leading slash

💡 Result:

Yes, google.golang.org/grpc v1.65.0 is vulnerable to CVE-2026-33186, an authorization bypass vulnerability due to improper validation of the HTTP/2 :path pseudo-header lacking a leading slash (e.g., "Service/Method" instead of "/Service/Method"). The gRPC-Go server routes such malformed requests correctly but authorization interceptors like grpc/authz evaluate the raw non-canonical path, causing "deny" rules for canonical paths to fail to match. If a fallback "allow" rule exists, this bypasses authorization. This affects servers using path-based authorization with specific deny rules for canonical paths and a default allow. CVSS v3.1: 9.1 (Critical), AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N. Affected: All versions < v1.79.3. Patched in v1.79.3 (released March 17, 2026), which rejects non-canonical paths with codes.Unimplemented. v1.65.0 (released July 2024) predates the patch and is explicitly listed as affected in vulnerability databases. Workarounds: Add a unary interceptor to reject if info.FullMethod[0] != '/'; use proxies to enforce strict HTTP/2; harden policies to default-deny unknown paths.

Citations:


🌐 Web query:

helm v3.14.1 security vulnerability CVE panic OOM code injection

💡 Result:

Helm v3.14.1 has one directly associated security vulnerability: CVE-2024-26147, a moderate-severity issue (CVSS 7.5) causing application panic due to uninitialized variable when parsing malformed index.yaml or plugin.yaml files missing metadata. This affects Helm <=3.14.1 and is fixed in v3.14.2. It matches the "panic" keyword. No CVEs directly match "OOM" (out-of-memory) or "code injection" for v3.14.1. Related but distinct issues in later versions include: - OOM: CVE-2025-32386 (Helm <3.17.3), specially crafted chart archive causes memory exhaustion. - Code injection: CVE-2025-53547 (Helm <3.18.4), local code execution via symlinked Chart.lock from malicious Chart.yaml during dependency updates. "OOM" references in sources are operational issues (e.g., Flux CD helm-controller memory limits), not security CVEs. No single CVE combines all terms for v3.14.1. Upgrade beyond v3.14.1 to address the panic vulnerability and monitor Helm's GitHub security advisories for latest issues.

Citations:


🌐 Web query:

expr-lang/expr v1.15.8 CVE memory exhaustion DoS recursion

💡 Result:

There is no CVE specifically assigned to expr-lang/expr version 1.15.8 for a memory exhaustion DoS vulnerability involving recursion. Version 1.15.8, released January 2024, predates relevant security fixes. The closest vulnerability is CVE-2025-29786 (GHSA-93mq-9ffx-83m2), a memory exhaustion DoS in the parser from unbounded input strings causing excessive AST node creation and OOM crashes. Affected: <1.17.0. Patched in v1.17.0 (March 2025) via PR #762 adding compile-time node budget and memory limits. CVSS 7.5 High. Workaround: limit input string length. A separate recursion-related DoS is CVE-2025-68156 (GHSA-cfpf-hrx2-8rv6), unbounded recursion in builtins like flatten/min/max/mean/median on deep/cyclic data causing stack overflow. Affected: <1.17.7. Patched in v1.17.7 (December 2025) via PR #870 adding recursion depth limits. Both affect v1.15.8, but neither matches "recursion" in the parser context of the query. Upgrade to latest v1.17.8 (February 2026).

Citations:


🌐 Web query:

docker/cli v24.0.7 CVE Windows privilege escalation

💡 Result:

No, there is no known CVE for Docker CLI v24.0.7 that causes Windows privilege escalation. Docker CLI v24.0.7, released in October 2023, has no security vulnerabilities listed in official Docker release notes or security advisories. The only relevant privilege escalation vulnerability found is CVE-2025-15558 (disclosed March 2026), which affects Docker CLI versions through v29.1.5 on Windows due to an uncontrolled search path in CLI plugins (C:\ProgramData\Docker\cli-plugins). This allows low-privileged attackers to place malicious plugin binaries for execution by privileged users. v24.0.7 predates this issue and uses an earlier version of the cli-plugins/manager code not listed as affected in CVE details. Other CVEs mentioned (e.g., CVE-2024-24557, CVE-2023-44487) relate to Docker Engine/BuildKit or dependencies, not CLI privilege escalation on Windows.

Citations:


🌐 Web query:

kedacore keda v2.13.0 CVE HashiCorp Vault arbitrary file read

💡 Result:

Yes, KEDA v2.13.0 is vulnerable to CVE-2025-68476, an arbitrary file read vulnerability in the HashiCorp Vault TriggerAuthentication handler due to insufficient path validation when loading the service account token from spec.hashiCorpVault.credential.serviceAccount. CVE ID: CVE-2025-68476 (published Dec 22, 2025) Severity: High (CVSS 4.0: 8.2 AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N) Affected: KEDA Operator versions <=2.17.2 and <=2.18.2 (Metrics Server <2.9.0 also noted); v2.13.0 (released Jan 2024) falls in affected range. Patched: v2.17.3, v2.18.3, >=v2.19.0 Patch commit: kedacore/keda@15c5677 Exploitation requires permissions to create/modify TriggerAuthentication resources. Attacker can read any file from the KEDA pod's node filesystem (e.g., /etc/passwd, secrets) via path traversal, exfiltrated during Vault auth request. Check version: kubectl get deploy keda-operator -n keda -o jsonpath='{.spec.template.spec.containers[0].image}' Mitigation: Upgrade to patched version; restrict TriggerAuthentication RBAC; avoid Vault serviceAccount credential if possible. Official advisory: GHSA-c4p6-qg4m-9jmr NVD: https://nvd.nist.gov/vuln/detail/CVE-2025-68476

Citations:


High and critical security vulnerabilities in indirect dependencies require action.

The following indirect dependencies have confirmed security issues:

Dependency Version Severity CVE(s)
containerd/containerd 1.7.11 HIGH CVE-2024-40635 (integer overflow, privilege escalation)
docker/docker 24.0.7 HIGH CVE-2024-24557 (cache poisoning), CVE-2024-41110 (authz bypass)
expr-lang/expr 1.15.8 HIGH CVE-2025-29786 (memory exhaustion), CVE-2025-68156 (recursion DoS)
kedacore/keda/v2 2.13.0 HIGH CVE-2025-68476 (arbitrary file read via Vault)
google.golang.org/grpc 1.65.0 CRITICAL CVE-2026-33186 (authorization bypass via missing leading slash)
helm.sh/helm/v3 3.14.1 MODERATE CVE-2024-26147 (panic on malformed YAML)

These are transitive dependencies pulled in by golang.stackrox.io/kube-linter. Recommended actions:

  1. Upgrade kube-linter to a version using patched dependencies
  2. Add replace directives for critical vulnerabilities (especially gRPC) if direct kube-linter upgrades are insufficient
  3. Evaluate actual code paths to confirm whether all dependencies are in use
🧰 Tools
🪛 OSV Scanner (2.3.3)

[HIGH] 36-36: github.com/containerd/containerd 1.7.11: containerd has an integer overflow in User ID handling in github.com/containerd/containerd

(GO-2025-3528)


[HIGH] 36-36: github.com/containerd/containerd 1.7.11: containerd affected by a local privilege escalation via wide permissions on CRI directory in github.com/containerd/containerd

(GO-2025-4100)


[HIGH] 36-36: github.com/containerd/containerd 1.7.11: containerd CRI server: Host memory exhaustion through Attach goroutine leak in github.com/containerd/containerd

(GO-2025-4108)


[HIGH] 36-36: github.com/containerd/containerd 1.7.11: containerd has an integer overflow in User ID handling

(GHSA-265r-hfxg-fhmg)


[HIGH] 36-36: github.com/containerd/containerd 1.7.11: containerd CRI server: Host memory exhaustion through Attach goroutine leak

(GHSA-m6hq-p25p-ffr2)


[HIGH] 36-36: github.com/containerd/containerd 1.7.11: containerd affected by a local privilege escalation via wide permissions on CRI directory

(GHSA-pwhc-rpq9-4c8w)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@go.mod` at line 36, The go.mod currently pulls vulnerable transitive modules
(e.g., github.com/containerd/containerd v1.7.11) via
golang.stackrox.io/kube-linter; fix by upgrading the kube-linter dependency to a
version that vendors patched transitives and, if an immediate upgrade isn't
available, add go.mod replace directives for the critical transitive modules (at
minimum replace google.golang.org/grpc to a patched semver and likewise replace
github.com/containerd/containerd, github.com/docker/docker,
github.com/antonmedv/expr or expr-lang/expr, kedacore/keda/v2, and
helm.sh/helm/v3) to secure versions, then run go mod tidy && go mod vendor (or
re-run your build) to ensure the updated transitive graph is used and CI
verifies no vulnerable versions remain.

@BaiyangZhou
Copy link
Copy Markdown
Contributor

/retest

@ncaak
Copy link
Copy Markdown
Contributor Author

ncaak commented Apr 1, 2026

/test lint

@openshift-ci
Copy link
Copy Markdown

openshift-ci bot commented Apr 1, 2026

@ncaak: The following tests failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/test 2057994 link true /test test
ci/prow/coverage 2057994 link true /test coverage
ci/prow/lint 2057994 link true /test lint

Full PR test history. Your PR dashboard.

Details

Instructions 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. I understand the commands that are listed here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants