Trong kiểm thử xâm nhập ứng dụng web (Web Pentest), các lỗ hổng logic nghiệp vụ (Business Logic Flaws) luôn là những lỗi khó phát hiện nhất bằng công cụ tự động. Nghiên cứu bảo mật gần đây trên nền tảng Instagram đã phơi bày một lỗ hổng logic cho phép tin tặc chiếm quyền điều khiển tài khoản (Account Takeover) thông qua luồng liên kết tài khoản Meta Accounts Center.
🎯 Kịch Bản Tấn Công Trọng Điểm:
- Điểm yếu khai thác: Thiếu cơ chế kiểm tra giới hạn brute-force (Rate Limiting) trên API gửi mã xác thực SMS/Email của Accounts Center.
- Mục tiêu: Đoán mã OTP 6 chữ số để liên kết trái phép tài khoản Instagram của nạn nhân vào tài khoản Meta của kẻ tấn công.
- Hậu quả: Vượt qua xác thực 2 bước (2FA) và thay đổi mật khẩu gốc của tài khoản.
1. Cơ chế lỗi logic trong luồng liên kết tài khoản
Khi người dùng thêm số điện thoại hoặc email mới vào trung tâm tài khoản Meta Accounts Center:
- Hệ thống gửi mã xác nhận gồm 6 chữ số (tổng cộng 1.000.000 khả năng).
- Tại giao diện web chính thức, hệ thống chặn sau 5 lần nhập sai. Tuy nhiên, endpoint API ngầm được dùng cho ứng dụng di động lại không áp dụng bộ đếm số lần thử (Missing Rate Limit on Backend Endpoint).
- Bằng cách sử dụng nhiều luồng gửi truy vấn đồng thời qua danh sách Proxy phân tán, kẻ tấn công có thể thử toàn bộ không gian khóa trong vòng chưa đầy 15 phút.
2. Phân tích luồng xác thực bị lỗi
POST /api/v1/auth/verify_association_code HTTP/1.1
Host: graph.instagram.com
Authorization: Bearer <ATTACKER_TOKEN>
Content-Type: application/json
{
"target_account_id": "1849204829",
"verification_code": "482910", // Endpoint không khóa khi gửi liên tục 10.000 request/phút
"flow": "link_accounts"
}3. Bài học cho các nhà phát triển và chuyên gia Pentest
- Đồng bộ chính sách Rate Limit ở mọi tầng: Không bao giờ dựa vào kiểm tra ở tầng giao diện (Client-side validation); mọi endpoint API dù là nội bộ hay công khai đều phải được bảo vệ bởi Token Bucket / Leaky Bucket rate limiter.
- Ràng buộc thời hạn ngắn và hủy mã khi thử sai: Mã OTP cần hết hạn sau 2-3 phút và tự động vô hiệu hóa nếu nhập sai quá 3-5 lần liên tiếp.