Skip to content

GHSA-6m9f-pj6w-w87g CVE-2023-22651

Rancher Webhook is misconfigured during upgrade process

Critical Go
Severity
9.9 / 10
Critical · CVSS 3.1
Exploit chance (EPSS)
0.78%
Chance of exploitation in the next 30 days. Higher than 55.91% of scored vulnerabilities.
Known exploited
No
Not in CISA's catalog
Weakness
CWE-269 Improper Privilege Management
CWE-276 Incorrect Default Permissions
Fix
2.7.3
Upgrade github.com/rancher/rancher to this version or later

Description

Impact

A failure in the update logic of Rancher's admission Webhook may lead to the misconfiguration of the Webhook. This component enforces validation rules and security checks before resources are admitted into the Kubernetes cluster.

When the Webhook is operating in a degraded state, it no longer validates any resources, which may result in severe privilege escalations and data corruption.

The issue only affects users that upgrade from 2.6.x or 2.7.x to 2.7.2. Users that did a fresh install of 2.7.2 (and did not follow an upgrade path) are not affected.

The command below can be executed on the local cluster to determine whether the cluster is affected by this issue:

$ kubectl get validatingwebhookconfigurations.admissionregistration.k8s.io rancher.cattle.io

NAME                WEBHOOKS   AGE
rancher.cattle.io   0         19h

If the resulting webhook quantity is 0, the Rancher instance is affected.

Patches

Patched versions include release 2.7.3 and later versions.

Workarounds

If you are affected and cannot update to a patched Rancher version, the recommended workaround is to manually reconfigure the Webhook with the script below. Please note that the script must be run from inside the local cluster or with a kubeconfig pointing to the local cluster which has admin permissions.

#!/bin/bash

set -euo pipefail

function prereqs() {
    if ! [ -x "$(command -v kubectl)" ]; then
      echo "error: kubectl is not installed." >&2
      exit 1
    fi

    if [[ -z "$(kubectl config view -o jsonpath='{.clusters[].cluster.server}')" ]]; then
        echo "error: No kubernetes cluster found on kubeconfig." >&2
        exit 1
    fi
}

function restart_deployment(){
    kubectl rollout restart deployment rancher-webhook -n cattle-system
    kubectl rollout status deployment rancher-webhook -n cattle-system --timeout=30s
}

function workaround() {
    echo "Cluster: $(kubectl config view -o jsonpath='{.clusters[].cluster.server}')"

    if ! kubectl get validatingwebhookconfigurations.admissionregistration.k8s.io rancher.cattle.io > /dev/null 2>&1; then
        echo "webhook rancher.cattle.io not found, restarting deployment:"
        restart_deployment

        echo "waiting for webhook configuration"
        sleep 15s
    fi

    local -i webhooks
    webhooks="$(kubectl get validatingwebhookconfigurations.admissionregistration.k8s.io rancher.cattle.io --no-headers | awk '{ print $2 }')"

    if [ "${webhooks}" == "0" ]; then
        echo "Webhook misconfiguration status: Cluster is affected by CVE-2023-22651"
        
        echo "Running workaround:"
        kubectl delete validatingwebhookconfiguration rancher.cattle.io
        restart_deployment

        ret=$?
        if [ $ret -eq 0 ]; then
            echo "Webhook restored, CVE-2023-22651 is fixed"
        else
            echo "error trying to restart deployment. try again in a few seconds."
        fi
    else
        echo "Webhook misconfiguration status: not present (skipping)"
    fi

    echo "Done"
}

function main() {
    prereqs
    workaround
}

main

References

For more information

If you have any questions or comments about this advisory:

Affected versions

Go

PackageVulnerableFixed in
github.com/rancher/rancher
>= 2.7.2, < 2.7.3
2.7.3
github.com/rancher/rancher
>= 0.0.0-20220922131902-ec6d6d3a7616, < 0.0.0-20230424183121-6d9a175954c6
0.0.0-20230424183121-6d9a175954c6

How to fix

Move to the fixed version or later with your package manager, update the lockfile, and run your tests. If the package only arrives through another dependency, upgrade that dependency first. If none of its releases pulls a fixed version yet, force the version with your package manager's override.

github.com/rancher/rancher Go → 2.7.3

go
go get github.com/rancher/rancher@v2.7.3 && go mod tidy

Severity breakdown

CVSS 3.1 9.9

CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H

Attack vector
Network
Attack complexity
Low
Privileges required
Low
User interaction
None
Scope
Changed
Confidentiality
High
Integrity
High
Availability
High

Weakness

CWE-269: Improper Privilege Management

The product does not properly assign, modify, track, or check privileges for an actor, creating an unintended sphere of control for that actor.

How to prevent it
  • Architecture and Design, Operation: Very carefully manage the setting, management, and handling of privileges. Explicitly manage trust zones in the software.
  • Architecture and Design: Follow the principle of least privilege when assigning access rights to entities in a software system.
  • Architecture and Design: Consider following the principle of separation of privilege. Require multiple conditions to be met before permitting access to a system resource.

CWE-276: Incorrect Default Permissions

During installation, installed file permissions are set to allow anyone to modify those files.

How to prevent it
  • Architecture and Design, Operation: The architecture needs to access and modification attributes for files to only those users who actually require those actions.
  • Architecture and Design: Compartmentalize the system to have "safe" areas where trust boundaries can be unambiguously drawn. Do not allow sensitive data to go outside of the trust boundary and always be careful when interfacing with a compartment outside of the safe area. Ensure that appropriate compartmentalization is built into the system design, and the compartmentalization allows for and reinforces privilege separation functionality. Architects and designers should rely on the principle of least privilege to decide the appropriate time to use privileges and the time to drop privileges.

References

Timeline

  1. Published
  2. Last updated by the source
  3. Latest EPSS score
AdvisorySeverityWhy it's related
GHSA-4j6x-2764-m8gh
Rancher has over-inclusive team membership expansion in GitHub App authentication provider
High Also affects github.com/rancher/rancher
GHSA-vx8h-4prv-g744
Rancher has Privilege Escalation from Project Owner to Host
High Also affects github.com/rancher/rancher
GHSA-mhc6-2gfq-xx62
Rancher vulnerable to command injection through unsanitized YAML parameter
Critical Also affects github.com/rancher/rancher
GHSA-5v3h-x4wf-5c35
Rancher Extensions have arbitrary file access via path traversal
High Also affects github.com/rancher/rancher
GHSA-gqf8-rvrh-g7w6
Rancher cloud credentials can be used through proxy API by users without access
Critical Also affects github.com/rancher/rancher
GHSA-hwm2-4ph6-w6m5
Rancher's restricted PodSecurityPolicy does not prevent containers from running as a privileged user
High Also affects github.com/rancher/rancher
GHSA-mc24-7m59-4q5p
Rancher CLI skips TLS verification on Rancher CLI login command
Medium Also affects github.com/rancher/rancher
GHSA-mw39-9qc2-f7mg
Rancher exposes sensitive information through audit logs
Medium Also affects github.com/rancher/rancher
Is this in your code?

MergeHarbor checks every repository's dependencies against this database, ranks what matters by exploitability and reachability, routes it to the owning team and opens the fix pull request.

Check your repos with MergeHarbor