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