
Exploit de execução remota de código para Roundcube 1.0.0 <= 1.2.2 e container vulnerável
O Roundcube é um software de webmail de código aberto amplamente distribuído, usado por muitas organizações e empresas ao redor do mundo. O espelho no SourceForge, por exemplo, contabiliza mais de 260.000 downloads nos últimos 12 meses, o que é apenas uma pequena fração dos usuários reais. Uma vez instalado o Roundcube em um servidor, ele fornece uma interface web para usuários autenticados enviarem e receberem e-mails por meio do navegador.
No Roundcube 1.2.2 e versões anteriores, a entrada controlada pelo usuário flui sem sanitização para o quinto argumento de uma chamada à função embutida mail() do PHP, que é documentada como crítica em termos de segurança. O problema é que a invocação da função mail() fará o PHP executar o programa sendmail. O quinto argumento permite passar argumentos para essa execução, o que possibilita uma configuração do sendmail. Como o sendmail oferece a opção -X para registrar todo o tráfego de e-mail em um arquivo, um atacante pode abusar dessa opção e gerar um arquivo PHP malicioso no diretório raiz da web (webroot) do servidor atacado. As seguintes linhas de código disparam a vulnerabilidade.
A vulnerabilidade tem os seguintes requisitos para exploração:
mail() do PHP (por padrão, se nenhum SMTP foi especificado [1])mail() do PHP está configurada para usar o sendmail (por padrão, veja sendmail_path [2])safe_mode desativado (por padrão, veja safe_mode [3])Esses requisitos não são particularmente exigentes, o que por sua vez significa que havia muitos sistemas vulneráveis na natureza.
Para configurar um ambiente vulnerável para seu teste, você precisará do Docker instalado e basta executar o seguinte comando:
docker build -t vuln/cve-2016-9920 .
docker run --rm -it -p 80:80 vuln/cve-2016-9920
E ele iniciará uma aplicação web vulnerável em seu host na porta 80
No Roundcube 1.2.2 e versões anteriores, a entrada controlada pelo usuário flui sem sanitização para o quinto argumento de uma chamada à função embutida
mail()do PHP, que é documentada como crítica em termos de segurança. O problema é que a invocação da funçãomail()fará o PHP executar o programa sendmail. O quinto argumento permite passar parâmetros adicionais para essa execução, o que possibilita uma configuração do sendmail. Como o sendmail oferece a opção-Xpara registrar todo o tráfego de e-mail em um arquivo, um atacante pode abusar dessa opção e gerar um arquivo PHP malicioso no diretório raiz da web (webroot) do servidor atacado. Embora essa vulnerabilidade seja rara e não amplamente conhecida, a RIPS a detectou em segundos. [4]
Para explorar este alvo, basta executar:
./exploit.py --host HOST --user USERNAME --pwd PASSWORD --path PATH --www_path WEB_DIRECTORY
Se você estiver usando esta imagem vulnerável, basta executar:
./exploit.py --host 127.0.0.1 --user username --pwd password --path roundcube --www_path "/var/www/html/roundcube"
Após a exploração, um arquivo chamado backdoor.php será armazenado na pasta raiz do diretório web. E o exploit lhe dará um shell onde você pode enviar comandos para o backdoor:
./exploit.py --host 127.0.0.1 --user username --pwd password --path roundcube --www_path "/var/www/html/roundcube"
[+] CVE-2016-9920 exploit by t0kx
[+] Exploiting 127.0.0.1
[+] Target exploited, acessing shell at http://127.0.0.1/roundcube/backdoor.php
[+] Running whoami: www-data
[+] Done
Esta falha foi encontrada por Robin Peraglie [4]. O texto principal e a ideia deste material educacional foram criados por opsxcq.
Este ou programas anteriores são SOMENTE para fins educacionais. Não os use sem permissão. O aviso legal usual se aplica, especialmente o fato de que eu (t0kx) não sou responsável por quaisquer danos causados pelo uso direto ou indireto das informações ou funcionalidades fornecidas por estes programas. O autor ou qualquer provedor de internet NÃO tem responsabilidade pelo conteúdo ou uso indevido destes programas ou de quaisquer derivados deles. Ao usar estes programas, você aceita o fato de que qualquer dano (perda de dados, falha do sistema, comprometimento do sistema, etc.) causado pelo uso destes programas não é de responsabilidade do t0kx.