SMTP Smuggling
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
๊ธฐ๋ณธ ์ ๋ณด
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.
์ด์
์ด๊ฒ์ SMTP ํ๋กํ ์ฝ์์ ์ด๋ฉ์ผ๋ก ์ ์ก๋๋ ๋ฉ์์ง์ ๋ฐ์ดํฐ๊ฐ ์ฌ์ฉ์(๊ณต๊ฒฉ์)์ ์ํด ์ ์ด๋๋ฉฐ, ํ์ ๊ฐ์ ์ฐจ์ด๋ฅผ ์ ์ฉํด ์์ ์์ ์ถ๊ฐ ์ด๋ฉ์ผ์ ์ค๋จธ๊ธ๋งํ ์ ์๋ ํน์ ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์๋ฌธ ๊ฒ์๋ฌผ์ ๋ค์ ์์๋ฅผ ๋ณด์ธ์:
 (1) (1) (1) (1).png)
๋ฐฉ๋ฒ
์ด ์ทจ์ฝ์ ์ ์ ์ฉํ๋ ค๋ฉด ๊ณต๊ฒฉ์๋ Outbound SMPT server๊ฐ ์ด๋ฅผ ๋จ์ผ ์ด๋ฉ์ผ๋ก ์ธ์ํ๋ ๋ฐ๋ฉด Inbound SMTP server๋ ์ฌ๋ฌ ์ด๋ฉ์ผ๋ก ์ธ์ํ๋ ์ผ๋ถ ๋ฐ์ดํฐ๋ฅผ ์ ์กํด์ผ ํฉ๋๋ค.
์ฐ๊ตฌ์๋ค์ ์๋ก ๋ค๋ฅธ Inboud servers๊ฐ ์ด๋ฉ์ผ ๋ฉ์์ง์ ๋ฐ์ดํฐ ์ข
๋ฃ๋ฅผ ์๋ก ๋ค๋ฅธ ๋ฌธ์๋ก ์ธ์ํ๋ค๋ ์ ์ ๋ฐ๊ฒฌํ์ต๋๋ค(Outbound servers๋ ๊ทธ๋ ์ง ์์).
์๋ฅผ ๋ค์ด, ์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ ์ข
๋ฃ๋ \r\n.\r์
๋๋ค. ๊ทธ๋ฌ๋ Inbound SMTP server๊ฐ \n.๋ ํ์ฉํ๋ค๋ฉด, ๊ณต๊ฒฉ์๋ ๋จ์ํ ์ด๋ฉ์ผ์ ํด๋น ์ํ์ค๋ฅผ ์ถ๊ฐํ๊ณ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ด๋ฉ์ผ์ ๋ฃ์ ๋ค ์๋ก์ด SMTP ๋ช
๋ น๋ค์ ์์ํ์ฌ ์์ ๊ทธ๋ฆผ์ฒ๋ผ ์ค๋จธ๊ธ๋งํ ์ ์์ต๋๋ค.
๋ฌผ๋ก , ์ด ๋ฐฉ๋ฒ์ Outbound SMTP server๊ฐ ์ด ๋ฐ์ดํฐ๋ ๋ฉ์์ง ์ข ๋ฃ๋ก ์ฒ๋ฆฌํ์ง ์์ ๊ฒฝ์ฐ์๋ง ์๋ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด Outbound๊ฐ 2๊ฐ์ ์ด๋ฉ์ผ๋ก ์ธ์ํ๊ฒ ๋์ด ์ด ์ทจ์ฝ์ ์ด ์ ์ฉ๋๋ ๋น๋๊ธฐํ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ ์ฌ์ ๋๊ธฐํ ๋ถ์ผ์น ์ํ์ค:
\n.\n.\r
๋ํ, SPF๋ ์ฐํ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด user@outlook.com์์ admin@outlook.com์ ์ค๋จธ๊ธ๋งํ๋ฉด, **๋ฐ์ ์๋ ์ฌ์ ํ outlook.com**์
๋๋ค.
๊ณต๊ฒฉ์ ์ฒดํฌ๋ฆฌ์คํธ (์ด๋ค ์กฐ๊ฑด์ด ์ถฉ์กฑ๋์ด์ผ ํ๋?)
์ฑ๊ณต์ ์ผ๋ก ๋ ๋ฒ์งธ ์ด๋ฉ์ผ์ ์ค๋จธ๊ธํ๋ ค๋ฉด ์ผ๋ฐ์ ์ผ๋ก ๋ค์์ด ํ์ํฉ๋๋ค:
- ์ ์กํ ์ ์๋ outbound ์๋ฒ A(์ข
์ข
์ ํจํ ์ธ์ฆ ์ ๋ณด๊ฐ ํ์)๋ก, ๋นํ์ค endโofโDATA ์ํ์ค๋ฅผ ๋ณ๊ฒฝ ์์ด ์ ๋ฌํ๋ ์๋ฒ. ๋ง์ ์๋น์ค๊ฐ ์ญ์ฌ์ ์ผ๋ก
\n.\r\n๋๋\n.\n๊ฐ์ ๋ณํ์ ์ ๋ฌํ์ต๋๋ค. - ํด๋น ๋นํ์ค ์ํ์ค๋ฅผ endโofโDATA๋ก ํด์ํ๊ณ ์ดํ ๋ด์ฉ์ ์๋ก์ด SMTP ๋ช ๋ น(MAIL/RCPT/DATAโฆ)์ผ๋ก ํ์ฑํ๋ ์์ ์๋ฒ B.
- Outbound๋ ์ค์ ๋ก
DATA๋ก ์ ์กํด์ผ ํจ (BDAT์ด ์๋). A๊ฐ CHUNKING/BDAT๋ฅผ ์ง์ํ๋ฉด, ์ค๋จธ๊ธ๋ง์ A๊ฐ DATA๋ก ํด๋ฐฑํ ๋๋ง ์๋(์: B๊ฐ CHUNKING์ ๊ด๊ณ ํ์ง ์๋ ๊ฒฝ์ฐ). ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ธธ์ด ๊ธฐ๋ฐ BDAT๊ฐ ๋ชจํธ์ฑ์ ๋ฐฉ์งํฉ๋๋ค. - PIPELINING์ ํ์๋ ์๋์ง๋ง, ์ฃผ์ ๋ ๋ช ๋ น์ ๋จ์ผ TCP write์ ์จ๊ฒจ ์ค๊ฐ ์ฅ์น๋ค์ด ๋ค์ ๋๊ธฐํํ์ง ๋ชปํ๊ฒ ํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
์์ ์์ ๋ฐ๋ผ ํ ์คํธํด๋ณผ ๋งํ ์ผ๋ฐ์ ์ธ endโofโDATA ๋ณํ:
\n.\n\n.\r\n\r.\r\n\r\n.\r(๋์ bare CR)
์ฐธ๊ณ : ์ค์ ๋ก ์๋ํ๋ ๊ฒ์ โA๊ฐ ์ ๋ฌํ๋ ๊ฒโ โฉ โB๊ฐ ์์ฉํ๋ ๊ฒโ์ ๊ต์งํฉ์ ๋๋ค.
์๋ ์ต์คํ๋ก์ ์์ (๋จ์ผ ์ธ์ )
๋ค์์ raw STARTTLS SMTP ์ธ์ ์ ์ฌ์ฉํ ์์ด๋์ด๋ฅผ ๋ณด์ฌ์ค๋๋ค. ์ฒซ ๋ฒ์งธ DATA ๋ธ๋ก ๋ค์ ๋นํ์ค ์ข ๋ฃ์๋ฅผ ์ฝ์ ํ ํ, ์์ ์๋ฒ๊ฐ ์ ๋ฉ์์ง๋ก ์ฒ๋ฆฌํ ์ ์๋ ๋ ๋ค๋ฅธ SMTP ๋ํ๋ฅผ ๋ฃ์ต๋๋ค.
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
</details>
A๊ฐ `\n.\r\n`์ ํฌ์๋ํ๊ณ B๊ฐ ์ด๋ฅผ endโofโDATA๋ก ์์ฉํ๋ฉด, ๋ฉ์์ง โhello Bโ๊ฐ `admin@target.com`์ผ๋ก๋ถํฐ ๋ ๋ฒ์งธ ์ด๋ฉ์ผ๋ก ์๋ฝ๋๋ฉด์ SPF( A์ IP์ ์ ๋ ฌ๋จ)๋ฅผ ํต๊ณผํ ์ ์์ต๋๋ค.
Tip: ๋ํํ์ผ๋ก ํ
์คํธํ ๋๋ OpenSSL์ด ์
๋ ฅํ CRLF๋ฅผ ๋ณด์กดํ๋๋ก `-crlf`๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
---
## Automation and scanners
- hannob/smtpsmug: ์์ ์๊ฐ ์ด๋ค ๊ฒ์ ์์ฉํ๋์ง ํ์ธํ๊ธฐ ์ํด ์ฌ๋ฌ ๊ฐ์ ์๋ชป๋ endโofโDATA ์ํ์ค๋ก ๋๋๋ ๋ฉ์์ง๋ฅผ ๋ณด๋
๋๋ค.
- Example: `./smtpsmug -s mail.target.com -p 25 -t victim@target.com`
- TheโLogin/SMTPโSmugglingโTools: inbound ๋ฐ outbound ์์ชฝ์ ์ค์บํ๋ ์ค์บ๋์ ์ก์ ์๊ฐ ์ด๋ค ์ํ์ค๋ฅผ ํต๊ณผ์ํค๋์ง ์ ํํ ํ์ธํ ์ ์๋ ๋ถ์์ฉ SMTP ์๋ฒ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- 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 '...'
`
์ด ๋๊ตฌ๋ค์ smuggling์ด ์ค์ ๋ก ๋์ํ๋ AโB ์์ ๋งคํํ๋ ๋ฐ ๋์์ ์ค๋๋ค.
---
## CHUNKING/BDAT vs DATA
- DATA๋ ์ข
๊ฒฐ์ `<CR><LF>.<CR><LF>`๋ฅผ ์ฌ์ฉํฉ๋๋ค; CR/LF๊ฐ ์ด๋ป๊ฒ ์ ๊ทํ๋๊ฑฐ๋ dotโstuffing ๋๋์ง์ ๋ํ ๋ชจํธ์ฑ์ desync๋ฅผ ์ด๋ํฉ๋๋ค.
- CHUNKING(BDAT)๋ ๋ฐ๋๋ฅผ ์ ํํ ๋ฐ์ดํธ ๊ธธ์ด๋ก ํ๋ ์ด๋ฐํ๋ฏ๋ก ๊ณ ์ ์ ์ธ smuggling์ ๋ฐฉ์งํฉ๋๋ค. ๋ค๋ง ์ก์ ์๊ฐ ์์ ์๊ฐ CHUNKING์ ๊ด๊ณ ํ์ง ์์ DATA๋ก ํด๋ฐฑํ๋ฉด ๊ณ ์ ์ smuggling์ด ๋ค์ ๊ฐ๋ฅํด์ง๋๋ค.
---
## Notes on affected software and fixes (for targeting)
- Postfix: 3.9 ์ด์ ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก bare LF๋ฅผ ํ์ฉํ์ผ๋ฉฐ; 3.5.23/3.6.13/3.7.9/3.8.4๋ถํฐ ๊ด๋ฆฌ์๋ `smtpd_forbid_bare_newline`์ ํ์ฑํํ ์ ์์ต๋๋ค. ํ์ฌ ๊ถ์ฅ ์ค์ ์ `smtpd_forbid_bare_newline = normalize`(3.8.5+/3.7.10+/3.6.14+/3.5.24+)์ด๋ฉฐ, ์๊ฒฉํ RFC ์ ์ฉ์ ์ํ๋ฉด `reject`๋ก ์ค์ ํ์ญ์์ค.
- Exim: DATA ์ฌ์ฉ ์ ํผํฉ๋ endโofโDATA ์ํ์ค์ ์์กดํ๋ ๋ณ์ข
์ 4.97.1(๋ฐ ์ดํ ๋ฒ์ )์์ ์์ ๋์์ต๋๋ค. ์ค๋๋ 4.97/4.96์ PIPELINING/CHUNKING์ ๋ฐ๋ผ ์ทจ์ฝํ ์ ์์ต๋๋ค.
- Sendmail: 8.18์์ ์์ ๋์๊ณ , ์ด์ ์ 8.17.x๋ ์ผ๋ถ ๋นํ์ค terminator๋ฅผ ์์ฉํ์ต๋๋ค.
- ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ/์๋ฒ(์: aiosmtpd 1.4.5 ์ด์ , ์ผ๋ถ ๋ฒค๋ ๊ฒ์ดํธ์จ์ด, ํน์ SaaS relays ๋ฑ)๋ ์ ์ฌํ ๋ฌธ์ ๊ฐ ์์์ผ๋ฉฐ; ์ต์ ๋ฒ์ ๋ค์ ๋ณดํต DATA๋ฅผ ์๊ฒฉํ `<CR><LF>.<CR><LF>`๋ง ์์ฉํฉ๋๋ค.
์์ ์ค์บ๋๋ค์ ์ฌ์ฉํด ํ์ฌ ๋์์ ํ์ธํ์ญ์์ค; ๋ง์ ๋ฒค๋๊ฐ 2024โ2025๋
์ด์ ๊ธฐ๋ณธ๊ฐ์ ๋ณ๊ฒฝํ์ต๋๋ค.
---
## Tips for red team ops
- A๋ก๋ ๋ํ์ ์ผ๋ฐ์ ์ธ ๋ฐ์ ์(์ญ์ฌ์ ์ผ๋ก๋ Exchange Online, ๊ณต์ ํธ์คํ
์ ๊ณต์ ๋ฑ)๋ฅผ ์ ํธํ์ธ์. ์ด๋ค์ด ์ฌ์ ํ ์ผ๋ถ ๋นํ์ค EOM์ ํฌ์๋ํ๊ณ ํผํด์์ SPF์ ํฌํจ๋์ด ์๋ค๋ฉด, ๋น์ ์ด smuggleํ MAIL FROM์ ๊ทธ๋ค์ ํํ์ ์์๋ฐ์ต๋๋ค.
- B์ SMTP ํ์ฅ ๊ธฐ๋ฅ์ ์ด๊ฑฐํ์ธ์: PIPELINING/CHUNKING ์ฌ๋ถ๋ `EHLO` ๋ฐฐ๋๋ก ํ์ธํฉ๋๋ค; CHUNKING์ด ์์ผ๋ฉด BDATโfirst ์ก์ ์์์ ์ฑ๊ณตํ ๊ฐ๋ฅ์ฑ์ด ๋ ๋์ต๋๋ค. ์๋ชป๋ EOM๊ณผ ๊ฒฐํฉํด ์์ฉ ์ฌ๋ถ๋ฅผ ํ์งํ์ธ์.
- ํค๋๋ฅผ ์ฃผ์ํ์ธ์: smuggle๋ ๋ฉ์์ง๋ ๋ณดํต B์์ ์์ํ๋ ๋ณ๋์ Received ์ฒด์ธ์ ์์ฑํฉ๋๋ค. MAIL FROM์ด A์ IP ๊ณต๊ฐ๊ณผ ์ ๋ ฌ๋๋ฏ๋ก DMARC๋ ์ข
์ข
ํต๊ณผ๋ฉ๋๋ค.
---
## **์ฐธ๊ณ ์๋ฃ**
- [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]
> 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;">\
> 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;">
> 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>HackTricks ์ง์ํ๊ธฐ</summary>
>
> - [**๊ตฌ๋
๊ณํ**](https://github.com/sponsors/carlospolop) ํ์ธํ๊ธฐ!
> - **๐ฌ [**๋์ค์ฝ๋ ๊ทธ๋ฃน**](https://discord.gg/hRep4RUj7f) ๋๋ [**ํ
๋ ๊ทธ๋จ ๊ทธ๋ฃน**](https://t.me/peass)์ ์ฐธ์ฌํ๊ฑฐ๋ **ํธ์ํฐ** ๐ฆ [**@hacktricks_live**](https://twitter.com/hacktricks_live)**๋ฅผ ํ๋ก์ฐํ์ธ์.**
> - **[**HackTricks**](https://github.com/carlospolop/hacktricks) ๋ฐ [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.**
>
> </details>


