Уязвимости Π² OpenSMTPD, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎ ΠΈ локально ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²Π° root

Компания Qualys выявила Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Ρƒ ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΡƒΡŽ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ (CVE-2020-8794) Π² ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠΌ сСрвСрС OpenSMTPD, Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ OpenBSD. Как ΠΈ выявлСнная Π² ΠΊΠΎΠ½Ρ†Π΅ января ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ, новая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π΄Π°Ρ‘Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ shell Π½Π° сСрвСрС с ΠΏΡ€Π°Π²Π°ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ root. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ устранСна Π² выпускС OpenSMTPD 6.6.4p1.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²Ρ‹Π·Π²Π°Π½Π° ошибкой Π² ΠΊΠΎΠ΄Π΅, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰Π΅ΠΌ доставку ΠΏΠΎΡ‡Ρ‚Ρ‹ Π½Π° ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ сСрвСр (Π½Π΅ Π² ΠΊΠΎΠ΄Π΅, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ входящиС соСдинСния). Атака Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΠΊΠ°ΠΊ Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Ρ‚Π°ΠΊ ΠΈ Π½Π° сторонС сСрвСра. На сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π°Ρ‚Π°ΠΊΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ OpenSMTPD ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ OpenSMTPD ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ запросы Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ сСтСвом интСрфСйсС (localhost) ΠΈ отправляСт ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Π΅ сообщСния Π½Π° внСшниС сСрвСры. Для эксплуатации уязвимости достаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² процСссС доставки письма OpenSMTPD установил сСанс с ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΌ сСрвСром, ΠΏΠΎΠ΄ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰Π΅ΠΌΡƒ, ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΎΠ³ Π²ΠΊΠ»ΠΈΠ½ΠΈΡ‚ΡŒΡΡ Π² соСдинСниС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (MITM ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² Ρ…ΠΎΠ΄Π΅ Π°Ρ‚Π°ΠΊ Ρ‡Π΅Ρ€Π΅Π· DNS ΠΈΠ»ΠΈ BGP).

Для Π°Ρ‚Π°ΠΊΠΈ Π½Π° сторонС сСрвСра Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ OpenSMTPD Π±Ρ‹Π» настроСн Π½Π° ΠΏΡ€ΠΈΡ‘ΠΌ Π²Π½Π΅ΡˆΠ½ΠΈΡ… сСтСвых запросов ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… сСрвСров ΠΈΠ»ΠΈ обслуТивал сторонниС сСрвисы, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ запрос Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ email (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ„ΠΎΡ€ΠΌΡ‹ подтвСрТдСния адрСса Π½Π° сайтах). НапримСр, Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒΡΡ с сСрвСром OpenSMTPD ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ письмо (Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ ΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎΠΉ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ письма с ΠΊΠΎΠ΄ΠΎΠΌ ошибки (bounce) Π½Π° сСрвСр Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰Π΅Π³ΠΎ. Π—Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΡΠΏΠ»ΡƒΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° OpenSMTPD ΠΏΠΎΠ΄ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒΡΡ для доставки увСдомлСния Π½Π° сСрвСр Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰Π΅Π³ΠΎ. Π’Π½Π΅Π΄Ρ€Ρ‘Π½Π½Ρ‹Π΅ Π² Ρ…ΠΎΠ΄Π΅ Π°Ρ‚Π°ΠΊΠΈ shell-ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся с ΠΏΡ€Π°Π²Π°ΠΌΠΈ root ΠΏΡ€ΠΈ пСрСзапускС OpenSMTPD, поэтому Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠΉ для завСрСния Π°Ρ‚Π°ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ пСрСзапуска OpenSMTPD ΠΈΠ»ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΡ€Π°Ρ… OpenSMTPD.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° присутствуСт Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ mta_io() Π² ΠΊΠΎΠ΄Π΅ для Ρ€Π°Π·Π±ΠΎΡ€Π° многострочного ΠΎΡ‚Π²Π΅Ρ‚Π°, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΌ сСрвСром послС установки соСдинСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, «250-ENHANCEDSTATUSCODES» ΠΈ «250 HELP»). Π’ OpenSMTPD рассчитано, Ρ‡Ρ‚ΠΎ пСрвая строка Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ‚Ρ€Ρ‘Ρ…Π·Π½Π°Ρ‡Π½ΠΎΠ΅ число ΠΈ тСкст, Ρ€Π°Π·Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ символом «-«, Π° вторая строка Ρ‚Ρ€Ρ‘Ρ…Π·Π½Π°Ρ‡Π½ΠΎΠ΅ число ΠΈ тСкст, Ρ€Π°Π·Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠΌ. Если Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ строкС послС Ρ‚Ρ€Ρ‘Ρ…Π·Π½Π°Ρ‡Π½ΠΎΠ³ΠΎ числа Π½Π΅ слСдуСт ΠΏΡ€ΠΎΠ±Π΅Π» ΠΈ тСкст, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для опрСдСлСния тСкста, устанавливаСтся Π½Π° Π±Π°ΠΉΡ‚, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π·Π° символом ‘\0’ ΠΈ прСдпринимаСтся ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° копирования Π² Π±ΡƒΡ„Π΅Ρ€ Π΄Π°Π½Π½Ρ‹Ρ…, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… послС ΠΊΠΎΠ½Ρ†Π° строки.

