
Exploração da vulnerabilidade chamada "Dirty_Sock" (CVE-2019-7304) na API REST do daemon snapd da Canonical.
Explorar a vulnerabilidade chamada "Dirty_Sock" (CVE-2019-7304) na API REST do daemon snapd da Canonical (um serviço padrão no Ubuntu Linux), para obter acesso root.
Guia de Ramil Mustafayev: https://kryptohaker.medium.com/linux-privilege-escalation-via-snapd-using-dirty-sock-exploit-and-demonstration-of-cve-2019-7304-892716cf99ca
Esta vulnerabilidade foi explorada em versões do snapd anteriores à 2.37, devido a um endereço de socket remoto incorretamente validado e analisado ao executar controles de acesso em seu socket UNIX. Isso também afetou algumas distribuições Unix e Linux na época (ex.: Ubuntu 16.04). Portanto, para implementar essa exploração, precisamos do snapd 2.32 e do Ubuntu 16.04.
Obtive o pacote Debian do snapd 2.32 em https://launchpad.net/ubuntu/+source/snapd

Primeiro, verifico se a máquina Ubuntu é vulnerável à exploração usando os comandos cat /etc/lsb-release (que mostra a versão do Ubuntu com sua descrição) e uname -a (que verifica as informações do computador e do sistema operacional atuais). Então, temos certeza de que esta máquina é explorável.

O próximo passo é iniciar o serviço snapd usando o comando systemctl start snapd (na realidade, quando os atacantes exploram essa falha, o serviço snapd precisa ser iniciado pelo administrador, caso contrário, eles não conseguirão executá-lo com sucesso). Em seguida, podemos verificar a versão do snapd para garantir que ela é vulnerável.

Em seguida, verificarei os privilégios do usuário usando os comandos id (exibe as informações de usuário e grupo) e tail /etc/passwd (o arquivo /etc/passwd é usado para rastrear cada usuário registrado). Os resultados abaixo mostram que o atacante com o nome de usuário "coby" é um usuário normal, que tem o menor acesso ao sistema.

Para lançar este ataque, utilizaremos o script dirty_sock, que tem duas versões, obtido de https://github.com/initstring/dirty_sock. Enquanto a Versão Um requer uma conexão de Internet de saída e o serviço SSH em execução, a Versão Dois pode ser executada diretamente, sem qualquer requisito.
No dirty_sockv2.py, que será usado nesta exploração, alguns componentes-chave devem ser observados. O primeiro componente-chave neste script é a variável TROJAN_SNAP, que é uma string codificada em base64 que representa um pacote snap instalável. Este pacote é um snap "devmode" vazio que possui um script bash no hook de instalação, que criará um novo usuário ("devmode" (modo de desenvolvedor) é um modo de instalação especial que permite que os snaps ignorem a restrição estrita para fins de desenvolvimento e depuração).

Outro componente considerável neste script é a função create_sockfile(). Esta função explora a análise insegura no arquivo "ucrednet.go" do snapd para gerar um arquivo de socket aleatório e inserir o dirty sock, ;uid=0;, permitindo-nos sobrescrever a variável UID.

Para implementar esta exploração, simplesmente executo o dirty_sockv2.py no terminal. Após executar o exploit dirty_sock com sucesso, podemos ver que uma conta dirty_sock com a mesma senha foi criada automaticamente pelo script.

Então, verifico o /etc/passwd para ver a lista de usuários registrados e vejo que um novo usuário chamado "dirty_sock" foi criado.

Usando o comando su, posso entrar na conta "dirty_sock" com as credenciais descobertas. Após o login bem-sucedido, posso verificar os privilégios deste usuário e ver que ele está no grupo sudo. Isso significa que o atacante já obteve controle total do sistema e pode fazer qualquer coisa com os privilégios mais altos.

A pontuação CVSS desta vulnerabilidade é 8.8 (Alta Severidade), o que significa que ela pode causar um grande impacto no sistema se for explorada. Esta vulnerabilidade tem alta gravidade, pois não exige alto privilégio para ser explorada. Quando um atacante já tem algum ponto de apoio no sistema (ex.: um usuário de baixo privilégio), ele pode escalar privilégios para root, tornando esta vulnerabilidade uma séria ameaça local de segurança, especialmente em ambientes multiusuário ou em nuvem.