Token导航 LogoToken导航TokenDH.com
研究检索需要联网github未标认证来源可访问许可证需确认审计异常

java-xxe-auditJava XXE 审核

Agent Skill

用于辅助 Java 项目开发、面向对象设计、Spring 生态、Maven 或 Gradle 依赖和后端工程实践。它适合让 Agent 分析类结构、设计接口、整理服务分层、生成测试或检查常见代码坏味道。使用时需要结合项目已有架构、包结构和依赖版本,不应只按通用教程改代码;涉及数据库、事务、并发或框架配置时,应先确认运行环境和回归测试范围。

总安装

549

周安装

22

GitHub Stars

632

下载量

178
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:java-xxe-audit(Java XXE 审核)
来源仓库:https://github.com/ruoji6/java-audit-skills
仓库路径:skills/java-xxe-audit
安装命令:
npx skills add https://github.com/ruoji6/java-audit-skills --skill java-xxe-audit
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/ruoji6/java-audit-skills --skill java-xxe-audit

简介

专门审计 Java 应用中 XML 外部实体注入(XXE)相关风险。

  • 适用于 Spring Web 服务和涉及 XML 解析的后端模块检查。
  • 使用时应关注输入处理逻辑与第三方库版本是否启用安全配置。
  • 建议配合静态分析与动态测试验证修复效果。java-xxe-audit 属于研究检索类 Skill,可作为该场景下的辅助能力补充。
  • 安装方式:从开源仓库获取,使用前请核实其适用性与维护状态。

SKILL.md

Java XXE 漏洞审计工具

检查 Java Web 项目源码,识别 XML 解析实现,检测 XXE (XML External Entity) 注入漏洞。

核心要求

此技能必须完整检查所有 XML 解析相关代码,不允许省略。

  • ✅ 识别所有 XML 解析入口点(5 种解析器)
  • ✅ 检查每个解析器的外部实体防护配置
  • ✅ 追踪 XML 输入来源(用户可控性)
  • ✅ 检测回显点(数据是否返回给用户)
  • ✅ 为每个漏洞点提供验证 PoC
  • ❌ 禁止省略任何 XML 解析操作
  • ❌ 禁止跳过反编译步骤

漏洞分级标准

详见 SEVERITY_RATING.md

  • 漏洞编号格式: {C/H/M/L}-XXE-{序号}
  • 严重等级 = f(可达性 R, 影响范围 I, 利用复杂度 C)
  • Score = R × 0.40 + I × 0.35 + C × 0.25,映射 CVSS 3.1
前缀CVSS 3.1含义
🔴 C9.0-10.0可直接导致系统沦陷
🟠 H7.0-8.9可造成重大损害
🟡 M4.0-6.9可造成一定损害
🔵 L0.1-3.9安全加固项

技能协作流程(CRITICAL)

java-xxe-audit 必须在 java-route-mapper 之后执行,基于已梳理的路由信息进行审计。

┌─────────────────────────────────────────────────────────────────┐
│                    完整审计流程                                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  [步骤1] java-route-mapper                                      │
│     │                                                           │
│     │ 输出:                                                    │
│     │ ├─ 所有 HTTP 路由列表                                     │
│     │ ├─ 每个路由的参数定义                                     │
│     │ └─ Content-Type 识别(application/xml, text/xml)         │
│     │                                                           │
│     ↓                                                           │
│  [步骤2] java-xxe-audit(本技能)                               │
│     │                                                           │
│     │ 输入:java-route-mapper 的输出                            │
│     │                                                           │
│     │ 执行:                                                    │
│     │ ├─ 快速扫描 XML 解析类                                    │
│     │ ├─ 检查解析器安全配置                                     │
│     │ ├─ 追踪 XML 输入来源                                      │
│     │ └─ 检查回显路径                                           │
│     │                                                           │
│     ├─── 需要深入追踪 ───→ java-route-tracer                    │
│     │                           │                               │
│     │    ←── 返回调用链信息 ────┘                               │
│     │                                                           │
│     ↓                                                           │
│  [步骤3] 输出综合审计报告                                       │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

输入依赖(来自 java-route-mapper)

在开始审计前,必须先检查是否已有 java-route-mapper 的输出文件:

{project_name}_audit/
├── route_mapper/
│   ├── {project_name}_route_mapper_{timestamp}.md    ← 主索引(先读此文件定位模块详情)
│   ├── {module_name}/
│   │   └── {project_name}_module_{module_name}_{timestamp}.md  ← 模块详情
│   └── webservice/
│       └── {project_name}_ws_{service_name}_{timestamp}.md
└── xxe_audit/
    └── {project_name}_xxe_audit_{timestamp}.md  ← 本技能输出

如果 route_mapper 输出不存在,必须先运行:

Skill(skill="java-route-mapper", args="--project {project_path}")

从 route_mapper 获取的关键信息

信息用途
路由路径定位 Controller/Servlet 入口
Content-Type识别接受 XML 输入的端点
参数来源识别 getInputStream() 等原始输入
请求方法POST 方法更可能接受 XML Body

工作流程(三阶段)

阶段1: 快速扫描(优先执行)

目标:快速定位所有 XML 解析点和高危文件。

# 1.1 搜索 XML 解析器创建
grep -ri "XMLReaderFactory.createXMLReader" --include="*.java"
grep -ri "new SAXBuilder" --include="*.java"
grep -ri "new SAXReader" --include="*.java"
grep -ri "SAXParserFactory.newInstance" --include="*.java"
grep -ri "DocumentBuilderFactory.newInstance" --include="*.java"

# 1.2 搜索 XML 解析执行点
grep -ri "\.parse\s*(" --include="*.java"
grep -ri "\.build\s*(" --include="*.java"
grep -ri "\.read\s*(" --include="*.java"

# 1.3 搜索 XML 输入来源
grep -ri "getInputStream" --include="*.java"
grep -ri "InputSource" --include="*.java"
grep -ri "StringReader" --include="*.java"
grep -ri "StreamSource" --include="*.java"

# 1.4 搜索安全配置(判断是否已防护)
grep -ri "disallow-doctype-decl" --include="*.java"
grep -ri "external-general-entities" --include="*.java"
grep -ri "external-parameter-entities" --include="*.java"
grep -ri "setFeature" --include="*.java"
grep -ri "setExpandEntityReferences" --include="*.java"

# 1.5 搜索其他 XML 相关类
grep -ri "TransformerFactory" --include="*.java"
grep -ri "SchemaFactory" --include="*.java"
grep -ri "XMLInputFactory" --include="*.java"
grep -ri "Unmarshaller\|JAXBContext" --include="*.java"

输出:高危文件清单(按优先级排序)

优先级文件类型审计重点
P0直接使用 getInputStream() + XML 解析用户可控 XML 直接解析
P1Servlet/Controller 中的 XML 处理HTTP 入口处的 XML 解析
P2XML 工具类 *XmlUtil*.java通用 XML 解析方法
P3WebService/SOAP 处理类SOAP XML 解析

阶段2: 解析器安全配置检查

对阶段1发现的每个 XML 解析点,逐一检查安全配置状态。

2.1 解析器识别与配置检查

对每个解析器实例,检查是否设置了以下防护特性:

防护特性Feature URI作用
禁止 DOCTYPEhttp://apache.org/xml/features/disallow-doctype-decl最严格,推荐
禁止外部通用实体http://xml.org/sax/features/external-general-entities禁用外部实体引用
禁止外部参数实体http://xml.org/sax/features/external-parameter-entities禁用参数实体
禁止外部 DTD 加载http://apache.org/xml/features/nonvalidating/load-external-dtd禁止加载外部 DTD

详细检测规则参见各解析器参考文档:

2.2 XML 输入来源追踪

对每个 XML 解析点,追踪输入来源:

HTTP 请求体: request.getInputStream()
     ↓
InputSource / StringReader / StreamSource
     ↓
