| name | find-sink |
| description | Java 项目漏洞 Sink 点搜索。在代码库中系统性搜索 12 类漏洞的 Sink 点(反序列化、JNDI注入、表达式注入、命令注入、SQL注入、任意类实例化、不安全反射、JDBC攻击、文件上传、ZipSlip、任意文件读取、硬编码敏感信息),确认利用条件后输出 Sink 清单。触发词:find sink、漏洞搜索、sink 分析、sink search、Phase 3。 |
Sink 点搜索 (Phase 3)
适用场景
- Java Web 项目审计中,搜索代码库中的危险 Sink 函数调用
- 作为
java-audit Phase 3 被调度执行
不适用场景
- 需要追踪 Sink 调用链 → 使用
trace-sink
- 需要分析鉴权 → 使用
analyze-auth
前置条件
反幻觉铁律
1. 每个 Sink 必须通过 jet_brains_find_symbol(include_body=true) 二次确认存在性
2. 代码片段必须来自工具实际输出,不得编造
3. 不确定的发现标记为 [Hypothesis]
漏洞模式库
12 类漏洞的关键函数、利用条件、判定要点见:
→ references/sink.md(执行前必须读取此文件)
工作流程
Step 1: 读取漏洞模式库
读取 references/sink.md,获取 12 类漏洞的关键函数和利用条件。
Step 2: 逐类搜索
对 12 类漏洞逐一执行:
- 使用
search_for_pattern 按模式库中的正则搜索
- 使用
jet_brains_find_symbol(include_body=true) 获取方法体二次确认
- 排除以下包前缀的搜索结果(框架/第三方库代码):
org.springframework.*
org.apache.*
org.hibernate.*
org.mybatis.*
com.fasterxml.*
com.alibaba.fastjson.*(框架本身的内部调用)
org.eclipse.*
io.netty.*
com.google.*
javax.* / jakarta.*(API 定义)
org.slf4j.* / ch.qos.logback.* / org.apache.logging.*
- 同时排除
test/、src/test/ 目录下的测试类
- 排除注释中的代码(确认匹配行不在
// 或 /* */ 内)
Step 3: 确认 Sink 利用条件
对每个候选 Sink,根据 references/sink.md 中对应漏洞的 利用条件 逐项检查:
- 读取 Sink 所在方法完整代码
- 对照利用条件逐项判定
- 设定 confidence:
- high: 所有利用条件明确满足
- medium: 部分条件满足,需追踪确认
- low: 仅匹配 API 调用,条件不明确
- 基本条件不满足的结果直接丢弃
Step 4: 输出结果
输出文件 1: .audit/sinks.md
完整的 Sink 分析报告,包含每个 Sink 的代码片段、利用条件分析、confidence 判定理由。
输出文件 2: .audit/sinks.json
精简的结构化清单,供后续 trace-sink 使用:
{
"scan_time": "ISO8601 时间戳",
"sinks": [
{
"id": "SINK-001",
"vuln_type": "漏洞类型标识",
"class_name": "完全限定类名",
"method_name": "方法名",
"file_path": "源文件相对路径",
"confidence": "high | medium | low"
}
],
"summary": {
"total_sinks": 0,
"by_type": {}
}
}