Rancher gerenciador de containers divulga vulnerabilidade grave de pontuação CVSS de 9,9

Rancher gerenciador de containers divulga vulnerabilidade grave

Rancher gerenciador de containers divulga vulnerabilidade grave

Rancher divulga vulnerabilidade grave de pontuação CVSS de 9,9 que permite elevação de privilégios e corrupção de dados.
Compartilhe

Rancher gerenciador de containers divulga vulnerabilidade grave de pontuação CVSS de 9,9

Com a crescente evolução da conteinerização, o Rancher tem se destacado como uma plataforma popular de gerenciamento de contêineres de código aberto, simplificando a implantação do Kubernetes e capacitando as equipes de DevOps a atender aos requisitos de TI. No entanto, recentemente uma vulnerabilidade de segurança foi descoberta na lógica de atualização do Webhook de admissão do Rancher, levantando ameaças.

A vulnerabilidade CVE-2023-22651 (com pontuação CVSS de 9,9) tem origem no Webhook de admissão do Rancher, que é responsável por impor regras de validação e verificações de segurança antes que os recursos sejam admitidos no cluster Kubernetes. Uma falha na lógica de atualização pode levar à configuração incorreta desse Webhook crucial, o que prejudica seus recursos de validação.

Com o Webhook operando em um estado degradado, os recursos não são mais validados, abrindo a porta para graves escalonamentos de privilégios e corrupção de dados, comprometendo a segurança e a integridade do cluster Kubernetes.

Usuários que atualizaram das versões 2.6.x ou 2.7.x do Rancher para 2.7.2 são afetados pela vulnerabilidade CVE-2023-22651, sendo importante ressaltar que usuários que realizaram uma nova instalação da versão 2.7.2 (sem atualização) não são afetados.

Para determinar se sua instância do Rancher foi afetada, execute um comando no cluster local e confira se a saída exibir uma quantidade de webhook igual a 0.

A equipe do Rancher lançou patches para corrigir a vulnerabilidade, com a versão 2.7.3 e posteriores incorporando as correções necessárias. Para aqueles que não conseguem atualizar para uma versão corrigida, uma solução alternativa recomendada é reconfigurar manualmente o Webhook usando o script fornecido. É importante observar que o script deve ser executado de dentro do cluster local ou com um kubeconfig apontando para o cluster local com permissões de administrador.

#!/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