SMTP Smuggling
Tip
Lernen & ĂŒben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & ĂŒben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & ĂŒben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
UnterstĂŒtzen Sie HackTricks
- ĂberprĂŒfen Sie die AbonnementplĂ€ne!
- Treten Sie der đŹ Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter đŠ @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Grundlegende Informationen
Diese Art von Verwundbarkeit wurde originally discovered in this post entdeckt, wo erklĂ€rt wird, dass es möglich ist, Unstimmigkeiten in der Interpretation des SMTPâProtokolls auszunutzen, wenn eine EâMail finalisiert wird. Dadurch kann ein Angreifer zusĂ€tzliche EâMails in den Körper der legitimen EâMail einschmuggeln und andere Benutzer der betroffenen Domain (z. B. admin@outlook.com) imitieren, wodurch Schutzmechanismen wie SPF umgangen werden.
Warum
Das liegt daran, dass im SMTPâProtokoll die Daten der Nachricht, die in der EâMail gesendet werden, vom Benutzer (Angreifer) kontrolliert werden können. Dieser kann speziell gestaltete Daten senden, die ParserâUnterschiede ausnutzen und zusĂ€tzliche EâMails beim EmpfĂ€nger einschmuggeln. Siehe dieses illustrierte Beispiel aus dem OriginalâPost:
 (1) (1) (1) (1).png)
