Uma vulnerabilidade de execução remota de código no agente ssh encaminhado do OpenSSH
Em 19 de julho de 2023, o OpenSSH lançou as notas de lançamento do OpenSSH 9.3p2, que abordaram uma vulnerabilidade de execução remota de código no agente ssh encaminhado do OpenSSH. A falha é rastreada como CVE-2023-38408 permite que um invasor remoto potencialmente execute comandos arbitrários no agente ssh encaminhado do OpenSSH vulnerável. Como a falha permite que os invasores executem a Execução Remota de Código na máquina vítima e seu uso generalizado do agente ssh encaminhado do OpenSSH, é altamente recomendável aprender a corrigir CVE-2023-38408- uma vulnerabilidade de execução remota de código no agente ssh encaminhado do OpenSSH. A Qualys Threat Research Unit (TRU) foi creditada com a descoberta desta vulnerabilidade quando eles relataram a falha em 7 de julho de 2023.
Antes de entrarmos para aprender como corrigir CVE-2023-38408- uma vulnerabilidade de execução remota de código no agente ssh encaminhado do OpenSSH, vamos ver uma breve introdução sobre o agente ssh e seu recurso de encaminhamento de agente, por que ele é necessário e quais são os benefícios do recurso de encaminhamento do agente.
Uma breve introdução ao ssh-agent
O ssh-agent é um componente-chave do conjunto de protocolos SSH (Secure Shell) e serve como um agente de autenticação. Ele opera como um processo em segundo plano, destinado a ajudar no gerenciamento de chaves privadas associadas à autenticação de chave pública.
A principal função do ssh-agent é armazenar chaves privadas, eliminando a necessidade de os usuários inserirem repetidamente sua senha ao usar o SSH para se conectar a servidores diferentes. Quando uma sessão é iniciada, o usuário adiciona sua(s) chave(s) privada(s) ao ssh-agent. Depois que a chave é adicionada, o ssh-agent gerencia a chave, fornecendo-a sempre que necessário, sem exigir que o usuário insira manualmente sua senha a cada vez.
Ao interagir com um agente ssh, os usuários iniciam um programa cliente SSH que se comunica com o agente e solicita operações como autenticação de usuário. A comunicação entre o cliente SSH e o agente é facilitada por um soquete de domínio Unix, protegido pelo sistema operacional.
Uma característica notável do ssh-agent é o “encaminhamento de agentes”. Isso permite que os serviços de um agente ssh sejam encaminhados para um sistema remoto, por meio de uma conexão de protocolo SSH. Isso significa essencialmente que, quando você está conectado a um servidor remoto, pode usar seu agente ssh local para executar tarefas de autenticação, sem armazenar chaves privadas no sistema remoto. É um recurso conveniente, mas requer uso cuidadoso devido às suas potenciais implicações de segurança.
Alguns pontos-chave sobre o ssh-agent:
- Ele armazena as chaves privadas descriptografadas na memória em vez de no disco, evitando a necessidade de inserir frases secretas repetidamente.
- As chaves são adicionadas ao agente usando o comando ssh-add.
- O agente gera um soquete UNIX que os programas podem usar para se comunicar com ele.
- A variável de ambiente SSH_AUTH_SOCK aponta para esse soquete.
- O encaminhamento do agente (opção -A) permite conectar-se remotamente a servidores usando as chaves armazenadas no ssh-agent local, em vez de deixar chaves em hosts remotos.
- Quando o encaminhamento do agente é usado, o soquete do agente ssh local é exposto no servidor remoto.
Então, em resumo, o ssh-agent é um gerenciador de chaves para autenticação SSH que permite o encaminhamento do agente para evitar o armazenamento de chaves em hosts remotos. Mas é preciso ter cuidado na forma como ele lida com as solicitações para evitar problemas de segurança.
O que é a necessidade de encaminhamento de agentes?
O encaminhamento de agentes é um recurso proeminente do protocolo SSH (Secure Shell) que aumenta a conveniência e a eficiência do gerenciamento de conexões seguras entre diferentes sistemas. É parte integrante do utilitário ssh-agent.
Em uma conexão SSH típica, um usuário se conecta de um sistema local a um sistema remoto inserindo sua senha para desbloquear sua chave privada, que é então usada para autenticação. No entanto, se o usuário precisar estabelecer uma conexão SSH do sistema remoto para outro sistema, ele terá que fornecer sua senha novamente para desbloquear sua chave privada, o que pode ser complicado e representar riscos de segurança, especialmente se o sistema remoto não for totalmente confiável.
É aqui que o encaminhamento de agentes entra em jogo. O encaminhamento de agente permite que os usuários aproveitem seu agente ssh local em um sistema remoto. Isso significa que a chave privada usada para autenticação permanece na máquina local e não precisa ser armazenada em nenhum sistema remoto.
Quando um usuário estabelece uma conexão SSH com o encaminhamento de agente habilitado, o agente ssh local cria um soquete no sistema remoto. Esse soquete serve como um canal de encaminhamento, permitindo que o sistema remoto se comunique com o agente ssh local para operações que exigem a chave privada do usuário.
Como resultado, quando um usuário inicia uma conexão SSH subsequente do sistema remoto para outro sistema, a solicitação de autenticação é encaminhada de volta para o agente ssh local. O ssh-agent local manipula a autenticação usando a chave privada armazenada e o usuário não precisa inserir sua senha novamente.
Embora o encaminhamento de agente simplifique significativamente o processamento de conexões SSH e chaves privadas, ele deve ser usado com cautela devido a possíveis riscos de segurança. Se um ator mal-intencionado obtiver controle sobre um sistema remoto onde o encaminhamento de agente é usado, ele poderá usar o canal de encaminhamento para executar operações com a chave privada do usuário. Portanto, o encaminhamento de agentes é recomendado apenas para sistemas confiáveis e redes seguras.
Os motivos para ter o Encaminhamento de Agente são:
- As chaves não são expostas em hosts remotos, onde podem ser comprometidas se o servidor for violado. As chaves privadas permanecem apenas na sua máquina local.
- Você não precisa gerenciar a cópia de chaves para vários hosts ou acompanhar frases secretas em vários lugares. As chaves no ssh-agent local estão disponíveis para todas as conexões remotas.
- A alteração de uma senha ou chave só precisa ser feita em um lugar – seu agente ssh local. Sem o encaminhamento, qualquer alteração precisaria ser refletida em todos os servidores remotos com uma cópia da chave.
- Revogar uma chave comprometida é mais fácil apenas removê-la do seu agente ssh local em vez de ter que encontrar e remover cópias em todos os hosts acessíveis.
- O encaminhamento de agente permite que as conexões SSH “saltem” através de servidores intermediários para chegar ao destino. Assim, você não precisa de acesso ssh direto ou distribuição de chaves para todos os servidores.
Benefícios do uso do encaminhamento de agente
Este utilitário torna-se indispensável em ambientes onde os usuários precisam interagir com vários sistemas usando autenticação de chave pública SSH.
Vamos explorar alguns dos principais motivos que exigem o uso do encaminhamento de agentes:
- Facilidade de lidar com várias conexões: Se um usuário precisar pular de um sistema para outro via SSH (um processo conhecido como encadeamento SSH), o encaminhamento do agente salvará o usuário do incômodo de inserir repetidamente sua senha. Isso é particularmente útil em ambientes em rede onde os administradores de sistema frequentemente precisam acessar vários servidores.
- Segurança melhorada: Com o encaminhamento do agente, as chaves privadas permanecem no sistema local e nunca são transferidas ou armazenadas em máquinas remotas. Isso reduz o risco associado à exposição de chaves privadas em sistemas potencialmente menos seguros.
- Automação e Scripting: O encaminhamento de agente pode ser fundamental em tarefas de automação ou scripts que exigem conexões frequentes com o servidor. Como elimina a necessidade de entrada manual de senha ou armazenamento inseguro de senhas, os scripts podem ser executados de forma mais suave e segura.
- Conveniência: O encaminhamento de agentes oferece um nível adicional de conveniência para os usuários, pois eles não precisam se preocupar em gerenciar e proteger chaves privadas em vários sistemas. Eles podem se autenticar perfeitamente em vários sistemas usando um único agente ssh local.
Resumo da vulnerabilidade CVE-2023-38408
A vulnerabilidade CVE-2023-38408 é uma vulnerabilidade de execução remota de código no agente ssh encaminhado do OpenSSH. Essa vulnerabilidade foi descoberta pela Qualys Threat Research Unit (TRU), especializada em identificar e analisar várias vulnerabilidades de segurança.
O principal problema dessa vulnerabilidade é que ela permite que um invasor remoto execute comandos arbitrários em sistemas que executam a versão vulnerável do agente ssh encaminhado do OpenSSH. Isso significa que um hacker pode potencialmente assumir o controle de um sistema e executar ações não autorizadas.
Esta vulnerabilidade representa um risco significativo devido ao uso generalizado do agente ssh encaminhado do OpenSSH em muitos sistemas em rede, particularmente em ambientes baseados em Unix como o Linux. O OpenSSH é uma ferramenta crítica usada para acessar máquinas remotas com segurança, e o recurso de encaminhamento do agente ssh é frequentemente utilizado para lidar com detalhes de autenticação ao fazer várias conexões SSH.
A equipe da Qualys disse que foi capaz de verificar de forma independente essa vulnerabilidade e até desenvolveu um exploit de Prova de Conceito (PoC) em certas instalações do Ubuntu Desktop (versões 22.04 e 21.10). Eles suspeitam que essa vulnerabilidade estaria existindo em outras distribuições Linux.
Recomendamos ver os detalhes técnicos completos da vulnerabilidade CVE-2023-38408 aqui. Bem, o vetor de ataque e as pontuações CVSS ainda precisam ser analisadas.
Versões do OpenSSH vulneráveis ao CVE-2023-38408
A falha afeta todas as versões, que são iguais e inferiores a v9.3p2.. Verifique a versão do OpenSSH que sua máquina está executando. Execute este comando para verificar a versão do OpenSSH.
$ ssh -V

