Pasta serverÄ«, ko izstrÄdÄja OpenBSD projekts identificÄts (CVE-2020-7247), kas ļauj attÄlinÄti izpildÄ«t Äaulas komandas serverÄ« ar root privilÄÄ£ijÄm. IevainojamÄ«ba tika atklÄta atkÄrtotas revÄ«zijas laikÄ, ko veica Qualys Security (iepriekÅ”ÄjÄ OpenSMTPD revÄ«zija). 2015. gadÄ, un jaunÄ ievainojamÄ«ba pastÄv kopÅ” 2018. gada maija). ProblÄma OpenSMTPD 6.6.2 laidienÄ. Visiem lietotÄjiem ieteicams nekavÄjoties instalÄt atjauninÄjumu (OpenBSD gadÄ«jumÄ ielÄpu var instalÄt, izmantojot syspatch).
Ir ierosinÄti divi uzbrukuma varianti. Pirmais variants darbojas ar noklusÄjuma OpenSMTPD konfigurÄciju (pieprasÄ«jumu saÅemÅ”ana tikai no localhost) un ļauj lokÄli izmantot ievainojamÄ«bu, ja uzbrucÄjam ir piekļuve lokÄlÄ tÄ«kla saskarnei (cilpas atgriezeniskajai saitei) serverÄ« (piemÄram, mitinÄÅ”anas sistÄmÄs). Otrais variants rodas, ja OpenSMTPD ir konfigurÄts ÄrÄjo tÄ«kla pieprasÄ«jumu saÅemÅ”anai (pasta serveris, kas pieÅem treÅ”o puÅ”u pastu). PÄtnieki ir sagatavojuÅ”i prototipa izmantoÅ”anu, kas veiksmÄ«gi darbojas gan ar OpenSMTPD variantu, kas iekļauts OpenBSD 6.6, gan ar portatÄ«vo versiju citÄm operÄtÄjsistÄmÄm (veikts Debian TestÄÅ”ana).
ProblÄmu rada kļūda funkcijÄ smtp_mailaddr(), kas tiek izsaukta, lai validÄtu vÄrtÄ«bas laukos "MAIL FROM" un "RCPT TO", kas definÄ sÅ«tÄ«tÄju/saÅÄmÄju un tiek pÄrsÅ«tÄ«tas savienojuma laikÄ ar pasta serveri. Lai validÄtu e-pasta adreses daļu, kas atrodas pirms simbola "@", smtp_mailaddr() izsauc Å”o funkciju.
valid_localpart(), kas uzskata rakstzÄ«mes "!#$%&'*/?^`{|}~+-=_" par derÄ«gÄm (MAILADDR_ALLOWED), kÄ to pieprasa RFC 5322.
Å ajÄ gadÄ«jumÄ tieÅ”Ä virknes aizstÄÅ”ana tiek veikta funkcijÄ mda_expand_token(), kas aizstÄj tikai rakstzÄ«mes "!#$%&'*?`{|}~" (MAILADDR_ESCAPE). PÄc tam, izsaucot piegÄdes aÄ£entu (MDA), izmantojot komandu 'execle(Ā«/bin/shĀ», Ā«/bin/shĀ», Ā«-cĀ», mda_command,ā¦', tiek izmantota funkcijÄ mda_expand_token() sagatavotÄ virkne. Ja ziÅojums tiek ievietots mbox mapÄ, izmantojot /bin/sh, tiek izpildÄ«ta rinda "/usr/libexec/mail.local -f %%{mbox.from} %%{user.username}", kur vÄrtÄ«ba "%{mbox.from}" ietver aizstÄÅ”anas datus no parametra "MAIL FROM".
IevainojamÄ«ba slÄpjas loÄ£iskÄ kļūdÄ funkcijÄ smtp_mailaddr(), kuras dÄļ funkcija atgriež veiksmÄ«gas verifikÄcijas kodu, ja e-pastÄ tiek nodots tukÅ”s domÄns, pat ja adreses daļa pirms "@" satur nederÄ«gas rakstzÄ«mes. Sagatavojot virkni, funkcija mda_expand_token() izmanto tikai tÄs rakstzÄ«mes, kas ir atļautas e-pasta adresÄs, nevis visas iespÄjamÄs Äaulas speciÄlÄs rakstzÄ«mes. TÄdÄļ, lai palaistu komandu, e-pasta lokÄlajÄ daÄ¼Ä ir jÄizmanto tikai rakstzÄ«me ";" un atstarpe, kas nav iekļautas MAILADDR_ESCAPE kopÄ un netiek izmantotas ar atsoļa rakstzÄ«mÄm. PiemÄram:
$ nc 127.0.0.1 25
HELO profesors.Falkens
VÄSTULE NO:<;sleep 66;>
SAÅ
EMT UZ:
DATU
.
QUIT
PÄc Ŕīs sesijas OpenSMTPD, piegÄdÄjot uz mbox, palaidÄ«s komandu, izmantojot Äaulu.
/usr/libexec/mail.local -f; miega 66; root
Uzbrukuma virsmu ierobežo fakts, ka adreses lokÄlÄ daļa nedrÄ«kst pÄrsniegt 64 rakstzÄ«mes, un speciÄlÄs rakstzÄ«mes '$' un '|' atsoļa laikÄ tiek aizstÄtas ar ":". Lai apietu Å”o ierobežojumu, e-pasta pamatteksts tiek nodots ievades straumÄ pÄc /usr/libexec/mail.local palaiÅ”anas. Tas nozÄ«mÄ, ka, manipulÄjot ar adresi, var palaist tikai sh komandu interpretÄtÄju un e-pasta pamattekstu var izmantot kÄ instrukciju kopu. TÄ kÄ pakalpojuma SMTP galvenes ir norÄdÄ«tas e-pasta sÄkumÄ, tiek piedÄvÄta cilpas lasīŔanas komanda, lai tÄs izlaistu. DarbojoÅ”ais izmantoÅ”anas veids izskatÄs apmÄram Å”Ädi:
$ nc 192.168.56.143 25
HELO profesors.Falkens
VÄSTULE NO:<;for i in 0 1 2 3 4 5 6 7 8 9 abcd;do read r;done;sh;exit 0;>
KVÄŖTS UZ:
DATU
#0
#1
...
#d
priekÅ” i WOPR; dari
echo -n "($i) " && id || pÄrtraukums
darīts > /root/x."`id -u`.""$$"
.
QUIT
Avots: opennet.ru
