---
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`

## 前置条件
- Serena MCP 已连接，目标项目已激活

## 反幻觉铁律
```
1. 每个 Sink 必须通过 jet_brains_find_symbol(include_body=true) 二次确认存在性
2. 代码片段必须来自工具实际输出，不得编造
3. 不确定的发现标记为 [Hypothesis]
```

---

## 漏洞模式库

12 类漏洞的关键函数、利用条件、判定要点见：
→ **[references/sink.md](references/sink.md)**（执行前必须读取此文件）

---

## 工作流程

### Step 1: 读取漏洞模式库

读取 `references/sink.md`，获取 12 类漏洞的关键函数和利用条件。

### Step 2: 逐类搜索

对 12 类漏洞逐一执行：

1. 使用 `search_for_pattern` 按模式库中的正则搜索
2. 使用 `jet_brains_find_symbol(include_body=true)` 获取方法体二次确认
3. 排除以下包前缀的搜索结果（框架/第三方库代码）：
   - `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.*`
4. 同时排除 `test/`、`src/test/` 目录下的测试类
5. 排除注释中的代码（确认匹配行不在 `//` 或 `/* */` 内）

### Step 3: 确认 Sink 利用条件

对每个候选 Sink，根据 `references/sink.md` 中对应漏洞的 **利用条件** 逐项检查：

1. 读取 Sink 所在方法完整代码
2. 对照利用条件逐项判定
3. 设定 confidence：
   - **high**: 所有利用条件明确满足
   - **medium**: 部分条件满足，需追踪确认
   - **low**: 仅匹配 API 调用，条件不明确
4. 基本条件不满足的结果直接丢弃

### Step 4: 输出结果

#### 输出文件 1: `.audit/sinks.md`

完整的 Sink 分析报告，包含每个 Sink 的代码片段、利用条件分析、confidence 判定理由。

#### 输出文件 2: `.audit/sinks.json`

精简的结构化清单，供后续 `trace-sink` 使用：

```json
{
  "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": {}
  }
}
```
