---
name: vuln-scan
description: >
  对抗性安全扫描。假设你是攻击者，寻找代码中的安全漏洞。
  使用 OWASP Top 10 框架进行系统性漏洞分析。
tools:
  - Read
  - Glob
  - Grep
  - Agent
---

# vuln-scan

对抗性安全扫描 Skill。以攻击者视角审查代码，发现安全漏洞。

## 核心理念

**假设你是攻击者，不是防御者。**

传统的安全审查是"检查代码是否安全"，而 vuln-scan 是"尝试攻击代码找到漏洞"。这种对抗性视角能发现更多问题。

## 触发方式

**Slash 命令：**
```
/reqflow:vuln-scan <目标代码路径或描述>
```

**自然语言：**
- "扫描一下安全漏洞"
- "以攻击者视角审查这段代码"
- "检查 OWASP Top 10 风险"

## 扫描框架

### OWASP Top 10 逐项检查

| # | 检查项 | 攻击视角问题 |
|---|--------|-------------|
| A01 | 失效的访问控制 | "我能越权访问其他用户的数据吗？" |
| A02 | 加密机制失效 | "我能解密敏感数据吗？密钥是否硬编码？" |
| A03 | 注入 | "我能注入 SQL/NoSQL/OS 命令吗？" |
| A04 | 不安全设计 | "业务逻辑有可绕过的漏洞吗？" |
| A05 | 安全配置错误 | "默认配置暴露了敏感信息吗？" |
| A06 | 过时或不安全的组件 | "依赖有已知 CVE 吗？" |
| A07 | 认证和会话管理失效 | "我能伪造会话或绕过认证吗？" |
| A08 | 软件和数据完整性失效 | "CI/CD 管道可被篡改吗？" |
| A09 | 安全日志和监控失效 | "攻击行为会被记录吗？" |
| A10 | 服务端请求伪造 | "我能让服务器请求内部资源吗？" |

### 攻击向量分析

针对每个功能模块，执行以下攻击向量分析：

```
输入验证攻击:
├── 边界值溢出 (buffer overflow, integer overflow)
├── 特殊字符注入 (', ", \, ;, --, /*, */)
├── Unicode/编码绕过 (%00, %0a, %0d)
├── 路径遍历 (../, ..\)
└── 文件上传攻击 (双扩展名, MIME 伪造)

认证攻击:
├── 暴力破解防护
├── 会话固定/劫持
├── JWT 算法混淆 (none, HS256→RS256)
├── 密码重置逻辑漏洞
└── OAuth redirect_uri 篡改

授权攻击:
├── IDOR (不安全的直接对象引用)
├── 垂直越权 (普通用户→管理员)
├── 水平越权 (用户A→用户B)
├── 功能级别访问控制缺失
└── RBAC 绕过

业务逻辑攻击:
├── 竞态条件 (TOCTOU)
├── 金额篡改
├── 重复提交
├── 优惠券/积分滥用
└── 订单状态绕过
```

## 执行流程

### 步骤 1: 代码侦察

收集目标代码的结构信息：
- 入口点（API endpoints, 表单, 文件上传）
- 数据流（用户输入→处理→存储→输出）
- 依赖组件（框架版本, 第三方库）
- 配置文件（数据库连接, API 密钥, 环境变量）

### 步骤 2: 攻击面映射

绘制攻击面地图：
```
攻击面:
├── 公开 API (/api/users, /api/orders)
├── 认证端点 (/login, /register, /reset-password)
├── 文件处理 (上传, 下载, 导出)
├── 数据库查询 (SQL, NoSQL)
├── 外部服务调用 (HTTP client, 消息队列)
└── 配置和密钥 (env vars, config files)
```

### 步骤 3: 逐项攻击测试

对每个攻击面执行 OWASP Top 10 检查：

```markdown
### 攻击测试: [攻击面名称]

**攻击向量:** [具体攻击方式]
**测试步骤:**
1. [步骤 1]
2. [步骤 2]
3. [步骤 3]

**预期结果（如果存在漏洞）:** [漏洞表现]
**实际结果:** [代码中的实际行为]

**结论:** ✅ 安全 / ❌ 存在漏洞 / ⚠️ 需要进一步验证

**漏洞详情（如果存在）:**
- 严重程度: Critical / High / Medium / Low
- 位置: [文件:行号]
- 攻击示例: [具体的攻击 payload]
- 修复建议: [如何修复]
```

### 步骤 4: 漏洞汇总报告

```markdown
## 🔴 安全扫描报告

### 漏洞统计
| 严重程度 | 数量 | 详情 |
|----------|------|------|
| Critical | X | ... |
| High | X | ... |
| Medium | X | ... |
| Low | X | ... |

### 关键发现

#### [Critical] 漏洞标题
- **位置:** [文件:行号]
- **攻击向量:** [如何攻击]
- **影响:** [攻击成功后的后果]
- **修复建议:** [如何修复]

### 安全建议
1. [建议 1]
2. [建议 2]
3. [建议 3]

### 优先修复顺序
1. [Critical 漏洞] - 立即修复
2. [High 漏洞] - 24 小时内修复
3. [Medium 漏洞] - 下个版本修复
4. [Low 漏洞] - 计划修复
```

## 与其他 Skill 的协作

- **代码审查阶段**: 在代码审查前调用 vuln-scan，将安全发现纳入审查报告
- **技术方案阶段**: 在架构设计时调用，提前发现设计层面的安全缺陷
- **交付验证阶段**: 作为验证的一部分，确认安全问题已修复

## 强制规则

- **必须以攻击者视角思考** — 不是"代码是否安全"，而是"我能如何攻击"
- **必须提供具体的攻击 payload** — 不能只说"可能存在注入"，要给出具体的注入示例
- **必须评估影响** — 每个漏洞必须说明攻击成功后的具体后果
- **必须给出修复建议** — 不能只发现问题不给解决方案
- **必须按严重程度排序** — Critical 优先，Low 最后

## 输出格式

```
VULN_SCAN_STATUS: scanning|completed|blocked
ATTACK_SURFACE: [攻击面列表]
VULNERABILITIES_FOUND: X critical, Y high, Z medium, W low
TOP_RISK: [最高风险漏洞摘要]
NEXT_ACTION: [建议的下一步操作]
```
