Tình huống: API lộ đơn hàng của khách khác Trung cấp
Thời gian đọc ước tính: 1 phút
Một researcher chỉ cần đổi con số trong URL là đọc được đơn của khách khác. Trong lúc sửa, team tìm ra lỗ thứ hai: user thường tự nâng mình lên admin. Bạn có bốn quyết định: chặn lỗ, khoanh vùng ai bị lộ, sửa thiết kế, và đóng sự cố.
- Câu hỏi cần trả lời ở mỗi bước: người gọi có quyền với object này, và với field này không?
- Điểm chỉ tính lựa chọn đầu tiên ở mỗi bước.
Đổi số trong URL là đọc được đơn của người khác
Bạn là backend lead của một shop online: 184.000 khách, khoảng 1,2 triệu đơn, ID đơn là số tăng dần. API viết bằng NestJS + PostgreSQL, access log giữ 90 ngày. Mỗi lựa chọn hiển thị ngay hậu quả trên các chỉ số.
Bước 1/4 · Báo cáo từ security researcher
10:05 thứ Sáu, hộp thư security@ nhận email từ một researcher: đăng nhập bằng tài khoản của chính anh ta, gọi GET /api/orders/1048213 rồi đổi số cuối, API trả về đơn của khách khác: tên, số điện thoại, địa chỉ, món hàng. Bạn tái hiện được trong 2 phút.
- lớp lỗi
- BOLA / IDOR (OWASP API1:2023)
- ID đơn
- số tăng dần, đoán được
- endpoint có từ
- 14 tháng trước
// orders.controller.ts
@UseGuards(JwtAuthGuard) // chỉ kiểm tra token hợp lệ
@Get(':id')
get(@Param('id') id: string) {
return this.orders.findById(id); // SELECT * FROM orders WHERE id = $1
}Bạn làm gì?
Chơi xong, đọc BOLA/IDOR để xem cách scope query theo actor và các endpoint list, bulk, export hay bị sót.