Vulnerabilidades no swhkd, um gerenciador de atalhos para Wayland

Uma série de vulnerabilidades foram identificadas no swhkd (Simple Wayland HotKey Daemon) causadas por trabalho incorreto com arquivos temporários, parâmetros de linha de comando e soquetes Unix. O programa é escrito em Rust e lida com o pressionamento de teclas de atalho em ambientes baseados no protocolo Wayland (um análogo compatível com arquivo de configuração do processo sxhkd usado em ambientes baseados em X11).

O pacote inclui um processo swhks sem privilégios que executa ações de teclas de atalho e um processo swhkd em segundo plano que é executado como root e interage com dispositivos de entrada no nível da API uinput. Um soquete Unix é usado para organizar a interação entre swhks e swhkd. Usando regras do Polkit, qualquer usuário local pode executar o processo /usr/bin/swhkd como root e passar parâmetros arbitrários para ele.

Vulnerabilidades identificadas:

  • CVE-2022-27815 – Salvando um PID de processo em um arquivo com um nome previsível e em um diretório que pode ser gravado por outros usuários (/tmp/swhkd.pid). Qualquer usuário pode criar um arquivo /tmp/swhkd.pid e colocar nele o pid de um processo existente, o que impedirá a inicialização do swhkd. Se não houver proteção contra a criação de links simbólicos em /tmp, a vulnerabilidade pode ser usada para criar ou sobrescrever arquivos em qualquer diretório do sistema (o PID é gravado no arquivo) ou determinar o conteúdo de qualquer arquivo no sistema (swhkd imprime o todo o conteúdo do arquivo PID para stdout). Vale ressaltar que na correção lançada o arquivo PID foi movido não para o diretório /run, mas para o diretório /etc (/etc/swhkd/runtime/swhkd_{uid}.pid), ao qual também não pertence.
  • CVE-2022-27814 – Ao manipular a opção “-c” da linha de comando usada para especificar um arquivo de configuração, é possível determinar a existência de algum arquivo no sistema. Por exemplo, para verificar /root/.somefile você pode executar “pkexec /usr/bin/swhkd -d -c /root/.somefile” e se o arquivo estiver faltando, o erro “/root/.somefile não existe " será exibido. Como no caso da primeira vulnerabilidade, consertar o problema é intrigante - consertar o problema se resume ao fato de que o utilitário externo “cat” ('Command::new(“/bin/cat”)).arg(path) agora é iniciado para ler o arquivo de configuração.output()').
  • CVE-2022-27819 – O problema também está relacionado ao uso da opção “-c”, que faz com que todo o arquivo de configuração seja carregado e analisado sem verificar o tamanho e tipo do arquivo. Por exemplo, para causar uma negação de serviço ao ficar sem memória livre e criar E/S falsa, você pode especificar um dispositivo de bloco na inicialização ("pkexec /usr/bin/swhkd -d -c /dev/sda") ou um dispositivo de caracteres que produz um fluxo infinito de dados. O problema foi resolvido redefinindo os privilégios antes de abrir o arquivo, mas a correção não foi completa, pois apenas o ID do usuário (UID) é redefinido, mas o ID do grupo (GID) permanece o mesmo.
  • CVE-2022-27818 – Um soquete Unix é criado usando o arquivo /tmp/swhkd.sock criado em um diretório gravável, o que leva a problemas semelhantes aos da primeira vulnerabilidade (qualquer usuário pode criar /tmp/swhkd.sock e gerar ou interceptar eventos de pressionamento de tecla).
  • CVE-2022-27817 – Eventos de entrada são aceitos de todos os dispositivos e em todas as sessões, ou seja, um usuário de outra sessão do Wayland ou do console pode interceptar eventos quando teclas de atalho são pressionadas por outros usuários.
  • CVE-2022-27816 O processo swhks, como swhkd, usa o arquivo PID /tmp/swhks.pid no diretório gravável /tmp. O problema é semelhante à primeira vulnerabilidade, mas não é tão perigoso porque o swhks está sendo executado por um usuário sem privilégios.

Fonte: opennet.ru

Adicionar um comentário