Tác động của kẻ tấn công
Xác thực JWT không đúng cách cho phép kẻ tấn công bỏ qua các cơ chế xác thực bằng cách giả mạo xác nhận quyền sở hữu hoặc sử dụng lại mã thông báo đã hết hạn [S1]. Nếu máy chủ chấp nhận mã thông báo không có chữ ký hợp lệ, kẻ tấn công có thể sửa đổi tải trọng để nâng cao đặc quyền hoặc mạo danh bất kỳ người dùng nào [S1]. Hơn nữa, việc không thực thi yêu cầu hết hạn (exp) cho phép kẻ tấn công sử dụng mã thông báo bị xâm phạm vô thời hạn [S1].
Nguyên nhân gốc rễ
Mã thông báo web JSON (JWT) là cấu trúc dựa trên JSON được sử dụng để thể hiện các xác nhận quyền sở hữu được ký điện tử hoặc được bảo vệ toàn vẹn [S1]. Lỗi bảo mật thường xuất phát từ hai lỗ hổng triển khai chính:
- Chấp nhận JWT không bảo mật: Nếu một dịch vụ không thực thi nghiêm ngặt việc xác minh chữ ký, dịch vụ đó có thể xử lý "JWT không bảo mật" khi không có chữ ký và thuật toán được đặt thành "none" [S1]. Trong trường hợp này, máy chủ tin cậy các xác nhận quyền sở hữu trong tải trọng mà không xác minh tính toàn vẹn của chúng [S1].
- Thiếu xác thực yêu cầu: Yêu cầu
exp(thời gian hết hạn) xác định thời gian vào hoặc sau đó JWT không được chấp nhận để xử lý [S1]. Xác nhận quyền sở hữuaud(đối tượng) xác định những người nhận dự định của mã thông báo [S1]. Nếu những điều này không được chọn, máy chủ có thể chấp nhận các mã thông báo đã hết hạn hoặc dành cho một ứng dụng khác [S1].
Sửa chữa bê tông
- Thực thi chữ ký mật mã: Định cấu hình ứng dụng để từ chối mọi JWT không sử dụng thuật toán ký mạnh mẽ, được phê duyệt trước (chẳng hạn như RS256).
- Xác thực hết hạn: Thực hiện kiểm tra bắt buộc để đảm bảo ngày và giờ hiện tại trước thời gian được chỉ định trong yêu cầu [S1].
- Xác minh đối tượng: Đảm bảo xác nhận quyền sở hữu
audchứa giá trị xác định dịch vụ địa phương; nếu dịch vụ không được xác định trong yêu cầuaudthì mã thông báo phải bị từ chối [S1]. - Ngăn chặn phát lại: Sử dụng xác nhận quyền sở hữu
jti(JWT ID) để chỉ định một mã định danh duy nhất cho mỗi mã thông báo, cho phép máy chủ theo dõi và từ chối các mã thông báo [S1] được sử dụng lại.
Chiến lược phát hiện
Các lỗ hổng trong xử lý JWT có thể được xác định bằng cách phân tích cấu trúc mã thông báo và hành vi phản hồi của máy chủ:
- Kiểm tra tiêu đề: Kiểm tra tiêu đề
alg(thuật toán) để đảm bảo nó không được đặt thành "none" và sử dụng các tiêu chuẩn mật mã dự kiến [S1]. - Xác minh khiếu nại: Xác nhận sự hiện diện và tính hợp lệ của các xác nhận quyền sở hữu
exp(hết hạn) vàaud(đối tượng) trong tải trọng JSON [S1]. - Kiểm tra xác thực: Kiểm tra xem máy chủ có từ chối chính xác các mã thông báo đã hết hạn theo yêu cầu
exphay dành cho đối tượng khác như được xác định bởi yêu cầu [S1] hay không.