Neste caso, temos o OpenSSH v9.2p1 em nosso servidor, que é vulnerável.
Como corrigir CVE-2023-38408- Uma vulnerabilidade de execução remota de código no agente ssh encaminhado do OpenSSH?
O OpenSSH respondeu a esta vulnerabilidade lançando uma versão corrigida do OpenSSH. Esta vulnerabilidade de execução remota de código no agente ssh encaminhado do OpenSSH foi corrigida no OpenSSH v 9.3p2. Sugerimos descobrir a versão atual do OpenSSH em suas máquinas e atualizar para v9.3p2.
Tempo necessário: 10 minutos
Como corrigir CVE-2023-25136?
O processo de instalação é bastante simples se sua distribuição tiver uma versão obrigatória do servidor OpenSSH. Caso contrário, talvez seja necessário baixar o pacote e obrigá-lo a usar make e instalá-lo usando os comandos make install.
- Verifique a versão do OpenSSH
Execute este comando para verificar a versão do OpenSSH:$ ssh -V
- Baixe as bibliotecas necessárias
$ apt update -y && apt install build-essential zlib1g-dev libssl-dev libpam0g-dev wget libpam0g-dev libselinux1-dev libkrb5-dev -y
- Baixe o pacote OpenSSH mais recente
Neste caso, uma vez que temos OpenSSH v9.2p1 que é vulnerável a esta falha, precisamos baixar v9.3p2.$ wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.3p2.tar.gz
$ chmod +x openssh-9.3p2.tar.gz - Extraia o pacote OpenSSH
$ tar -xf openssh-9.3p2.tar.gz
$ cd openssh-9.3p2/ - Compilar manualmente o OpenSSH
Execute para definir as configurações de compilação para a arquitetura do sistema. Se você quiser habilitar o suporte a PAM e SELinux, adicione os sinalizadores –with-pam e –with-selinux, respectivamente. Apenas certifique-se de ter todos os arquivos de cabeçalho necessários para que eles funcionem.$ ./configure --with-kerberos5 --with-md5-passwords --with-pam --with-selinux --with-privsep-path=/var/lib/sshd/ --sysconfdir=/etc/ssh
- Instalar/atualizar o OpenSSH
Instalar ou atualizar a compilação do OpenSSH usando os comandos
make e make install Nota: Talvez seja necessário instalar os utilitários make e gcc antes de instalar ou atualizar o OpenSSH.
Execute este comando para instalar os pacotes necessários, se não estiverem pré-instalados.$
make$
sudo make install - Verifique a versão do OpenSSH após a conclusão do processo de instalação
Execute este comando para verificar a versão do OpenSSH:$ ssh -V
Referencias:
New OpenSSH Vulnerability Exposes Linux Systems to Remote Command Injection (thehackernews.com)
How to compile and install OpenSSH binary on Linux (hashnode.dev)
Comments are closed