Pagkahuyang sa OpenSMTPD nga nagtugot sa remote code execution nga adunay mga pribilehiyo sa gamut

Sa mail server nga gihimo sa proyekto sa OpenBSD OpenSMTPD giila kritikal nga kahuyang (CVE-2020-7247), nga nagtugot kanimo sa layo nga pagpatuman sa mga command sa shell sa server nga adunay mga katungod sa gamut nga tiggamit. Ang kahuyang giila atol sa re-audit nga gihimo sa Qualys Security (kaniadto OpenSMTPD audit gipatuman sa 2015, ug ang bag-ong kahuyangan anaa na sukad Mayo 2018). Problema giwagtang sa OpenSMTPD 6.6.2 release. Ang tanan nga mga tiggamit girekomenda nga i-install dayon ang update (alang sa OpenBSD, ang patch mahimong ma-install pinaagi sa syspatch).

Duha ka kapilian sa pag-atake ang gisugyot. Ang una nga kapilian nagtrabaho sa default nga pag-configure sa OpenSMTPD (pagdawat mga hangyo lamang gikan sa localhost) ug gitugotan ka nga pahimuslan ang problema sa lokal, kung ang tig-atake maka-access sa interface sa lokal nga network (loopback) sa server (pananglitan, sa mga sistema sa pag-host) . Ang ikaduha nga kapilian mahitabo kung ang OpenSMTPD gi-configure aron makadawat sa mga hangyo sa gawas sa network (usa ka mail server nga modawat sa ikatulo nga partido nga mail). Ang mga tigdukiduki nag-andam ug usa ka prototype sa usa ka pagpahimulos nga malampuson nga nagtrabaho pareho sa OpenSMTPD nga bersyon nga gilakip sa OpenBSD 6.6 ug adunay usa ka portable nga bersyon alang sa ubang mga operating system (gipahigayon sa Debian Testing).

Ang problema tungod sa usa ka sayup sa smtp_mailaddr() function, nga gitawag aron masusi ang pagkahusto sa mga kantidad sa "MAIL FROM" ug "RCPT TO" nga mga natad nga nagpaila sa nagpadala / nakadawat ug gipasa sa panahon sa koneksyon uban sa mail server. Aron masusi ang bahin sa email address nga moabut sa wala pa ang "@" nga simbolo, ang smtp_mailaddr() function gitawag
valid_localpart(), nga midawat (MAILADDR_ALLOWED) sa mga karakter nga "!#$%&'*/?^`{|}~+-=_", sumala sa gikinahanglan sa RFC 5322.

Niini nga kaso, ang direktang pag-eskapo sa hilo gihimo sa mda_expand_token() function, nga nagpuli lamang sa mga karakter nga “!#$%&’*?`{|}~” (MAILADDR_ESCAPE). Pagkahuman, ang linya nga giandam sa mda_expand_token() gigamit sa pagtawag sa ahente sa pagpadala (MDA) gamit ang command 'execle("/bin/sh", "/bin/sh", "-c", mda_command,...' . Sa kaso sa pagbutang sa mga letra sa mbox pinaagi sa /bin/sh, ang linya nga “/usr/libexec/mail.local -f %%{mbox.from} %%{user.username}” gilusad, diin ang bili “% {mbox.from}” naglakip sa naka-eskapo nga datos gikan sa parameter nga "MAIL FROM".

Ang esensya sa pagkahuyang mao nga ang smtp_mailaddr() adunay usa ka lohikal nga sayup, tungod niini, kung ang usa ka walay sulod nga domain ipadala sa email, ang function nagbalik usa ka malampuson nga verification code, bisan kung ang bahin sa adres sa wala pa ang "@" adunay dili balido nga mga karakter. . Dugang pa, kung nag-andam ug usa ka hilo, ang function sa mda_expand_token() dili makaikyas sa tanan nga posible nga mga espesyal nga karakter sa shell, apan mga espesyal nga karakter lamang ang gitugotan sa email address. Sa ingon, aron madala ang imong mando, igo na nga gamiton ang simbolo nga ";" sa lokal nga bahin sa email. ug luna, nga wala maapil sa MAILADDR_ESCAPE set ug dili makaikyas. Pananglitan:

$nc 127.0.0.1 25

HELO propesor.falken
MAIL GIKAN:
RCPT SA:
data
.
MOHUNONG

Pagkahuman niini nga sesyon, ang OpenSMTPD, kung ipadala sa mbox, maglansad sa mando pinaagi sa kabhang

/usr/libexec/mail.local -f ;pagkatulog 66; gamut

Sa samang higayon, ang mga posibilidad sa pag-atake limitado sa kamatuoran nga ang lokal nga bahin sa adres dili molapas sa 64 ka karakter, ug ang mga espesyal nga karakter nga ‘$’ ug ‘|’ gipulihan ug “:” sa dihang moikyas. Aron malaktawan kini nga limitasyon, gigamit namon ang kamatuoran nga ang lawas sa sulat gipasa pagkahuman sa pagdagan /usr/libexec/mail.local pinaagi sa input stream, i.e. Pinaagi sa pagmaniobra sa adres, mahimo ka lang maglansad sa sh command interpreter ug gamiton ang lawas sa sulat ingon usa ka hugpong sa mga panudlo. Tungod kay ang mga ulohan sa SMTP sa serbisyo gipakita sa sinugdanan sa sulat, gisugyot nga gamiton ang read command sa usa ka loop aron laktawan kini. Ang usa ka nagtrabaho nga pagpahimulos ingon niini:

$nc 192.168.56.143 25

HELO propesor.falken
MAIL GIKAN:
RCPT SA:<[protektado sa email]>
data
#0
#1
...
#d
kay i sa W O P R; buhata
echo -n "($i) " && id || buwag
nahuman > /root/x."`id -u`.""$$"
.
MOHUNONG

Source: opennet.ru

Idugang sa usa ka comment