FixVibe
Covered by FixVibehigh

Bảo mật JWT: Rủi ro về mã thông báo không bảo đảm và thiếu xác thực yêu cầu

Mã thông báo Web JSON (JWT) cung cấp tiêu chuẩn để chuyển xác nhận quyền sở hữu, nhưng tính bảo mật dựa vào xác thực nghiêm ngặt. Việc không xác minh chữ ký, thời gian hết hạn hoặc đối tượng dự định sẽ cho phép kẻ tấn công bỏ qua xác thực hoặc phát lại mã thông báo.

CWE-347CWE-287CWE-613

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ữu aud (đố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 aud chứ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ầu aud thì 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 exp hay dành cho đối tượng khác như được xác định bởi yêu cầu [S1] hay không.