SMTP Smuggling

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Basiese Inligting

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.

Waarom

Dit is omdat in die SMTP‑protokol, die data van die boodskap wat in die e‑pos gestuur word deur ’n gebruiker (aanvaller) beheer word wat spesiaal vervaardigde data kan stuur en verskille in parsers kan misbruik wat ekstra e‑posse in die ontvanger sal smokkel. Kyk na hierdie geïllustreerde voorbeeld uit die oorspronklike pos:

https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png

Hoe

Om hierdie kwesbaarheid te misbruik moet ’n aanvaller data stuur wat die Outbound SMTP server dink dit is net 1 e-pos, maar die Inbound SMTP server dink daar is verskeie e-posse.

Die navorsers het ontdek dat verskillende Inbound servers verskillende karakters as die einde van die data van die e-pos beskou wat Outbound servers nie noodwendig so hanteer nie.
Byvoorbeeld, ’n gewone einde van die data is \r\n.\r. Maar as die Inbound SMTP server ook \n. ondersteun, kan ’n aanvaller net daardie data in sy e‑pos byvoeg en begin om die SMTP‑opdragte van ’n nuwe boodskap aan te dui om dit te smokkel, soos in die vorige beeld.

Natuurlik kan dit slegs werk as die Outbound SMTP server hierdie data nie ook as die einde van die boodskapdata beskou nie, want in daardie geval sal dit 2 e‑posse sien in plaas van net 1. Dit is uiteindelik die desinkronisering wat in hierdie kwesbaarheid misbruik word.

Potensiële desinkroniseringsdata:

  • \n.
  • \n.\r

Let ook daarop dat SPF omseil word omdat as jy ’n e‑pos van admin@outlook.com smokkel binne ’n e‑pos van user@outlook.com, bly die sender steeds outlook.com.


Aanvaller se kontrolelys (watter voorwaardes moet voldaan wees?)

Om suksesvol ’n tweede e‑pos te smokkel, benodig jy gewoonlik:

  • ’n Outbound server A waardeur jy kan stuur (dikwels met geldige creds) wat ’n nie‑standaard einde‑van‑DATA sekwensie onveranderd sal deurstuur. Baie dienste het histories variante soos \n.\r\n of \n.\n.
  • ’n ontvangende server B wat daardie nie‑standaard sekwensie as end‑of‑DATA sal interpreteer en dan alles wat volg as nuwe SMTP‑opdragte (MAIL/RCPT/DATA…) sal ontleed.
  • Outbound moet werklik met DATA stuur (nie BDAT nie). As A CHUNKING/BDAT ondersteun, werk smuggling slegs as dit terugval na DATA (bv. B adverteer nie CHUNKING nie), anders voorkom lengte‑geframmeerde BDAT onsekerheid.
  • PIPELINING is nie vereis nie maar help om die geïnjekteerde opdragte te verberg in ’n enkele TCP‑skryf sodat intermediate devices nie her‑sinkroniseer nie.

Algemene end‑of‑DATA variante wat die moeite werd is om te toets (ontvanger‑afhanklik):

  • \n.\n
  • \n.\r\n
  • \r.\r\n
  • \r\n.\r (bare CR at end)

Nota: Wat werk is die kruisingspunt van “wat A deurstuur” ∩ “wat B aanvaar”.


Handmatige misbruikvoorbeeld (enkele sessie)

Die volgende wys die idee met ’n rou STARTTLS SMTP‑sessie. Na die eerste DATA‑blok voeg ons ’n nie‑standaard terminator in, en daarna ’n ander SMTP‑dialoog wat die ontvangende server moontlik as ’n nuwe boodskap sal beskou.

Manual smuggling session (STARTTLS) ``` $ openssl s_client -starttls smtp -crlf -connect smtp.example.com:587 EHLO a.example AUTH PLAIN MAIL FROM: RCPT TO: DATA From: User To: victim Subject: legit

hello 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, boodskap “hello B” mag as ’n tweede e‑pos van `admin@target.com` aanvaar word terwyl dit SPF deurstaan (gealigneer met A’s IP’s).
</details>

Tip: Wanneer jy interaktief toets, maak seker `-crlf` word gebruik sodat OpenSSL CRLF in wat jy tik behou.

---

## Automation and scanners

- hannob/smtpsmug: stuur ’n boodskap wat eindig met meerdere malformed end‑of‑DATA sekwensies om te sien wat ’n ontvanger aanvaar.
- Example: `./smtpsmug -s mail.target.com -p 25 -t victim@target.com`
- The‑Login/SMTP‑Smuggling‑Tools: scanner vir beide inbound en outbound kante plus ’n analysis SMTP server om presies te sien watter sekwensies van ’n sender oorleef.
- 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 '...'
`

Hierdie gereedskap help jou om die A→B pare te karteer waar smuggling werklik werk.

---

## CHUNKING/BDAT vs DATA

- DATA uses a sentinel terminator `<CR><LF>.<CR><LF>`; enige onsekerheid in hoe CR/LF genormaliseer of dot‑gestuff word, lei tot desync.
- CHUNKING (BDAT) raam die liggaam met ’n presiese byte‑lengte en voorkom dus klassieke smuggling. Indien die sender egter terugval na DATA (omdat die ontvanger CHUNKING nie adverteer nie), word klassieke smuggling weer moontlik.

---

## Notes on affected software and fixes (for targeting)

- Postfix: voor 3.9 het die standaard bare LFs geduld; vanaf 3.5.23/3.6.13/3.7.9/3.8.4 kan admins `smtpd_forbid_bare_newline` aktiveer. Huidige aanbeveling is `smtpd_forbid_bare_newline = normalize` (3.8.5+/3.7.10+/3.6.14+/3.5.24+) of stel dit op `reject` vir streng RFC‑afdwinging.
- Exim: reggestel in 4.97.1 (en later) vir variante wat staatmaak op gemengde end‑of‑DATA sekwensies wanneer DATA gebruik word. Ouer 4.97/4.96 mag eksploiteerbaar wees afhangende van PIPELINING/CHUNKING.
- Sendmail: reggestel in 8.18; ouer 8.17.x het sommige nie‑standaard terminators aanvaar.
- Verskeie biblioteke/servers (bv. aiosmtpd voor 1.4.5, sommige vendor gateways, en spesifieke SaaS relays) het soortgelyke kwessies gehad; moderne weergawes neig om DATA slegs met streng `<CR><LF>.<CR><LF>` te aanvaar.

Gebruik die scanners hierbo om huidige gedrag te verifieer; baie vendors het standaarde vroeër in 2024–2025 verander.

---

## Wenke vir red team ops

- Gee voorkeur aan groot commodity senders vir A (histories Exchange Online, shared hosters, ens.). As hulle steeds sommige nie‑standaard EOM deurstuur en hulle is in die slagoffer se SPF, sal jou gesmuggelde MAIL FROM hul reputasie erf.
- Enumereer B se SMTP uitbreidings: `EHLO` banner vir PIPELINING/CHUNKING; as CHUNKING ontbreek het jy ’n beter kans vanaf BDAT‑first senders. Kombineer met malformed EOMs om aanvaarbaarheid te toets.
- Kyk na headers: die gesmuggelde boodskap sal gewoonlik ’n aparte Received ketting skep wat by B begin. DMARC sal dikwels slaag omdat MAIL FROM altyd met A se IP‑ruimte gealigneer is.

---

## **Verwysings**

- [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)

> [!TIP]
> Leer en oefen AWS Hacking:<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;">\
> Leer en oefen GCP Hacking: <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;">
> Leer en oefen Azure Hacking: <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>Ondersteun HackTricks</summary>
>
> - Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
> - **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
>
> </details>