
CVE-2022-29968(未初期化メモリ)の概念実証エクスプロイト。Linuxカーネル、特にio_uringシステムにおける脆弱性です。
クラッシュはSyzkallerによって発見されました。クラッシュはJoseph RavichandranとMichael Wangによって分析されました。エクスプロイトはJoseph Ravichandranによって作成されました。
このバグは、6.858 at MIT, Spring 2022の最終プロジェクトの一環として発見・報告しました。
この脆弱性は、3e08773c3841 ("block: ポーリングをbioベースに切り替え")以降で、32452a3eb8b6 ("io_uring: rw io_kiocbの未初期化フィールドを修正")より前のカーネルが影響を受けます。
/dev/sr0 は非特権ユーザーが読み取り可能である必要があります。128MのRAMを搭載したBusyboxインストール(KVMなし)でテスト済み:
$QEMU -m 128M -kernel $KERNEL -initrd $INITRD -nographic -append "console=ttyS0 nokaslr no_hash_pointers ftrace_dump_on_oops"
initramfs init:
#!/bin/sh
/bin/busybox --install -s
# Mount required file systems (very useful if you are using ftrace/ debug features)
mount -t proc none /proc
mount -t sysfs sysfs /sys
mount -t tracefs nodev /sys/kernel/tracing
mount -t debugfs none /sys/kernel/debug
mkdir -p /tmp && mount -t tmpfs tmpfs /tmp
mount -t devtmpfs none /dev
# Setup permissions for sr0
chmod -R 0777 /dev/sr0
# Create a temp file (used by the old userfaultfd approach)
# Not needed for the public exploit
touch /tmp/test
# Switch to non-root user
su attacker
# Run shell
exec sh
# Run shell (except ^C now works)
#exec setsid sh -c 'exec sh </dev/ttyS0 >/dev/ttyS0 2>&1'
私たちのetc/passwdには非rootユーザー(attacker)とrootユーザー(root)が含まれています:
attacker:x:1000:1000:Linux User,,,:/home/attacker:/bin/sh
root:x:0:0:root:/tmp:/bin/sh
カーネルはmake defconfigでx86_64用にコンパイルされ、追加のトレース/デバッグ機能が有効になっています。
makeでコンパイル./spray./exploit