Ranjivost u OpenSMTPD koja omogućava daljinsko izvršavanje koda sa root privilegijama

U mail serveru koji je razvio OpenBSD projekat OpenSMTPD identifikovan kritična ranjivost (CVE-2020-7247), koji vam omogućava daljinsko izvršavanje shell komandi na serveru sa root korisničkim pravima. Ranjivost je identifikovana tokom ponovne revizije koju je sproveo Qualys Security (prethodna OpenSMTPD revizija je sprovedeno 2015. godine, a nova ranjivost je prisutna od maja 2018.). Problem eliminisan u izdanju OpenSMTPD 6.6.2. Svim korisnicima se preporučuje da odmah instaliraju ažuriranje (za OpenBSD, zakrpa se može instalirati preko syspatch).

Predlažu se dvije opcije napada. Prva opcija radi u zadanoj OpenSMTPD konfiguraciji (prihvatanje zahtjeva samo od lokalnog hosta) i omogućava vam da lokalno iskoristite problem, kada napadač može pristupiti sučelju lokalne mreže (loopback) na serveru (na primjer, na hosting sistemima) . Druga opcija se javlja kada je OpenSMTPD konfigurisan za primanje spoljnih mrežnih zahteva (poštanski server koji prihvata poštu treće strane). Istraživači su pripremili prototip eksploatacije koji uspješno radi i s verzijom OpenSMTPD uključenom u OpenBSD 6.6 i s prijenosnom verzijom za druge operativne sustave (provedeno u Debian testiranju).

Problem je uzrokovan greškom u funkciji smtp_mailaddr() koja je pozvana da provjeri ispravnost vrijednosti u poljima “MAIL FROM” i “RCPT TO” koja definiraju pošiljaoca/primatelja i prosljeđuju se tokom veze sa mail serverom. Da biste provjerili dio adrese e-pošte koji se nalazi prije simbola “@”, poziva se funkcija smtp_mailaddr()
valid_localpart(), koji prihvata (MAILADDR_ALLOWED) znakove "!#$%&'*/?^`{|}~+-=_", kako to zahtijeva RFC 5322.

U ovom slučaju, direktno izbjegavanje niza se izvodi u funkciji mda_expand_token(), koja zamjenjuje samo znakove “!#$%&’*?`{|}~” (MAILADDR_ESCAPE). Nakon toga, linija pripremljena u mda_expand_token() se koristi pri pozivanju agenta za isporuku (MDA) koristeći naredbu 'execle("/bin/sh", "/bin/sh", "-c", mda_command,...' .U slučaju postavljanja slova u mbox preko /bin/sh, pokreće se red “/usr/libexec/mail.local -f %%{mbox.from} %%{user.username}” gdje je vrijednost “% {mbox.from}” uključuje izbačene podatke iz parametra "MAIL FROM".

Suština ranjivosti je u tome da smtp_mailaddr() ima logičku grešku, zbog koje, ako se na e-mail pošalje prazan domen, funkcija vraća uspješan verifikacioni kod, čak i ako dio adrese prije “@” sadrži nevažeće znakove . Nadalje, kada priprema string, funkcija mda_expand_token() ne izbjegava sve moguće specijalne znakove ljuske, već samo specijalne znakove dozvoljene u adresi e-pošte. Dakle, da biste pokrenuli svoju naredbu, dovoljno je koristiti simbol “;” u lokalnom dijelu e-pošte. i razmak, koji nisu uključeni u skup MAILADDR_ESCAPE i nisu uklonjeni. Na primjer:

$nc 127.0.0.1 25

HELO professor.falken
POŠTA OD:
RCPT TO:
PODACI
.
PRESTANI

Nakon ove sesije, OpenSMTPD, kada se isporuči u mbox, će pokrenuti naredbu kroz shell

/usr/libexec/mail.local -f ;sleep 66; root

Istovremeno, mogućnosti napada su ograničene činjenicom da lokalni dio adrese ne može biti duži od 64 znaka, a specijalni znakovi ‘$’ i ‘|’ se zamjenjuju sa “:” prilikom escape-a. Da bismo zaobišli ovo ograničenje, koristimo činjenicu da se tijelo pisma prenosi nakon pokretanja /usr/libexec/mail.local kroz ulazni tok, tj. Manipulisanjem adresom, možete samo pokrenuti interpreter komande sh i koristiti tijelo slova kao skup instrukcija. Budući da su zaglavlja SMTP servisa naznačena na početku slova, predlaže se korištenje naredbe za čitanje u petlji da biste ih preskočili. Radni exploit izgleda otprilike ovako:

$nc 192.168.56.143 25

HELO professor.falken
POŠTA OD:
RCPT DO:<[email zaštićen]>
PODACI
#0
#1
...
#d
za i u W O P R; uradi
echo -n "($i) " && id || break
gotovo > /root/x."`id -u`.""$$"
.
PRESTANI

izvor: opennet.ru

Dodajte komentar