No swhkd (Simple Wayland HotKey Daemon) foi identificada uma série de vulnerabilidades causadas pelo tratamento incorreto de arquivos temporários, parâmetros de linha de comando e sockets unix. O programa é escrito em Rust e processa a captura de teclas de atalho em ambientes baseados no protocolo Wayland (semelhante em nível de arquivos de configuração ao processo sxhkd usado em ambientes baseados em X11).
O pacote inclui um processo não privilegiado swhks, que executa ações para teclas de atalho, e um processo em segundo plano swhkd, executado com permissões de root e interagindo com dispositivos de entrada através da API uinput. Para organizar a interação entre swhks e swhkd, é utilizado um socket Unix. Através de regras Polkit, qualquer usuário local é permitido iniciar o processo /usr/bin/swhkd com permissões de root e passar parâmetros arbitrários.
Vulnerabilidades identificadas:
- CVE-2022-27815 — salvamento do PID do 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 o arquivo /tmp/swhkd.pid e inserir o pid de um processo existente, o que impedirá a inicialização do swhkd. Na ausência de proteção contra a criação de links simbólicos em /tmp, a vulnerabilidade pode ser explorada para criar ou sobrescrever arquivos em qualquer diretório do sistema (o PID é salvado no arquivo) ou para determinar o conteúdo de qualquer arquivo no sistema (o swhkd exibe no stdout todo o conteúdo do arquivo PID). Curiosamente, na correção lançada, o arquivo PID foi movido do diretório /run para o diretório /etc (/etc/swhkd/runtime/swhkd_{uid}.pid), onde também não deveria estar.
- CVE-2022-27814 — manipulando o parâmetro de linha de comando "-c", usado para especificar o arquivo de configuração, é possível determinar a existência de qualquer arquivo no sistema. Por exemplo, para verificar /root/.somefile, pode-se executar "pkexec /usr/bin/swhkd -d -c /root/.somefile" e se o arquivo não existir será exibida a mensagem de erro "/root/.somefile doesn’t exist". Assim como no caso da primeira vulnerabilidade, a correção do problema é confusa — a resolução do problema é que agora uma ferramenta externa "cat" é utilizada para ler o arquivo de configuração (‘Command::new(“/bin/cat”).arg(path).output()’).
- CVE-2022-27819 — o problema também está relacionado ao uso da opção "-c", que faz com que o arquivo de configuração seja carregado e analisado completamente sem verificação de tamanho e tipo de arquivo. Por exemplo, para causar um ataque de negação de serviço devido ao esgotamento de memória livre e à criação de entrada/saída parasitária, pode-se especificar, ao iniciar, um dispositivo de bloco ("pkexec /usr/bin/swhkd -d -c /dev/sda") ou um dispositivo de caractere que gera um fluxo infinito de dados. O problema foi resolvido com a revogação de privilégios antes da abertura do arquivo, mas a correção não foi completa, pois apenas o identificador de usuário (UID) é redefinido, enquanto o identificador de grupo (GID) permanece inalterado.
- CVE-2022-27818 — para criar um socket Unix, é usado o arquivo /tmp/swhkd.sock, que é criado em um diretório público com permissão de gravação, levando a problemas semelhantes à primeira vulnerabilidade (qualquer usuário pode criar /tmp/swhkd.sock e gerar ou capturar eventos de pressionamento de teclas).
- 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 Wayland ou do console pode capturar eventos de pressionamento de teclas de outros usuários.
- CVE-2022-27816 — o processo swhks, assim como o swhkd, usa o arquivo PID /tmp/swhks.pid em um diretório público com permissão de gravação /tmp. O problema é semelhante à primeira vulnerabilidade, mas não tão perigoso, pois o swhks é executado sob um usuário não privilegiado.
Fonte: opennet.ru
