SecLab
Authentication & SessionwalkthroughĐộ khó 3/525 phút

Dò tài khoản: bốn kênh, không chỉ thông báo lỗi

Mục tiêu: Sau bài này bạn tìm được bốn kênh tiết lộ tài khoản tồn tại, và biết vì sao thống nhất thông báo lỗi chỉ đóng một.

V6CWE-200A07:2025info-disclosure
Bước 1 / 5 · read5 phút

Vì sao "email này không tồn tại" là một vấn đề

Dò tài khoản là lỗ hổng mà mọi người biết một nửa: nửa được biết là thông báo lỗi, và ba kênh còn lại thì không.

Trước hết, vì sao nó là vấn đề — vì đây là chỗ hay bị gạt đi với câu "email không phải secret":

  • Nó biến một danh sách email thành một danh sách người dùng. Một danh sách rò rỉ từ nơi khác lọc xuống thành "những người có tài khoản ở đây" — và đó là danh sách mục tiêu cho password spraying với các mật khẩu đã lộ.
  • Với một số dịch vụ, việc có tài khoản đã là thông tin nhạy cảm. Một ứng dụng sức khoẻ tâm thần, một dịch vụ pháp lý, một trang tìm việc: xác nhận alice@corp.local có tài khoản là tiết lộ về Alice.
  • Nó là bước một của mọi cuộc tấn công vào xác thực. Không ai brute-force một email họ không biết có tồn tại.

Bốn kênh, và ba kênh dưới vẫn mở sau khi bạn thống nhất thông báo lỗi:

KênhBiểu hiệnVì sao khó đóng
1. Thông báo lỗi"Email không tồn tại" vs "Mật khẩu sai"Dễ nhất — một chuỗi
2. Thời gian phản hồiEmail không tồn tại trả về nhanh hơn vì không có hash để verifyCần cố ý làm chậm
3. Luồng đăng ký"Email đã được sử dụng" khi đăng kýKhông thể im lặng — người dùng cần biết
4. Quên mật khẩu"Đã gửi email" vs "Không tìm thấy tài khoản"Cùng dạng với 1, nhưng ở endpoint khác

Kênh 2 là kênh đáng nói nhất vì nó lộ ra do bản vá của kênh 1. Hash mật khẩu bằng Argon2id tốn khoảng 50–100 ms cố ý. Nếu email không tồn tại, code thoát sớm và không hash gì — nên response về sau 5 ms. Chênh lệch 20 lần đó đo được qua mạng một cách đáng tin, và nó nói chính xác điều mà thông báo lỗi vừa được sửa để không nói.

Kênh 3 là kênh không đóng hoàn toàn được, và đó là một đánh đổi thật cần quyết định thay vì bỏ qua.

Xem lộ trình

Bình luận

Tham gia thảo luận
Đăng ký để bình luận

Bình luận cần tài khoản đã hoàn thành ít nhất một bài học. Điều kiện đó là thứ giữ cho luồng thảo luận này còn đáng đọc: mỗi ý kiến gắn với một người có thể bị hỏi lại, và reputation tích luỹ theo thời gian.

Đăng kýĐăng nhập

Bạn vẫn đọc được toàn bộ bình luận dưới đây mà không cần tài khoản. Đăng nhập xong bạn sẽ quay lại đúng chỗ này, không phải đầu trang.

Đang tải bình luận…