
Expérimentation de fiabilité d'exploit en C++ pour une vulnérabilité du noyau FreeBSD de la PlayStation 5, avec des builds du noyau en VM et une configuration de débogage à distance GDB.
Le bug a été découvert début décembre 2020, non par moi, mais par un génie qui a passé 15 minutes sur fbsd et l'a immédiatement repéré 🙇♂️. Cette implémentation c++ a été réalisée en expérimentant l'amélioration de la fiabilité de l'exploit après que le noyau de la ps5 a ajouté des fonctionnalités de randomisation du tas.
wget http://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/VM-IMAGES/11.0-RELEASE/amd64/Latest/FreeBSD-11.0-RELEASE-amd64.vhd.xz
dans la vm : adduser, ajoutez sshd_enable="YES" à /etc/rc.conf, puis /etc/rc.d/sshd start
compilez SUR LA VM car le système de compilation de freebsd est incompatible avec les systèmes non-freebsd (la compatibilité a été activée vers fbsd 12/13 mais nous avons besoin de 11...)
voir https://docs.freebsd.org/en/books/handbook/kernelconfig/ ou simplement :
cd /usr/src/sys/amd64/conf
cp GENERIC /root/CONFIG
ln -s /root/CONFIG
éditez CONFIG pour supprimer options DDB et ajouter options GDB
compilez et installez :
cd /src/src
make buildkernel KERNCONF=CONFIG
make installkernel KERNCONF=CONFIG
reboot
copiez /usr/obj/usr/src/sys/CONFIG/kernel.debug hors de la vm pour l'utiliser avec gdb.
git clone -b releng/11.0 https://github.com/freebsd/freebsd.git
téléchargez la dernière version depuis https://ftp.gnu.org/gnu/gdb/ et décompressez-la
mkdir build
cd build
../configure --disable-binutils --disable-ld --disable-gold --disable-gas --disable-sim --disable-gprof --target=x86_64-unknown-freebsd
make -j64
utilisez https://github.com/cyrus-and/gdb-dashboard
set substitute-path /usr/src /home/shawn/freebsd
set disassembly-flavor intel
file kernel.debug
target remote /tmp/fbsd11
https://github.com/weltling/convey https://github.com/jstarks/npiperelay
#!/bin/sh
GDB_PATH=/home/shawn/gdb-10.1/build/gdb
PATH=$GDB_PATH:$PATH
gdb --data-directory=/home/shawn/gdb-10.1/build/gdb/data-directory
dans la vm :
sysctl debug.kdb.enter=1