风险项目详情分析
soc-AI-SDL
git@gitlab.alibaba-inc.com:soc-AI-SDL/soc-AI-SDL.git::/feature/20250414_24651171_tmp_1_stage_1
用户权限校验不足,可能导致越权访问敏感数据
OrderService.java 中直接拼接SQL语句,存在注入风险
通过修改orderid参数可访问他人订单信息
支付宝国补项目旨在为政府补贴发放提供数字化解决方案,通过支付宝平台实现补贴的精准发放和核销。
随着政府数字化转型的推进,各类补贴发放需要更加高效、透明和可追溯的解决方案...
2.1 用户认证与授权
系统需要支持多级用户角色,包括普通用户、商户用户、政府管理员等。用户通过支付宝账号登录后,系统应根据用户类型显示不同功能模块。
2.2 补贴申请与审批
用户可以在线提交补贴申请,上传相关证明材料。政府管理员后台可以审批这些申请,审批通过后补贴金额将直接发放到用户支付宝账户。
2.3 补贴核销
用户在指定商户消费时,可以使用补贴金额进行支付。商户通过扫码枪扫描用户付款码完成交易...
所有敏感数据传输必须加密,存储数据需要脱敏处理...
5. 性能要求
系统需要支持每秒1000+的并发请求,响应时间在500ms以内...
业务场景:
用户认证与授权功能
风险类型:
越权访问(EoP)
风险点:
角色权限划分不明确
严重程度:
高危
整改建议:
1. 明确定义各角色权限边界
2. 实现基于RBAC的权限控制系统
3. 所有敏感操作增加权限校验
业务场景:
补贴申请与审批
风险类型:
信息泄露(ID)
风险点:
审批流程可查看他人申请
严重程度:
整改建议:
1. 实现数据级权限控制
2. 审批列表过滤只显示有权限的数据
3. 敏感字段脱敏处理
package com.alipay.subsidy.service;
import java.sql.*;
import java.util.List;
public class OrderService {
private Connection conn;
public OrderService() {
try {
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/subsidy",
"root",
"password"
);
} catch (SQLException e) {
e.printStackTrace();
}
}
public List<Order> getOrdersByUserId(String userId) {
List<Order> orders = new ArrayList<>();
try {
// 漏洞点: SQL注入风险
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM orders WHERE user_id = '" + userId + "'");
while (rs.next()) {
Order order = new Order();
order.setId(rs.getString("id"));
order.setAmount(rs.getBigDecimal("amount"));
orders.add(order);
}
} catch (SQLException e) {
e.printStackTrace();
}
return orders;
}
public Order getOrderById(String orderId) {
Order order = null;
try {
// 漏洞点: 越权访问风险
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM orders WHERE id = '" + orderId + "'");
if (rs.next()) {
order = new Order();
order.setId(rs.getString("id"));
order.setUserId(rs.getString("user_id"));
order.setAmount(rs.getBigDecimal("amount"));
}
} catch (SQLException e) {
e.printStackTrace();
}
return order;
}
public void updateOrderStatus(String orderId, String status) {
try {
// 漏洞点: 缺乏权限校验
PreparedStatement pstmt = conn.prepareStatement(
"UPDATE orders SET status = ? WHERE id = ?"
);
pstmt.setString(1, status);
pstmt.setString(2, orderId);
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
OrderService.java - getOrdersByUserId()
漏洞类型:
SQL注入
风险接口:
/api/orders?userId={userId}
漏洞描述:
直接拼接用户输入的userId到SQL查询中,攻击者可以构造恶意输入执行任意SQL命令。
漏洞代码:
修复建议:
// 使用预编译语句修复
PreparedStatement pstmt = conn.prepareStatement(
"SELECT * FROM orders WHERE user_id = ?"
);
pstmt.setString(1, userId);
ResultSet rs = pstmt.executeQuery();
OrderService.java - getOrderById()
漏洞类型:
水平越权
风险接口:
/api/orders/{orderId}
漏洞描述:
接口直接根据orderId查询订单信息,没有校验当前用户是否有权限访问该订单。
漏洞代码:
修复建议:
// 增加权限校验
Order order = getOrderById(orderId);
if (order != null && !order.getUserId().equals(currentUserId)) {
throw new AccessDeniedException("无权访问该订单");
}
return order;
GET /api/orders/1001 HTTP/1.1
Host: api.alipay-subsidy.com
Authorization: Bearer user1_token
Accept: application/json
# 修改orderId尝试访问他人订单
GET /api/orders/1002 HTTP/1.1
Host: api.alipay-subsidy.com
Authorization: Bearer user1_token
Accept: application/json
GET /api/orders/1003 HTTP/1.1
Host: api.alipay-subsidy.com
Authorization: Bearer user1_token
Accept: application/json
{
"id": "1002",
"userId": "user2",
"amount": 150.00,
"items": [
{"name": "商品A", "price": 50.00},
{"name": "商品B", "price": 100.00}
]
}
GET /api/orders?userId=user1 HTTP/1.1
Host: api.alipay-subsidy.com
Authorization: Bearer user1_token
Accept: application/json
# 基础注入测试
GET /api/orders?userId=user1' OR '1'='1 HTTP/1.1
Host: api.alipay-subsidy.com
Authorization: Bearer user1_token
Accept: application/json
# 联合查询获取其他表数据
GET /api/orders?userId=user1' UNION SELECT 1,username,password FROM users-- HTTP/1.1
Host: api.alipay-subsidy.com
Authorization: Bearer user1_token
Accept: application/json
{
"error": "Internal Server Error",
"status": 500,
"message": "Error executing SQL query"
}
订单信息越权访问
风险接口:
/api/orders/{orderId}
风险描述:
攻击者可以通过修改orderId参数访问其他用户的订单信息,导致敏感数据泄露。
攻击手法:
修复建议:
1. 服务端增加订单所属用户校验
2. 实现数据级权限控制
3. 对订单ID增加访问频率限制
订单查询SQL注入
风险接口:
/api/orders?userId={userId}
风险描述:
接口存在SQL注入漏洞,攻击者可以构造恶意输入执行任意SQL命令,可能导致数据库信息泄露甚至服务器被控制。
攻击Payload:
user1' UNION SELECT 1,username,password FROM users--
修复建议:
1. 使用预编译语句(PreparedStatement)替代字符串拼接
2. 实施输入验证和参数化查询
3. 限制数据库账户权限
安全团队最终评审结果
决策人: 安全团队 - 张安全
决策时间: 2023-06-15 10:30
用户权限控制不足
风险描述: 用户权限校验不足,可能导致越权访问敏感数据
影响范围: 补贴审批、订单查询等核心功能
修复进度:
仅完成需求分析,未进行代码实现
OrderService.java
风险描述: 直接拼接SQL语句,存在注入风险
影响接口: /api/orders?userId={userId}
修复进度:
主接口已修复,但部分边缘接口仍存在风险
订单信息越权访问
风险描述: 通过修改orderid参数可访问他人订单信息
影响接口: /api/orders/{orderId}
修复进度:
代码已修复,等待安全团队验证
| 时间 | 事件类型 | 状态 |
|---|---|---|
| 2023-06-08 03:15 | 异常登录尝试 | 已处理 |
| 2023-06-10 14:30 | SQL注入攻击 | 待修复 |
| 2023-06-12 09:15 | 批量订单查询 | 监控中 |
影响接口: /api/orders?userId={userId}
发现时间: 2023-06-10
最后检测: 2023-06-15
影响接口: /api/orders/{orderId}
发现时间: 2023-06-08
预计修复: 2023-06-20
影响接口: /api/user/profile
发现时间: 2023-06-05
修复时间: 2023-06-12
2023-06-10 14:30
攻击描述: 攻击者尝试通过userId参数注入SQL命令
攻击Payload: user1' UNION SELECT 1,username,password FROM users--
影响范围: 订单查询接口
修复情况:
2023-06-12 09:15
攻击描述: 同一IP在短时间内发起大量订单查询请求
请求频率: 120次/分钟
影响范围: 订单查询接口
处理措施:
2023-06-08 03:15
攻击描述: 来自异常地理位置的登录尝试
攻击IP: 192.168.34.56 (俄罗斯)
攻击方式: 密码爆破
处理结果: