-
09/04/2020
-
93
-
600 bài viết
Phát hiện lỗ hổng nghiêm trọng trong JSON Web Token áp dụng cho Node.js
JSON Web Token (JWT) – tiêu chuẩn mã nguồn mở dùng để truyền tải thông tin an toàn giữa phía client và server trong Node.js đang tồn tại lỗ hổng có mã định danh CVE-2023-48238, điểm CVSS là 7,5.
Lỗ hổng này có thể cho phép kẻ xấu thực hiện các cuộc tấn công thay đổi thuật toán (algorithm confusion) được JWT sử dụng để xác minh chữ ký.
Cụ thể, lỗi nằm ở dòng 86 của tệp ‘index.js’, trong đó thuật toán xác minh chữ ký được trích xuất trực tiếp từ chính mã thông báo JWT. Ở giai đoạn này, mã thông báo vẫn chưa được xác minh, khiến nó trở thành nguồn thông tin không đáng tin cậy.
Kẻ tấn công khai thác lỗ hổng này có thể tạo mã thông báo JWT giả mạo chứa thuật toán HS256, ngay cả khi ứng dụng nạn nhân sử dụng thuật toán khác. Mã thông báo này khi được ký bằng khóa RSA công khai của nạn nhân sẽ đánh lừa ứng dụng chấp nhận payload tùy ý của kẻ tấn công.
Lỗ hổng được đánh giá ở mức nghiêm trọng khi JSON Web Token có hơn 4.000 lượt tải xuống hàng tuần và hơn 2.700 kho lưu trữ trên GitHub sử dụng. Đặc biệt, các ứng dụng sử dụng thuật toán RS256 dễ bị tấn công hơn.
Hiện chưa có bản vá cho lỗ hổng này nên quản trị viên có thể thực hiện các giải pháp sau để bảo vệ ứng dụng của mình:
Lỗ hổng này có thể cho phép kẻ xấu thực hiện các cuộc tấn công thay đổi thuật toán (algorithm confusion) được JWT sử dụng để xác minh chữ ký.
Cụ thể, lỗi nằm ở dòng 86 của tệp ‘index.js’, trong đó thuật toán xác minh chữ ký được trích xuất trực tiếp từ chính mã thông báo JWT. Ở giai đoạn này, mã thông báo vẫn chưa được xác minh, khiến nó trở thành nguồn thông tin không đáng tin cậy.
Kẻ tấn công khai thác lỗ hổng này có thể tạo mã thông báo JWT giả mạo chứa thuật toán HS256, ngay cả khi ứng dụng nạn nhân sử dụng thuật toán khác. Mã thông báo này khi được ký bằng khóa RSA công khai của nạn nhân sẽ đánh lừa ứng dụng chấp nhận payload tùy ý của kẻ tấn công.
Lỗ hổng được đánh giá ở mức nghiêm trọng khi JSON Web Token có hơn 4.000 lượt tải xuống hàng tuần và hơn 2.700 kho lưu trữ trên GitHub sử dụng. Đặc biệt, các ứng dụng sử dụng thuật toán RS256 dễ bị tấn công hơn.
Hiện chưa có bản vá cho lỗ hổng này nên quản trị viên có thể thực hiện các giải pháp sau để bảo vệ ứng dụng của mình:
- Sửa đổi chữ ký của hàm giải mã: Bằng cách thiết lập rõ ràng thuật toán trong hàm giải mã, ứng dụng có thể ngăn thư viện dựa trên thuật toán không tin cậy được nhúng trong token JWT.
- Xác thực khóa bí mật: Trong chức năng giải mã, hãy kiểm tra xem khóa bí mật có thể là khóa công khai hay không. Nếu có, hãy thiết lập rõ ràng khóa này thành khóa công khai để đảm bảo xác thực hợp lệ.
Theo Security Online