По ΠΏΡ€ΠΎΡΡŒΠ±Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° OpenBSD публикация Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ ΠΎΠ± эксплуатации уязвимости ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π° Π΄ΠΎ 26 фСвраля, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ свои систСмы. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° присутствуСт Π² ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅ с дСкабря 2015 Π³ΠΎΠ΄Π°, Π½ΠΎ эксплуатация Π΄ΠΎ выполнСния ΠΊΠΎΠ΄Π° с ΠΏΡ€Π°Π²Π°ΠΌΠΈ root Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° с мая 2018 Π³ΠΎΠ΄Π°. Π˜ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ эксплоита, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ протСстирован Π² сборках OpenSMTPD для OpenBSD 6.6, OpenBSD 5.9, Debian 10, Debian 11 (testing) ΠΈ Fedora 31.

Π’ OpenSMTPD Ρ‚Π°ΠΊΠΆΠ΅ выявлСна Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Π° ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ (CVE-2020-8793), которая позволяСт Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку любого Ρ„Π°ΠΉΠ»Π° Π² систСмС. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку /etc/master.passwd, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ размСщаСтся Ρ…ΡΡˆ пароля ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ root. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ позволяСт ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ всё содСрТимоС Ρ„Π°ΠΉΠ»Π°, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, Ссли этот Ρ„Π°ΠΉΠ» находится Π² ΠΎΠ΄Π½ΠΎΠΉ Π€Π‘ с ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ /var/spool/smtpd/. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ эксплуатируСма Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… дистрибутивах Linux, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ /proc/sys/fs/protected_hardlinks выставлСно Π² 1.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° являСтся слСдствиСм Π½Π΅ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ устранСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΎΠ·Π²ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π² процСссС Π°ΡƒΠ΄ΠΈΡ‚Π°, ΠΏΡ€ΠΎΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ Qualys Π² 2015 Π³ΠΎΠ΄Ρƒ. ΠΡ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ выполнСния своСго ΠΊΠΎΠ΄Π° с ΠΏΡ€Π°Π²Π°ΠΌΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹ «_smtpq», выставив ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ «PATH=.» ΠΈ размСстив Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ скрипт с ΠΈΠΌΠ΅Π½Π΅ΠΌ makemap (ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° smtpctl запускаСт makemap Π±Π΅Π· явного указания ΠΏΡƒΡ‚ΠΈ). ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ² доступ ΠΊ Π³Ρ€ΡƒΠΏΠΏΠ΅ «_smtpq» Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠΉ Π·Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ состояниС Π³ΠΎΠ½ΠΊΠΈ (ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ большой Ρ„Π°ΠΉΠ» Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ offline ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ сигнал SIGSTOP) ΠΈ, Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΏΠΎΠ΄ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ offline Π½Π° ΠΆΡ‘ΡΡ‚ΠΊΡƒΡŽ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ссылку, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„Π°ΠΉΠ», содСрТимоС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Π² Fedora 31 ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ позволяСт сразу ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹ root, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ процСсс smtpctl снабТён Ρ„Π»Π°Π³ΠΎΠΌ setgid root, вмСсто setgid smtpq. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ² доступ ΠΊ Π³Ρ€ΡƒΠΏΠΏΠ΅ root ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ содСрТимоС /var/lib/sss/mc/passwd ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ root-доступ Π² систСмС.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru