Dự án

Tổng quan

Hồ sơ

Hành động

Bug #2128

mở
HN ĐĐ

[BE][Critical][Weak Default JWT Secrets — Trivially Brute-Forceable — JWT]

Bug #2128: [BE][Critical][Weak Default JWT Secrets — Trivially Brute-Forceable — JWT]

Thêm bởi Hải Yến Ngô cách đây 24 ngày. Cập nhật cách đây 17 ngày.

Trạng thái:
Commit
Mức ưu tiên:
Cao
Phân công cho:
Phiên bản:
-
Bắt đầu:
14-08-2026
Hết hạn:
Tiến độ:

100%

Thời gian ước lượng:
Lỗi tại bản build:
Build tại bản:
Người Test:
Thời gian test xong:

Mô tả

Tạm dịch
Issue – Vấn đề
Hệ thống đang sử dụng JWT secret mặc định yếu và có giá trị hardcode, khiến secret có thể bị đoán hoặc brute-force trong thời gian rất ngắn.
Các vị trí phát hiện:
src/auth/auth.module.ts – line 15
src/auth/jwt.strategy.ts – line 18
.env.example – lines 3, 5
Hiện tại:
Access Token sử dụng giá trị fallback "secretKey" — chỉ 9 ký tự và là một từ phổ biến.
Refresh Token sử dụng secret mặc định "changeme" — 8 ký tự và là một placeholder phổ biến.
Nếu các biến môi trường tương ứng không được cấu hình trong môi trường production, hệ thống có thể sử dụng trực tiếp các secret yếu này để ký JWT.
Vấn đề nghiêm trọng hơn là JWT sử dụng cơ chế HMAC (ví dụ HS256). Khi attacker có được một JWT hợp lệ, họ có thể thực hiện offline brute-force/dictionary attack để tìm ra secret mà không cần tương tác thêm với hệ thống.
Sau khi có secret, attacker có thể tự tạo và ký JWT hợp lệ với payload tùy ý.
Impact – Ảnh hưởng
Nếu attacker crack được JWT secret, hậu quả có thể rất nghiêm trọng:
JWT Forgery: Attacker có thể tự tạo JWT hợp lệ.
User Impersonation: Có thể giả mạo user khác.
Administrator Impersonation: Có khả năng tạo token cho tài khoản Administrator.
Persistent Authentication Bypass: Không phụ thuộc vào việc token ban đầu còn tồn tại; attacker có thể tiếp tục tạo token mới miễn là secret chưa được thay đổi.
Unauthorized API Access: Truy cập các API yêu cầu JWT authentication.
Privilege Escalation: Có thể tạo token với identity/claims có quyền cao nếu hệ thống tin tưởng các claims này.
Toàn hệ thống có nguy cơ bị ảnh hưởng: Các API sử dụng cùng JWT secret để xác thực đều có thể bị khai thác.
Đặc biệt, khi kết hợp với Finding #1 – JWT Algorithm Confusion, mức độ nguy hiểm tăng đáng kể. Tuy nhiên, việc sử dụng secret yếu vẫn là một lỗ hổng độc lập, vì attacker có thể forge JWT ngay cả khi hệ thống đã chặn alg:none.
Root Cause – Nguyên nhân
Nguyên nhân chính:
JWT secret có hardcoded fallback value.
Secret có độ dài và entropy thấp.
Sử dụng cùng một secret cố định trong thời gian dài.
Không bắt buộc application phải dừng khởi động khi JWT secret chưa được cấu hình.
Access Token và Refresh Token có secret mặc định không đủ mạnh.

Hành động

Định dạng khác của trang này: PDF Atom