XMLReader.parse() / SAXBuilder.build() / SAXReader.read() / ...
     ↓
解析结果: Document / Element / Node
     ↓
回显: response.getWriter().write() / model.addAttribute() / ...
输入来源用户可控性风险等级
request.getInputStream()完全可控高危
request.getParameter("xml")完全可控高危
@RequestBody String xml完全可控高危
MultipartFile.getInputStream()完全可控高危
数据库读取的 XML 字段间接可控中危
配置文件/硬编码 XML不可控

2.3 回显路径检查

XXE 利用方式取决于是否有回显:

回显方式利用类型检测方法
解析结果写入 HTTP 响应有回显 XXE搜索 response.getWriter(), getText(), getTextContent()
解析结果写入页面模型有回显 XXE搜索 model.addAttribute(), request.setAttribute()
解析结果仅做逻辑处理Blind XXE (OOB)需通过外部 DTD 外带数据
解析但无任何输出Blind XXE (OOB)需通过外部 DTD 外带数据

阶段3: 详细检测与报告

3.1 触发 java-route-tracer

当发现以下情况时,调用 java-route-tracer 获取完整调用链:

触发条件调用方式
XML 输入经过多层传递Skill(skill="java-route-tracer", args="--route {route}")
解析器在工具类/基类中Skill(skill="java-route-tracer", args="--route {route}")
回显路径不明确Skill(skill="java-route-tracer", args="--route {route}")

3.2 生成报告

整合所有检测结果,生成综合审计报告。


XML 解析器识别

解析器识别特征所属包/依赖参考资料
XMLReaderXMLReaderFactory.createXMLReader(), xmlReader.parse()org.xml.sax (JDK 内置)PARSERS.md
SAXBuildernew SAXBuilder(), saxBuilder.build()org.jdom2 (jdom2)PARSERS.md
SAXReadernew SAXReader(), reader.read()org.dom4j.io (dom4j)PARSERS.md
SAXParserFactorySAXParserFactory.newInstance(), .getXMLReader().parse()javax.xml.parsers (JDK 内置)PARSERS.md
DocumentBuilderFactoryDocumentBuilderFactory.newInstance(), builder.parse()javax.xml.parsers (JDK 内置)PARSERS.md

其他可能受 XXE 影响的组件

组件识别特征漏洞说明
TransformerFactoryTransformerFactory.newInstance()XSLT 处理可触发 XXE
SchemaFactorySchemaFactory.newInstance()XML Schema 验证可触发 XXE
XMLInputFactory (StAX)XMLInputFactory.newInstance()StAX 解析器可触发 XXE
JAXB UnmarshallerJAXBContext.newInstance(), unmarshaller.unmarshal()XML 反序列化可触发 XXE

反编译阶段(CRITICAL)

当源码不可用时,必须使用 CFR 反编译器反编译 XML 解析相关类。

详细策略参见 DECOMPILE_STRATEGY.md

反编译工具调用

# 反编译单个 XML 处理类
java -jar {CFR_JAR} /path/to/XmlParser.class --outputdir {output_path}/decompiled

# 反编译 XML 处理相关目录
find /path/to/WEB-INF/classes/com/example/util -name "*.class" | xargs java -jar {CFR_JAR} --outputdir {output_path}/decompiled

# 反编译多个指定文件
java -jar {CFR_JAR} /path/to/XmlUtil.class /path/to/XmlParser.class /path/to/SoapHandler.class --outputdir {output_path}/decompiled

必须反编译的类

类型匹配模式目的
XML 工具类*Xml*.class, *XML*.class, *Parser*.class提取 XML 解析逻辑
Servlet*Servlet.class, *Controller.class追踪输入来源
WebService*WebService*.class, *Soap*.class, *WS*.classSOAP XML 处理
过滤器*Filter.classXML 请求预处理

XXE 检测规则速查

⚠️ 危险模式(无安全配置的解析器)

