
Эксплойт PoC для CVE-2022-29968 от Joseph Ravichandran и Michael Wang
Эксплойт Proof-of-concept для CVE-2022-29968 (неинициализированная память) в ядре Linux, а именно в системе io_uring.
Сбой был обнаружен с помощью Syzkaller. Проанализировали сбой Джозеф Равичандран и Майкл Ван. Эксплойт написан Джозефом Равичандраном.
Мы нашли и сообщили об этой ошибке в рамках финального проекта по курсу 6.858 в MIT, весна 2022.
Любое ядро после 3e08773c3841 ("block: switch polling to be bio based") и до 32452a3eb8b6 ("io_uring: fix uninitialized field in rw io_kiocb") должно быть уязвимо к этому.
Документ, который мы представили для финального проекта 6.858
/dev/sr0 должен быть доступен для чтения непривилегированному пользователю.Протестировано в установке Busybox (без KVM) с 128 МБ ОЗУ:
$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
# Монтируем необходимые файловые системы (очень полезно, если вы используете ftrace/отладочные функции)
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
# Настройка прав доступа для sr0
chmod -R 0777 /dev/sr0
# Создаём временный файл (используется старым подходом userfaultfd)
# Не требуется для публичного эксплойта
touch /tmp/test
# Переключаемся на непривилегированного пользователя
su attacker
# Запускаем оболочку
exec sh
# Запускаем оболочку (теперь ^C работает)
#exec setsid sh -c 'exec sh </dev/ttyS0 >/dev/ttyS0 2>&1'
Наш etc/passwd содержит непривилегированного пользователя (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