Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/edera-dev/cve-tarmageddon
漏洞分析漏洞利用模糊测试二进制分析供应链安全学习与教育
GitHubedera-dev/cve-tarmageddon

cve-tarmageddon

Demonstration of CVE-2025-62518: a critical PAX extended header size override bug in tokio-tar and async Rust tar libraries, with reproduction tools and blast radius analysis.

查看仓库
194310个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
网站
分享

Ivy Astronaut

CVE-2025-62518: TAR末日

本仓库演示了 tokio-tar 及相关异步 Rust tar 库中的一个严重错误:在计算下一个文件头位置之前,未应用 PAX 扩展头中的 size 覆盖值。

错误摘要

根本原因: 处理包含 PAX 扩展头(且扩展头覆盖了文件大小)的 tar 文件时,库使用八进制的大小字段(通常为零)进行位置计算,而非 PAX 覆盖值。

影响: 这会导致解析器跳入文件内容,并将其误认为 tar 文件头,从而提取错误的文件。

已知受影响的库:

  • async-tar https://github.com/dignifiedquire/async-tar
  • tokio-tar https://github.com/vorot93/tokio-tar
  • krata-tokio-tar https://github.com/edera-dev/tokio-tar
  • astral-tokio-tar https://github.com/astral-sh/tokio-tar

快速开始

root@kitploit:~
# 依赖:CMake、Rust/Cargo、C++ 编译器、系统 tar 命令

cmake -S . -B build
cmake --build build --target generate_report

这将:

  1. 构建所有 C++ 和 Rust 工具
  2. 生成一个再现错误的 tar 文件
  3. 运行比较,展示该错误
  4. 在 build/output/ 中生成详细报告

项目结构

root@kitploit:~
├── disclosure/               # 安全披露文档树
│   └── blast_radius/         # 依赖 tokio-tar 变体的项目记录
├── repro_generator/          # C++ 工具,用于生成再现错误的 tar 文件
├── tar-bug-detector/         # Rust 工具,比较各 tar 库的行为
├── tarwalk/                  # 正确的 C++ tar 解析器
│   ├── tarwalk.cpp           # 正确处理 PAX
│   └── tarwalk_bad.cpp       # 复现相同错误
├── CMakeLists.txt            # 构建系统
├── generate_report.cmake     # 报告生成
└── README.md                 # 本文件

错误详情

正常的 TAR 处理

root@kitploit:~
Header -> Content (size from octal field) -> Next Header

带 PAX 扩展头的 TAR 处理(正确)

root@kitploit:~
PAX Header (size=1024) -> File Header (octal size=0) -> Content (1024 bytes) -> Next Header

带 PAX 扩展头的 TAR 处理(有错误)

root@kitploit:~
PAX Header (size=1024) -> File Header (octal size=0) -> Content (0 bytes) -> WRONG POSITION
                                                                              ↓
                                                                    Reading content as headers!

现实中的触发场景

Docker save 创建的 tar 文件包含:

  • 需要 PAX 扩展头的大层(>8GB)
  • 层内容以文件系统 tar 头(etc/、usr/)开头
  • 当错误触发时,解析器提取的是文件系统内容而非镜像清单

生成的再现文件

  • pax_bug_compact.tar - 最小化再现案例

预期结果

正确库(GNU tar、同步 tar crate):

root@kitploit:~
normal.txt -> blob.bin -> marker.txt

有错误的库(tokio-tar):

root@kitploit:~
normal.txt -> blob.bin -> INNER_FILE -> marker.txt

出现 INNER_FILE 即表明存在错误 —— 库跳入 blob.bin 内容中,将伪 tar 头误认为真实条目。

技术细节

修复方法是在位置计算之前应用 PAX 覆盖值:

root@kitploit:~
// 读取文件头
let mut file_size = header.size();

// 在计算下一个位置之前,应用 PAX 覆盖值
if let Some(pax_size) = pending_pax.get("size") {
    file_size = pax_size.parse().unwrap();
}

// 现在使用有效大小计算下一个文件头的位置
let next_pos = current_pos + 512 + pad_to_512(file_size);

许可证

本再现代码仅供安全研究和负责任披露使用。

原始源代码许可证见 COPYING 文件。

下载工具