Zakrpan Exim - ponovno zakrpi. Svježe daljinsko izvršenje naredbi u Eximu 4.92 u jednom zahtjevu

Zakrpan Exim - ponovno zakrpi. Svježe daljinsko izvršenje naredbi u Eximu 4.92 u jednom zahtjevu

U novije vrijeme, početkom ljeta, bilo je rasprostranjenih poziva da se Exim ažurira na verziju 4.92 zbog CVE-2019-10149 ranjivosti (Hitno ažurirajte Exim na 4.92 - postoji aktivna infekcija / Sudo Null IT vijesti). A nedavno se pokazalo da je zlonamjerni softver Sustes odlučio iskoristiti ovu ranjivost.

Sada se svi oni koji su hitno ažurirali mogu ponovno "radovati": 21. srpnja 2019. istraživač Zerons otkrio je kritičnu ranjivost u Exim Mail Transfer agent (MTA) kada se koristi TLS za verzije iz 4.80 4.92.1 se uključivo, dopuštajući daljinski izvršavanje koda s povlaštenim pravima (CVE-2019-15846).

Ranjivost

Ranjivost je prisutna kada se koriste i GnuTLS i OpenSSL biblioteke prilikom uspostavljanja sigurne TLS veze.

Prema programeru Heiku Schlittermannu, konfiguracijska datoteka u Eximu ne koristi TLS prema zadanim postavkama, ali mnoge distribucije stvaraju potrebne certifikate tijekom instalacije i omogućuju sigurnu vezu. Također novije verzije Exima instaliraju opciju tls_advertise_hosts=* i generirati potrebne certifikate.

ovisi o konfiguraciji. Većina distribucija ga omogućuje prema zadanim postavkama, ali Exim treba certifikat+ključ da bi radio kao TLS poslužitelj. Vjerojatno Distros stvara Cert tijekom postavljanja. Noviji Exims imaju tls_advertise_hosts opciju koja je zadana na "*" i stvaraju samopotpisani certifikat, ako nijedan nije osiguran.

Sama ranjivost leži u netočnoj obradi SNI-ja (indikacija naziva poslužitelja, tehnologija uvedena 2003. u RFC 3546 za klijenta da zatraži točan certifikat za naziv domene, Distribucija TLS SNI standarda / WEBO Group Blog / Sudo Null IT News) tijekom TLS rukovanja. Napadač samo treba poslati SNI koji završava obrnutom kosom crtom ("") i null znakom (" ").

Istraživači iz Qualysa otkrili su grešku u funkciji string_printing(tls_in.sni), koja uključuje netočno izbjegavanje "". Kao rezultat toga, obrnuta kosa crta upisuje se bez izlaza u datoteku zaglavlja ispisa. Ovu datoteku zatim s povlaštenim pravima čita funkcija spool_read_header(), što dovodi do prelijevanja hrpe.

Vrijedno je napomenuti da su programeri Exima u ovom trenutku stvorili PoC ranjivosti s izvršavanjem naredbi na udaljenom ranjivom poslužitelju, ali još nije javno dostupan. Zbog lakoće eksploatacije buga, samo je pitanje vremena, i to prilično kratkog.

Detaljniju studiju Qualysa možete pronaći здесь.

Zakrpan Exim - ponovno zakrpi. Svježe daljinsko izvršenje naredbi u Eximu 4.92 u jednom zahtjevu

Korištenje SNI u TLS-u

Broj potencijalno ranjivih javnih poslužitelja

Prema statistici velikog hosting providera E-Soft Inc od 1. rujna na iznajmljenim serverima verzija 4.92 koristi se u više od 70% hostova.

Verzija
Broj poslužitelja
Posto

4.92.1
6471
1.28%

4.92
376436
74.22%

4.91
58179
11.47%

4.9
5732
1.13%

4.89
10700
2.11%

4.87
14177
2.80%

4.84
9937
1.96%

Ostale verzije
25568
5.04%

Statistika tvrtke E-Soft Inc

Ako koristite tražilicu Šodan, zatim od 5,250,000 u bazi podataka poslužitelja:

  • oko 3,500,000 koristi Exim 4.92 (oko 1,380,000 koristi SSL/TLS);
  • preko 74,000 4.92.1 koristi 25,000 (oko XNUMX XNUMX koristi SSL/TLS).

Dakle, javno poznati i dostupni Exim potencijalno ranjivi poslužitelji broje oko 1.5 milijuna.

Zakrpan Exim - ponovno zakrpi. Svježe daljinsko izvršenje naredbi u Eximu 4.92 u jednom zahtjevu

Potražite Exim poslužitelje u Shodanu

zaštita

  • Najjednostavnija, ali ne preporučljiva opcija je ne koristiti TLS, što će rezultirati prosljeđivanjem poruka e-pošte u čistom obliku.
  • Kako biste izbjegli iskorištavanje ranjivosti, bilo bi bolje ažurirati na verziju Exim Internet Mailer 4.92.2.
  • Ako je nemoguće ažurirati ili instalirati zakrpanu verziju, možete postaviti ACL u Exim konfiguraciji za opciju acl_smtp_mail sa sljedećim pravilima:
    # to be prepended to your mail acl (the ACL referenced
    # by the acl_smtp_mail main config option)
    deny    condition = ${if eq{}{${substr{-1}{1}{$tls_in_sni}}}}
    deny    condition = ${if eq{}{${substr{-1}{1}{$tls_in_peerdn}}}}

Izvor: www.habr.com

Dodajte komentar