Прапатчыў Exim – прапапатч яшчэ раз. Свежае Remote Command Execution у Exim 4.92 у адзін запыт

Прапатчыў Exim – прапапатч яшчэ раз. Свежае Remote Command Execution у Exim 4.92 у адзін запыт

Зусім нядаўна, у пачатку лета, з'явіліся масавыя заклікі да абнаўлення Exim да версіі 4.92 з-за ўразлівасці CVE-2019-10149 (Тэрмінова абнаўляйце exim да 4.92 - ідзе актыўнае заражэнне / Хабр). А на днях высветлілася, што шкоднас Sustes вырашыў скарыстацца гэтай уразлівасцю.

Цяпер усе экстрана абнавіліся могуць зноў «парадавацца»: 21 ліпеня 2019 г. даследчык Zerons выявіў крытычную ўразлівасць у Exim Mail Transfer agent (MTA) пры выкарыстанні TLS для версій ад 4.80 да 4.92.1 уключна, якая дазваляе выдалена выконваць код з прывілеяванымі правамі (CVE-2019-15846).

ўразлівасць

Уразлівасць прысутнічае пры выкарыстанні бібліятэк як GnuTLS, так і OpenSSL пры ўсталёўцы абароненага TLS-злучэнні.

Па словах распрацоўніка Heiko Schlittermann, файл канфігурацыі ў Exim па змаўчанні не выкарыстоўвае TLS, аднак шматлікія дыстрыбутывы падчас усталёўкі ствараюць неабходныя сертыфікаты і ўключаюць абароненае злучэнне. Таксама навейшыя версіі Exim усталёўваюць опцыю tls_advertise_hosts=* і генеруюць неабходныя сертыфікаты.

depends on the configuration. Найбольш бяспечна, што можа быць памылкова, але Exim неабходна certifikovat+key для працы як TLS-сервер. Probably Distros стварае Cert during setup. Newer Exims мае tls_advertise_hosts option defaulting to «*» і стварае выпадкова зацверджаны certificate, калі не з'яўляецца выкананым.

Сама ж уразлівасць складаецца ў некарэктнай апрацоўцы SNI (Server Name Indication, тэхналогія, уведзеная ў 2003 у RFC 3546 для запыту кліентам карэктнага сертыфіката для даменнага імя, Распаўсюджванне стандарту TLS SNI / Блог кампаніі WEBO Group / Хабр) у ходзе TLS-поціску рукі. Зламысніку дастаткова адправіць SNI, які сканчаецца бэкслешам ("") і нул-знакам (" ").

Даследнікі з кампаніі Qualys выявілі баг у функцыі string_printing(tls_in.sni), які складаецца ў некарэктным экранаванні "". У выніку адбываецца запіс зваротнага слеша ў неэкранаваным выглядзе ў файл загалоўкаў print spool. Далей гэты файл з прывілеяванымі правамі счытваецца функцыяй spool_read_header(), што вядзе да перапаўнення кучы (heap overflow).

Варта адзначыць, што на дадзены момант распрацоўнікі Exim стварылі PoC уразлівасці з выкананнем каманд на выдаленым уразлівым серверы, але ў публічным доступе ён пакуль адсутнічае. У сілу прастаты эксплуатацыі бага гэта ўсяго толькі пытанне часу, прычым даволі кароткага.

З больш дэталёвым даследаваннем кампаніі Qualys можна азнаёміцца тут.

Прапатчыў Exim – прапапатч яшчэ раз. Свежае Remote Command Execution у Exim 4.92 у адзін запыт

Выкарыстанне SNI у TLS

Колькасць патэнцыйна ўразлівых публічных сервераў

Па статыстыцы буйнога хостынг-правайдэра E-Soft Inc на 1 верасня, на арандаваных серверах версія 4.92 выкарыстоўваецца ў больш за 70% хастоў.

версія
Колькасць сервераў
Адсотак

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%

Іншыя версіі
25568
5.04%

Статыстыка кампаніі E-Soft Inc

Калі звярнуцца да пошукавай сістэмы Shodan, то з 5,250,000 у базе сервераў:

  • каля 3,500,000 выкарыстоўваюць Exim 4.92 (каля 1,380,000 з выкарыстаннем SSL/TLS);
  • больш за 74,000 выкарыстоўваюць 4.92.1 (каля 25,000 з выкарыстаннем SSL/TLS).

Такім чынам, публічна вядомых і даступных Exim патэнцыйна ўразлівых сервераў налічваецца парадку 1.5 млн.

Прапатчыў Exim – прапапатч яшчэ раз. Свежае Remote Command Execution у Exim 4.92 у адзін запыт

Пошук Exim-сервераў у Shodan

абарона

  • Самы просты, але не рэкамендуемы варыянт - не выкарыстоўваць TLS, што прывядзе да перасылкі паштовых паведамленняў у адкрытым выглядзе.
  • Больш пераважным для пазбягання эксплуатацыі ўразлівасці будзе абнаўленне да версіі Exim Internet Mailer 4.92.2.
  • У выпадку немагчымасці абнаўлення ці ўсталёўкі прапатчанай версіі можна задаць ACL у канфігурацыі Exim для опцыі acl_smtp_mail з наступнымі правіламі:
    # 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}}}}

Крыніца: habr.com

Дадаць каментар