Wie
Um diese Verwundbarkeit auszunutzen, muss ein Angreifer Daten senden, die der ausgehende SMPTâServer fĂŒr eine einzige EâMail hĂ€lt, wĂ€hrend der eingehende SMTPâServer sie als mehrere EâMails interpretiert.
Die Forscher entdeckten, dass verschiedene InboudâServer unterschiedliche Zeichen als Ende der Daten der EâMailâNachricht betrachten, die OutboundâServer nicht.
Zum Beispiel ist ein normales Ende der Daten \r\n.\r. Wenn der Inbound SMTPâServer jedoch auch \n. unterstĂŒtzt, könnte ein Angreifer genau diese Sequenz in seine EâMail einfĂŒgen und danach die SMTPâBefehle fĂŒr eine neue Nachricht (MAIL/RCPT/DATAâŠ) beginnen, um diese wie im vorherigen Bild einzuschmuggeln.
NatĂŒrlich funktioniert das nur, wenn der ausgehende SMTPâServer diese Sequenz nicht ebenfalls als Ende der Nachrichtendaten behandelt, denn sonst wĂŒrde er 2 EâMails statt nur einer sehen â letztlich wird hier also eine Desynchronisation ausgenutzt.
Mögliche DesynchronisationsâSequenzen:
\n.\n.\r
Beachte auch, dass SPF umgangen wird, weil wenn du eine EâMail von admin@outlook.com in eine EâMail von user@outlook.com einschmuggelst, der Sender weiterhin outlook.com ist.
Checkliste des Angreifers (welche Bedingungen mĂŒssen erfĂŒllt sein?)
Um erfolgreich eine zweite EâMail einzuschmuggeln, brauchst du typischerweise:
- Einen ausgehenden Server A, ĂŒber den du senden kannst (oft mit gĂŒltigen Zugangsdaten/creds), der eine nichtâstandardmĂ€Ăige EndâofâDATAâSequenz unverĂ€ndert weiterleitet. Viele Services haben historisch Varianten wie
\n.\r\noder\n.\nweitergeleitet. - Einen empfangenden Server B, der diese nichtâstandardmĂ€Ăige Sequenz als EndeâvonâDATA interpretiert und dann alles, was folgt, als neue SMTPâBefehle (MAIL/RCPT/DATAâŠ) parst.
- Outbound muss tatsÀchlich mit
DATAsenden (nichtBDAT). Wenn A CHUNKING/BDAT unterstĂŒtzt, funktioniert smuggling nur, wenn es auf DATA zurĂŒckfĂ€llt (z. B. B wirbt nicht mit CHUNKING), sonst verhindert die lĂ€ngenbasierte BDATâRahmung Mehrdeutigkeit. - PIPELINING ist nicht erforderlich, hilft aber dabei, die injizierten Befehle in einem einzigen TCPâWrite zu verstecken, sodass Zwischenstellen nicht resynchronisieren.
GĂ€ngige EndâofâDATAâVarianten, die es wert sind getestet zu werden (empfĂ€ngerabhĂ€ngig):
\n.\n\n.\r\n\r.\r\n\r\n.\r(bare CR at end)
Hinweis: Funktioniert nur die Schnittmenge von âwas A weiterleitetâ â© âwas B akzeptiertâ.
Manuelles ExploitâBeispiel (einzelne Sitzung)
Das Folgende zeigt die Idee anhand einer rohen STARTTLSâSMTPâSitzung. Nach dem ersten DATAâBlock fĂŒgen wir einen nichtâstandardmĂ€Ăigen Terminator ein, gefolgt von einem weiteren SMTPâDialog, den der empfangende Server als neue Nachricht interpretieren könnte.
Manuelle smugglingâSitzung (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.
---
## Automatisierung und Scanner
- hannob/smtpsmug: send a message ending with multiple malformed endâofâDATA sequences to see what a receiver accepts.
- Example: `./smtpsmug -s mail.target.com -p 25 -t victim@target.com`
- TheâLogin/SMTPâSmugglingâTools: scanner for both inbound and outbound sides plus an analysis SMTP server to see exactly which sequences survive a sender.
- 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.
---
## Hinweise zu betroffener Software und Fixes (fĂŒr Targeting)
- Postfix: vor 3.9 tolerierte die Standardeinstellung bare LFs; ab 3.5.23/3.6.13/3.7.9/3.8.4 können Admins `smtpd_forbid_bare_newline` aktivieren. Aktuelle Empfehlung ist `smtpd_forbid_bare_newline = normalize` (3.8.5+/3.7.10+/3.6.14+/3.5.24+) oder fĂŒr strikte RFCâDurchsetzung auf `reject` setzen.
- Exim: fixed in 4.97.1 (and later) for variants relying on mixed endâofâDATA sequences when DATA is used. Ăltere 4.97/4.96âVersionen können je nach PIPELINING/CHUNKING ausnutzbar sein.
- Sendmail: fixed in 8.18; Ă€ltere 8.17.x akzeptierten einige nichtâstandardmĂ€Ăige Terminatoren.
- Verschiedene Bibliotheken/Server (z. B. aiosmtpd vor 1.4.5, einige VendorâGateways und bestimmte SaaSâRelays) hatten Ă€hnliche Probleme; moderne Versionen akzeptieren DATA meist nur mit strikt `<CR><LF>.<CR><LF>`.
Verwende die oben genannten Scanner, um das aktuelle Verhalten zu ĂŒberprĂŒfen; viele Anbieter haben ihre Defaults Anfang 2024â2025 geĂ€ndert.
---
## Tipps fĂŒr red team ops
- Bevorzuge groĂe CommodityâSender fĂŒr A (historisch Exchange Online, shared hoster etc.). Wenn sie weiterhin einige nichtâstandardmĂ€Ăige EOM weiterleiten und in der SPF des Opfers stehen, erbt deine geschmuggelte MAIL FROM deren Reputation.
- Enumeriere Bâs SMTPâExtensions: `EHLO`âBanner fĂŒr PIPELINING/CHUNKING; wenn CHUNKING fehlt, hast du von BDATâfirstâSendern bessere Chancen. Kombiniere das mit malformed EOMs zum Abtasten der Akzeptanz.
- Achte auf Header: die geschmuggelte Nachricht erzeugt in der Regel eine separate ReceivedâKette beginnend bei B. DMARC besteht hĂ€ufig, weil MAIL FROM mit Aâs IPâBereich aligned ist.
---
## **Referenzen**
- [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]
> Lernen & ĂŒben Sie 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;">\
> Lernen & ĂŒben Sie 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;">
> Lernen & ĂŒben Sie 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>UnterstĂŒtzen Sie HackTricks</summary>
>
> - ĂberprĂŒfen Sie die [**AbonnementplĂ€ne**](https://github.com/sponsors/carlospolop)!
> - **Treten Sie der** đŹ [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** đŠ [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Teilen Sie Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos senden.
>
> </details>


