Na ferramenta wall, fornecida no pacote util-linux e destinada ao envio de mensagens para terminais, foi identificada uma vulnerabilidade (CVE-2024-28085), que permite um ataque a terminais de outros usuários por meio de manipulação de sequências de escape. O problema ocorre porque a ferramenta wall bloqueia o uso de sequências de escape na entrada, mas não executa essa operação para argumentos na linha de comando, permitindo que um atacante execute sequências de escape no terminal de outros usuários.
Por exemplo, ao executar 'wall $(printf "\033[33mHI")' é possível exibir a mensagem 'HI' em amarelo. Através de sequências de escape, que permitem mover o cursor, limpar e substituir o conteúdo na tela, é possível simular a exibição do aviso de inserção de senha do utilitário sudo no terminal de outro usuário. Se o usuário não perceber a armadilha e inserir sua senha, esta será exibida no histórico de entradas como um comando inexistente (de fato, o usuário terá inserido sua senha na linha de comando em vez de um comando). "\033[3A" // move o cursor para cima em 3 linhas "\033[K" // remove a saída anterior "[sudo] password for a_user:" // exibe um pedido falso de sudo "\033[?25l" // define a cor de fundo para ocultar a entrada "\033[38;2;48;10;36m"
Durante a exibição de um aviso de que o comando inserido não foi encontrado, muitos distribuições acionam o manipulador /usr/lib/command-not-found, que tenta determinar o pacote que contém o comando ausente e fornece uma dica sobre a possibilidade de sua instalação. O problema é que, ao acionar o manipulador command-not-found, o comando inexistente é passado para ele como um parâmetro da linha de comando, que é visível ao visualizar processos no sistema (por exemplo, ao tentar executar a ferramenta não instalada "xsnow", na lista de processos aparecerá " /usr/lib/command-not-found -- xsnow"). Consequentemente, o atacante pode monitorar os processos em execução (por exemplo, analisando a aparição de "/proc/pid/cmdline" para o número de PID previsto) e determinar a senha inserida pela vítima na linha de comando.
Para que o usuário insira a senha em resposta a um aviso falso do sudo, há um truque que consiste em rastrear na lista de processos o verdadeiro lançamento da utilidade sudo, aguardar sua conclusão e realizar o ataque através do "wall" logo em seguida. Por meio de manipulações com sequências de escape, o atacante pode substituir a mensagem após a execução real do sudo por um aviso falso de solicitação de senha. A vítima pode pensar que cometeu um erro ao digitar e inserir a senha novamente, expondo-a nos argumentos do manipulador "command-not-found".
Para um ataque bem-sucedido, é necessário definir o modo "mesg" como "y", que por padrão é definido no Ubuntu, Debian e CentOS/RHEL. A viabilidade do ataque foi demonstrada no Ubuntu 22.04 na configuração padrão usando o gnome-terminal. No Debian, o ataque é dificultado, pois o manipulador "command-not-found" não está incluído por padrão na distribuição, e no CentOS/RHEL o ataque não funcionará, pois a utilidade wall está instalada sem a flag setgid e não tem acesso a terminais de outros usuários. Ao usar o windows-terminal, o ataque pode ser modificado para alterar o conteúdo da área de transferência.
A vulnerabilidade se manifesta no pacote util-linux desde 2013, após a inclusão da capacidade de especificar uma mensagem na linha de comando do wall na versão 2.24, mas esqueceram de aplicar a limpeza das sequências de escape. A correção da vulnerabilidade foi incluída na versão util-linux 2.40 liberada ontem. É notável que ao tentar corrigir a vulnerabilidade na versão util-linux 2.39, outra vulnerabilidade semelhante foi descoberta, permitindo a substituição de caracteres de controle por meio de manipulação de localizações.
Fonte: opennet.ru
