SMTP Smuggling
Reading time: 7 minutes
tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao đŹ grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter đŠ @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositĂłrios do github.
InformaçÔes båsicas
This type of vulnerability was originally discovered in this post were it's explained that It's possible to exploit discrepancies in how the SMTP protocol is interpreted when finalising an email, allowing an attacker to smuggle more emails in the body of the legit one, allowing to impersonate other users of the affected domain (such as admin@outlook.com) bypassing defenses such as SPF.
Por que
Isso ocorre porque, no protocolo SMTP, os dados da mensagem a serem enviados no e-mail sĂŁo controlados por um usuĂĄrio (atacante) que pode enviar dados especialmente construĂdos abusando de diferenças nos parsers que irĂŁo contrabandear e-mails adicionais no receptor. Veja este exemplo ilustrado do post original:
 (1) (1) (1) (1).png)
Como
Para explorar essa vulnerabilidade, um atacante precisa enviar dados que o servidor Outbound SMTP interpreta como apenas 1 e-mail, mas o servidor Inbound SMTP interpreta como vĂĄrios e-mails.
Os pesquisadores descobriram que diferentes servidores Inbound consideram caracteres diferentes como fim dos dados da mensagem de e-mail que os servidores Outbound nĂŁo consideram.
Por exemplo, um terminador regular Ă© \r\n.\r. Mas se o servidor Inbound SMTP tambĂ©m aceitar \n., um atacante poderia apenas adicionar esses dados no seu e-mail e começar a indicar os comandos SMTP de uma nova mensagem para contrabandeĂĄâla, como na imagem anterior.
Obviamente, isso sĂł funcionarĂĄ se o servidor Outbound SMTP nĂŁo tratar esses dados tambĂ©m como fim dos dados da mensagem, porque nesse caso ele verĂĄ 2 e-mails em vez de apenas 1 â no fim das contas Ă© essa dessincronização que estĂĄ sendo explorada nessa vulnerabilidade.
PossĂveis sequĂȘncias de dessincronização:
\n.\n.\r
Note tambĂ©m que o SPF Ă© contornado porque se vocĂȘ contrabandear um e-mail de admin@outlook.com a partir de um e-mail de user@outlook.com, o remetente ainda Ă© outlook.com.
Checklist do atacante (quais condiçÔes devem ser satisfeitas?)
Para contrabandear com sucesso um segundo e-mail, normalmente vocĂȘ precisa de:
- Um servidor Outbound A pelo qual vocĂȘ possa enviar (frequentemente com credenciais vĂĄlidas) que encaminhe uma sequĂȘncia de fimâdeâDATA nĂŁo padronizada sem alterĂĄâla. Muitos serviços historicamente encaminharam variantes como
\n.\r\nou\n.\n. - Um servidor receptor B que interpretarĂĄ essa sequĂȘncia nĂŁo padronizada como fimâdeâDATA e entĂŁo analisarĂĄ o que segue como novos comandos SMTP (MAIL/RCPT/DATA...).
- O Outbound deve realmente enviar com
DATA(nĂŁoBDAT). Se A suporta CHUNKING/BDAT, smuggling sĂł funciona se houver fallback para DATA (por exemplo, B nĂŁo anuncia CHUNKING), caso contrĂĄrio o BDAT com comprimento evita ambiguidade. - PIPELINING nĂŁo Ă© obrigatĂłrio mas ajuda a esconder os comandos injetados em uma Ășnica escrita TCP para que dispositivos intermediĂĄrios nĂŁo re-sincronizem.
Variantes comuns de fimâdeâDATA que valem testar (dependendo do receptor):
\n.\n\n.\r\n\r.\r\n\r\n.\r(bare CR at end)
Nota: O que funciona Ă© a interseção de âo que A encaminhaâ â© âo que B aceitaâ.
Exemplo de exploração manual (sessĂŁo Ășnica)
O seguinte mostra a ideia usando uma sessĂŁo SMTP STARTTLS bruta. ApĂłs o primeiro bloco DATA inserimos um terminador nĂŁo padronizado, entĂŁo outro diĂĄlogo SMTP que o servidor receptor pode tratar como uma nova mensagem.
Manual smuggling session (STARTTLS)
``` $ openssl s_client -starttls smtp -crlf -connect smtp.example.com:587 EHLO a.example AUTH PLAINhello A \n.\r\nMAIL FROM:admin@target.com RCPT TO:victim@target.com DATA From: Admin admin@target.com To: victim victim@target.com Subject: smuggled
hello B \r\n.\r\n
If A forwards `\n.\r\n` and B accepts it as endâofâDATA, message âhello Bâ may be accepted as a second email from `admin@target.com` while passing SPF (aligned with Aâs IPs).
</details>
Tip: When testing interactively, ensure `-crlf` is used so OpenSSL preserves CRLF in what you type.
---
## Automação e scanners
- hannob/smtpsmug: envia uma mensagem terminando com mĂșltiplas sequĂȘncias malformadas de endâofâDATA para ver o que um receptor aceita.
- Example: `./smtpsmug -s mail.target.com -p 25 -t victim@target.com`
- TheâLogin/SMTPâSmugglingâTools: scanner para os lados inbound e outbound, alĂ©m de um servidor SMTP de anĂĄlise para ver exatamente quais sequĂȘncias sobrevivem a um remetente.
- Inbound quick check: `python3 smtp_smuggling_scanner.py victim@target.com`
- Outbound via a relay: `python3 smtp_smuggling_scanner.py YOUR@ANALYSIS.DOMAIN --outbound-smtp-server smtp.relay.com --port 587 --starttls --sender-address you@relay.com --username you@relay.com --password '...'
`
These tools help you map the AâB pairs where smuggling actually works.
---
## CHUNKING/BDAT vs DATA
- DATA uses a sentinel terminator `<CR><LF>.<CR><LF>`; any ambiguity in how CR/LF are normalized or dotâstuffed leads to desync.
- CHUNKING (BDAT) frames the body with an exact byte length and therefore prevents classic smuggling. However, if the sender falls back to DATA (because the receiver doesnât advertise CHUNKING), classic smuggling becomes possible again.
---
## Notas sobre software afetado e correçÔes (para targeting)
- Postfix: prior to 3.9 the default tolerated bare LFs; from 3.5.23/3.6.13/3.7.9/3.8.4 admins can enable `smtpd_forbid_bare_newline`. Current recommendation is `smtpd_forbid_bare_newline = normalize` (3.8.5+/3.7.10+/3.6.14+/3.5.24+) or set to `reject` for strict RFC enforcement.
- Exim: fixed in 4.97.1 (and later) for variants relying on mixed endâofâDATA sequences when DATA is used. Older 4.97/4.96 may be exploitable depending on PIPELINING/CHUNKING.
- Sendmail: fixed in 8.18; older 8.17.x accepted some nonâstandard terminators.
- Various libraries/servers (e.g., aiosmtpd before 1.4.5, some vendor gateways, and specific SaaS relays) had similar issues; modern versions tend to accept DATA only with strict `<CR><LF>.<CR><LF>`.
Use the scanners above to verify current behavior; many vendors changed defaults in early 2024â2025.
---
## Dicas para operaçÔes de red team
- Favor large commodity senders for A (historically Exchange Online, shared hosters, etc.). If they still forward some nonâstandard EOM and theyâre in the victimâs SPF, your smuggled MAIL FROM will inherit their reputation.
- Enumerate Bâs SMTP extensions: `EHLO` banner for PIPELINING/CHUNKING; if CHUNKING is missing you have a better chance from BDATâfirst senders. Combine with malformed EOMs to probe acceptance.
- Watch headers: the smuggled message will usually create a separate Received chain starting at B. DMARC will often pass because MAIL FROM aligns with Aâs IP space.
---
## **References**
- [https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/](https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/)
- [https://www.postfix.org/smtp-smuggling.html](https://www.postfix.org/smtp-smuggling.html)
<div class="mdbook-alerts mdbook-alerts-tip">
<p class="mdbook-alerts-title">
<span class="mdbook-alerts-icon"></span>
tip
</p>
Aprenda e pratique Hacking AWS:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
Aprenda e pratique Hacking GCP: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
Aprenda e pratique Hacking Azure: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
<details>
<summary>Supporte o HackTricks</summary>
- Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
- **Junte-se ao** đŹ [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** đŠ [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
- **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositĂłrios do github.
</details>
</div>
HackTricks