# 缺陷点分析任务

## 任务项

1、 **通读代码**，识别单文件中所有可能存在缺陷的敏感操作
2、 区分敏感操作的可触发性&风险程度
3、 合并输出可触发的风险敏感操作项

! 必须通读代码完成审计，不能投机取巧只分析grep特定特征的代码（grep定位后需要查看附近上下文）

## 前置条件

- 待审计代码文件（行号范围）

## 预定义漏洞类型 （仅检出以下类型的漏洞）

* `AUTHENTICATION_BYPASS`
* `PRIVILEGE_ESCALATION`
* `UNAUTHORIZED_ACCESS`
* `SESSION_MANAGEMENT_FLAWS`
* `JWT_TOKEN_VULNERABILITY`
* `AUTHORIZATION_LOGIC_BYPASS`
* `INSECURE_DIRECT_OBJECT_REFERENCE`
* `HARD_CODED_CREDENIAL`
* `WEAK_ENCRYPTION_ALGORITHM`
* `USE_OF_INSECURE_RANDOM`
* `SENSITIVE_DATA_EXPOSURE`
* `SMS_LOGIC_FLAW`
* `EMAIL_LOGIC_FLAW`

## 分析步骤

! 严格按照下述步骤进行分析，不允许跳出流程或者裁剪步骤

### Step1 初步分析该代码涉及什么类型的敏感操作

步骤产物：**敏感操作列表**
产物示例：
- xx行-xx行，xx函数存在 数据修改 敏感操作
- xx行，xxxx存在xx配置缺陷

#### 业务逻辑类敏感操作

- 数据修改 (HIGH)
    - 识别特征：POST/PUT/DELETE
    - 典型示例：创建/修改/删除
- 数据访问 (MEDIUM)
    - 识别特征：GET + ID参数
    - 典型示例：/user/{id}  /用户/{id}
- 批量操作 (HIGH)
    - 识别特征：export/download/batch  导出/下载/批量
    - 典型示例：导出/批量删除
- 权限变更 (CRITICAL)
    - 识别特征：role/permission/grant  角色/权限/授予
    - 典型示例：角色/权限分配
- 资金操作 (CRITICAL)
    - 识别特征：transfer/pay/refund  转账/付款/退款
    - 典型示例：转账/支付/退款
- 认证操作 (CRITICAL)
    - 识别特征：login/password/token/jwt/validate  登录/密码/令牌
    - 典型示例：登录/密码重置/token校验
- 短信/邮件类操作
    - sms/email  
    - 典型示例：验证码发送/重置密码邮件
- 验证码校验操作
    - captcha/verification_code/validate 图片验证码/验证码/校验
    - 典型示例：比对缓存和提交的验证码是否一致

#### 配置类缺陷

- 弱加密算法: 使用已弃用或弱加密算法（如 MD5、SHA1、DES 等）
- 伪随机数使用: 使用不安全的随机数生成器
- 敏感数据泄露: 敏感数据记录或存储、PII 处理违规、PII 处理违规、API 端点数据泄露、调试信息泄露等;合成密码、凭据、个人信息等打印日志里或者报错栈信息里出现

### Step2 加载规则分析敏感操作能否被触发

逐个分析Step1中列举的敏感操作列表, 并根据操作类型加载 `threat-explore/operations` 中对应的触发检查规则

操作-规则列表:

- 认证操作: `threat-explore/operations/auth.md`
- 短信操作: `threat-explore/operations/sms.md`
- 邮件操作: `threat-explore/operations/email.md`
- 验证码校验操作: `threat-explore/operations/verification_code.md`
- 其他: `threat-explore/operations/default.md` 以及根据业务分析可触发性和风险

! 必须加载 `threat-explore/operations` 中的触发检查规则进行可触发性分析
! 如果某个敏感操作无法触发或者没有风险，则无需检出
! 分析范围仅限于待审计文件路径，更大范围的上下文分析由其他任务完成，本任务不涉及

#### 外部输入列举

包括但不限于:

- 函数参数
- 请求体
- 环境变量
- 文件内容
- URL Query
- Header
- 表单
- ...

#### 分析输出规则

* 只识别 **预定义漏洞类型**，其他一律不报。
* 不得将整个函数体或仅函数定义行/函数签名行作为行号范围。

### Step3 组织敏感操作风险列表

列出具有风险的敏感操作列表

### Step4 回顾检查与总结

回顾Step1列出的**敏感操作列表**，总结风险情况，完成下面的检查：

- 检查项1：是否有遗漏的敏感操作风险未输出或未分析

### Step5 输出最终报告

根据Step4的检查结果，组织报告结果输出

按下面的格式输出识别到的敏感操作信息：

```markdown
## 业务逻辑类敏感操作

### 敏感操作1：xxx
- 代码文件路径
- 关键操作代码片段列举（带路径+行号范围）
- 敏感操作描述+潜在危害

## 配置类缺陷

### 缺陷1：xxx
- 代码文件路径
- 关键操作代码片段列举（带路径+行号范围）
- 敏感操作描述+潜在危害
```

## 最佳实践

- 搜索代码
  - 错误做法: Grep搜索到敏感操作代码行后直接根据搜索到的内容进行分析
  - 最佳实践: Grep到所在行后，读取所在行代码上下文，理清功能逻辑

