Компания Qualys още една отдалечена критична уязвимост (CVE-2020-8794) в пощенския сървър , разработван от проекта OpenBSD. Както и установената в края на януари , новият проблем позволява отдалечено изпълнение на произволни shell команди на сървъра с права на потребител root. Уязвимостта в изданието .
Проблемът е причинен от грешка в кода, който осъществява доставката на поща до отдалечен пощенски сървър (не в кода, който обработва входящите връзки). Атаката е възможна както от страна на клиента, така и от страна на сървъра. От страна на клиента атаката е възможна в конфигурацията по подразбиране на 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. Уязвимостта също така позволява да се прочете съдържанието на файл, принадлежащ на друг потребител, ако този файл се намира в същата файлова система с каталогa /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