解析器危险代码漏洞说明
XMLReaderXMLReaderFactory.createXMLReader() 后直接 parse()未禁用外部实体
SAXBuildernew SAXBuilder() 后直接 build()未禁用外部实体
SAXReadernew SAXReader() 后直接 read()未禁用外部实体
SAXParserFactorySAXParserFactory.newInstance() 后直接 parse()未禁用外部实体
DocumentBuilderFactoryDocumentBuilderFactory.newInstance() 后直接 parse()未禁用外部实体

✅ 安全模式(已配置防护)

所有解析器的安全修复方式一致——禁用 DOCTYPE 或外部实体:

// 方式1: 禁止 DOCTYPE 声明(最严格,推荐)
setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);

// 方式2: 分别禁用外部实体
setFeature("http://xml.org/sax/features/external-general-entities", false);
setFeature("http://xml.org/sax/features/external-parameter-entities", false);
setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);

⚠️ 输入来源检测(CRITICAL - 确认用户可控性)

必须搜索的输入来源模式:

# HTTP 请求体
grep -ri "getInputStream" --include="*.java"
grep -ri "getReader" --include="*.java"

# 参数传入 XML
grep -ri "getParameter.*xml\|getParameter.*XML" --include="*.java"

# Spring 注解
grep -ri "@RequestBody" --include="*.java"

# 文件上传
grep -ri "MultipartFile" --include="*.java" | grep -i "xml"

# SOAP/WebService
grep -ri "@WebService\|@WebMethod" --include="*.java"

数据流追踪(需要时加载 java-route-tracer)

何时需要参数追踪

场景说明操作
XML 输入经过多层传递HTTP 请求体经 Controller → Service → Util 多层传递后解析加载 java-route-tracer
解析器在工具类中XML 解析在通用 XmlUtil 类中,多处调用加载 java-route-tracer
回显路径不明确解析结果经过多次转换后输出加载 java-route-tracer
SOAP 处理链WebService 请求经拦截器/处理器链加载 java-route-tracer

自动触发 java-route-tracer

# 当需要追踪 XML 输入流向时
Skill(
    skill="java-route-tracer",
    args="--route {controller_route} --project {project_path}"
)

报告生成

输出单个综合审计报告文件:

{project_name}_audit/xxe_audit/
└── {route_name}/
    └── {project_name}_xxe_audit_{timestamp}.md      # 综合审计报告

路由名说明:

  • 路由名从路由路径提取,去掉前缀斜杠和特殊字符
  • 例如:/api/xml/parseapi_xml_parse
  • 例如:/ws/soap/endpointws_soap_endpoint

输出格式

严格按照 references/OUTPUT_TEMPLATE.md 中的填充式模板生成输出文件。

  • 文件名格式: {project_name}_xxe_audit_{YYYYMMDD_HHMMSS}.md
  • 不得修改模板结构、不得增删章节、不得调整顺序
  • 所有【填写】占位符必须替换为实际内容
  • 通用规范参考: java-shared/OUTPUT_STANDARD.md

验证检查清单

在标记审计完成前,必须执行以下检查:

代码检测检查

  • 所有 XML 解析类已检查
  • 所有 5 种解析器类型均已搜索
  • 每个解析器实例的安全配置已检查

输入来源检查

  • 追踪了每个解析器的 XML 输入来源
  • 确认了输入是否用户可控
  • 检查了回显路径

漏洞检测检查

  • 所有无防护的解析器已标记
  • 所有用户可控输入已追踪
  • 区分了有回显 XXE 和 Blind XXE

报告完整性检查

  • 综合审计报告已生成,且通过 OUTPUT_TEMPLATE.md 末尾的自检清单

参考资料

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

35.71%
按下载量换算64

Claude

31.69%
按下载量换算56

Cursor

16.7%
按下载量换算30

Gemini CLI

10.12%
按下载量换算18

安全审计

Gen Agent Trust Hub

未通过

Socket

可疑

Snyk

可疑

权限和风险

需要联网

该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在 warning/failed 结果,不能写成本站确认安全。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills