Ktor XML XXE漏洞复现(CVE-2023-45612)
研究作者: Luka Andghuladze
项目: JetBrains Ktor安全研究实习 2025-2026
Ktor框架2.3.5之前版本存在XML外部实体(XXE)漏洞。该漏洞存在于配置了XML序列化默认设置的ContentNegotiation插件中。
前提条件
- Java 11或更高版本
- Gradle 8.0+
- Python 3.7+
验证安装:
|
|
设置和安装
进入项目目录:
|
|
安装Python依赖:
|
|
构建项目:
|
|
运行演示
终端1 - 启动漏洞服务器:
|
|
等待显示:Responding at http://0.0.0.0:8080
终端2 - 运行漏洞利用测试:
|
|
脚本测试四种场景:
- 正常XML请求(基线)
- 读取/etc/hostname的XXE攻击
- 读取/etc/passwd的XXE攻击
- 通过XXE进行SSRF攻击
项目结构
|
|
技术细节
漏洞概述
CVE-2023-45612影响Ktor 2.3.5之前版本。ContentNegotiation插件中的默认XML解析器配置允许:
- DTD处理
- 外部实体解析
- 无限制实体扩展
这使得攻击者能够:
- 读取服务器上的任意文件
- 执行服务器端请求伪造(SSRF)
- 执行拒绝服务攻击
- 在特定配置下可能实现远程代码执行
漏洞代码
服务器使用默认XML配置:
|
|
XML攻击载荷示例
|
|
预期结果
在漏洞服务器上(Ktor 2.3.4)
|
|
概念验证截图
成功利用的可视证据:
服务器运行:
漏洞利用测试结果(第一部分):
漏洞利用测试结果(第二部分):
实现说明
ServerApplication.kt - 实现了一个Ktor服务器,包含:
- 配置了XML的ContentNegotiation插件
- 接受XML数据的POST /api/process端点
- 响应反射使XXE利用可见
exploit_tester.py - 自动化测试脚本,功能包括:
- 验证服务器连接性
- 测试基线功能
- 尝试多种XXE攻击向量
- 生成漏洞报告
RequestModel.kt - 使用kotlinx.serialization进行XML反序列化的数据类
手动测试
也可以使用curl进行手动测试:
|
|
防护指南
为防止Ktor应用中的XXE漏洞:
- 更新到Ktor 2.3.5或更高版本
- 配置XML解析器禁用外部实体
- 验证和清理所有XML输入
- 尽可能使用JSON替代XML
- 实施适当的输入验证
- 应用安全头部和速率限制
- 定期进行安全测试和代码审查
作者
Luka Andghuladze
本研究作为JetBrains Ktor安全研究实习(2025-2026)申请的一部分进行。