AI SDL 数字分身 - 风险项目详情

支付宝国补项目 风险等级: 高危

项目概要

项目名称

支付宝国补项目

风险概述

  • 需求环节: 越权风险
  • 代码环节: SQL注入风险
  • 安全测试环节: 订单ID枚举风险

项目参与人

形知 铸梦 洞悉 隐迹 晨熙

风险状态

65% 风险未修复

需求文档内容

支付宝国补项目需求文档

本项目旨在为支付宝用户提供国家补贴申请功能,用户可以通过支付宝APP申请各类政府补贴...

1. 用户权限管理:用户可以通过输入其他用户的身份证号查询补贴申请状态(存在越权风险)...

2. 补贴申请流程:用户需要填写个人信息、上传证明材料并提交申请...

3. 审核流程:后台管理员审核用户提交的材料,审核通过后补贴金额将直接打入用户支付宝账户...

4. 数据查询接口:提供补贴申请状态查询接口,接口参数为身份证号(未做权限校验)...

5. 数据存储:用户信息将存储在MySQL数据库中,使用阿里云RDS服务...

6. 安全要求:所有敏感数据传输必须加密,用户密码必须哈希存储...

7. 性能要求:系统需要支持每秒1000次查询请求...

8. 日志记录:所有敏感操作需要记录操作日志...

9. 异常处理:系统需要妥善处理各种异常情况...

10. 监控报警:系统需要集成监控报警功能...

安全分析结果

STRIDE威胁建模

graph LR A[支付宝客户端] -- 欺骗 --> B[API网关] B -- 信息泄露 --> C[补贴服务] C -- 篡改 --> D[MySQL补贴库] C -- 拒绝服务 --> E[Redis缓存] B -- 否认 --> F[日志服务] style A fill:#f9f,stroke:#333 style B fill:#bbf,stroke:#333,stroke-width:4px style C fill:#f96,stroke:#333,stroke-width:4px style D fill:#9f9,stroke:#333 style E fill:#99f,stroke:#333 style F fill:#f9f,stroke:#333

1. 越权风险

业务场景: 补贴申请状态查询

风险点: 用户可以通过输入其他用户的身份证号查询补贴申请状态

风险类型: 水平越权

整改建议: 增加权限校验,确保用户只能查询自己的补贴申请状态

2. 数据泄露风险

业务场景: 补贴申请数据存储

风险点: 补贴申请数据未加密存储

风险类型: 信息泄露

整改建议: 对敏感字段进行加密存储

代码内容

package com.alipay.subsidy.controller;

import org.springframework.web.bind.annotation.*;
import java.sql.*;

@RestController
@RequestMapping("/api/subsidy")
public class SubsidyController {
    
    @GetMapping("/status")
    public String getSubsidyStatus(@RequestParam String idCard) {
        // 漏洞点: SQL注入风险
        String query = "SELECT status FROM subsidy_applications WHERE id_card = '" + idCard + "'";
        
        try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/subsidy", "user", "pass");
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery(query)) {
            
            if (rs.next()) {
                return rs.getString("status");
            }
            return "Not found";
        } catch (SQLException e) {
            return "Error";
        }
    }
    
    @PostMapping("/apply")
    public String applySubsidy(@RequestBody SubsidyApplication application) {
        // 业务逻辑处理
        return "Success";
    }
    
    // 其他方法...
}

安全分析结果

SQL注入漏洞

风险接口: GET /api/subsidy/status

漏洞类型: SQL注入

漏洞级别: 严重

漏洞描述: 直接拼接用户输入的身份证号到SQL查询中,攻击者可以构造恶意输入执行任意SQL命令

漏洞代码: Line 10-12

修复建议:
@GetMapping("/status")
public String getSubsidyStatus(@RequestParam String idCard) {
    String query = "SELECT status FROM subsidy_applications WHERE id_card = ?";
    
    try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/subsidy", "user", "pass");
         PreparedStatement stmt = conn.prepareStatement(query)) {
        
        stmt.setString(1, idCard);
        try (ResultSet rs = stmt.executeQuery()) {
            if (rs.next()) {
                return rs.getString("status");
            }
            return "Not found";
        }
    } catch (SQLException e) {
        return "Error";
    }
}

越权访问

风险接口: GET /api/subsidy/status

漏洞类型: 水平越权

漏洞级别: 高危

漏洞描述: 接口未校验当前用户是否有权限查询该身份证号的补贴状态

漏洞代码: 整个方法

测试内容

风险接口

GET /api/subsidy/status?idCard=11010119900307753X

攻击Payload

GET /api/subsidy/status?idCard=11010119900307753X' OR '1'='1 HTTP/1.1
Host: api.alipay.com
User-Agent: Mozilla/5.0
Accept: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

安全分析结果

订单ID枚举漏洞

风险接口地址: GET /api/subsidy/status

风险描述: 攻击者可以通过枚举身份证号查询任意用户的补贴申请状态

攻击payload请求内容:
GET /api/subsidy/status?idCard=11010119900307753X' OR '1'='1 HTTP/1.1
Host: api.alipay.com
...

测试结果

成功利用漏洞获取了1000+用户的补贴申请状态信息

响应时间: 200ms

成功率: 100%

发布检查内容

需求环节风险检查

越权风险 - 已修复

代码环节风险检查

SQL注入风险 - 未修复
越权访问风险 - 未修复

安全测试环节风险检查

订单ID枚举风险 - 未修复

发布决策

未修复的风险

  • 代码环节的SQL注入风险未修复
  • 代码环节的越权访问风险未修复
  • 安全测试环节的订单ID枚举风险未修复

拒绝发布

存在严重安全风险,不符合发布标准

线上风险事件

SQL注入攻击

2023-06-15

攻击者利用SQL注入漏洞获取了补贴申请数据库中的敏感信息

批量枚举攻击

2023-06-18

攻击者通过枚举身份证号批量查询用户补贴申请状态

漏洞修复情况

SQL注入漏洞

已修复

修复方式: 使用预编译语句替换字符串拼接

修复时间: 2023-06-16 02:15

越权访问漏洞

已修复

修复方式: 增加权限校验逻辑

修复时间: 2023-06-16 2:15

订单ID枚举漏洞

修复中

预计修复时间: 2023-06-20

Made with DeepSite LogoDeepSite - 🧬 Remix