-
09/04/2020
-
112
-
1.080 bài viết
Lỗ hổng nghiêm trọng trên Next.js cho phép vượt qua cơ chế xác thực
Một lỗ hổng bảo mật cực kỳ nghiêm trọng vừa được phát hiện trên framework Next.js, đe dọa trực tiếp các ứng dụng web trên toàn cầu. Lỗ hổng này cho phép kẻ tấn công truy cập trực tiếp vào các khu vực quản trị và dữ liệu nhạy cảm mà không cần bất kỳ thông tin đăng nhập nào, đặt ra cảnh báo nghiêm túc cho các tổ chức dựa hoàn toàn vào middleware của Next.js để bảo vệ ứng dụng.
Lỗ hổng mang mã định danh CVE-2025-29927 xuất phát từ cách Next.js xử lý header x-middleware-subrequest trong middleware. Ban đầu, header này được thiết kế để nhận diện các subrequest nội bộ và ngăn vòng lặp vô hạn trong middleware. Tuy nhiên, việc triển khai chưa đúng cách đã tạo ra kẽ hở: các yêu cầu bên ngoài có thể giả mạo header, khiến middleware nhầm nhận là subrequest nội bộ và bỏ qua toàn bộ kiểm tra authorization.
Kẻ tấn công có thể gửi các yêu cầu HTTP kèm header x-middleware-subrequest được tùy chỉnh. Khi middleware nhận header này, nó sẽ nhầm tưởng đây là subrequest nội bộ, cho phép truy cập trực tiếp vào các endpoint quản trị hoặc dữ liệu nhạy cảm mà không cần đăng nhập. Một ví dụ cơ bản về cách khai thác như sau:
Cách khai thác thay đổi theo phiên bản Next.js. Với các phiên bản từ 12.2 trở xuống, header cần thiết là pages/_middleware để vượt qua middleware trong thư mục pages. Các phiên bản từ 12.2 đến trước 13.2.0 phải sử dụng middleware.ts làm giá trị header. Ngay cả với các phiên bản từ 13.2.0 trở đi, mặc dù có cơ chế bảo vệ độ sâu đệ quy, lỗ hổng cơ bản vẫn tồn tại nếu tin tặc lặp tên middleware trong header. Các nhà nghiên cứu bảo mật đã phát triển proof-of-concept scripts, tự động quét các endpoint quản trị phổ biến như /admin, /dashboard hay /settings, chèn header độc hại để nhanh chóng xác định các điểm truy cập dễ bị tấn công trên toàn bộ ứng dụng.
Hậu quả của lỗ hổng này đặc biệt nghiêm trọng đối với những ứng dụng chỉ dựa vào middleware Next.js để bảo vệ. Tin tặc có thể truy cập dữ liệu nhạy cảm của người dùng, thay đổi cấu hình ứng dụng hoặc thực thi các chức năng quản trị mà không cần thông tin xác thực. Tình huống càng nguy hiểm hơn khi ứng dụng sử dụng JWT hoặc cookie làm cơ chế xác thực chính, bởi header độc hại có thể hoàn toàn vượt qua các kiểm tra token, khiến lớp bảo vệ middleware trở nên vô hiệu. Điểm CVSS 3.1 của lỗ hổng này được đánh giá 9.8, cho thấy mức độ nghiêm trọng và khả năng khai thác thực tế cao.
Để giảm thiểu rủi ro, các tổ chức sử dụng Next.js cần:
Lỗ hổng mang mã định danh CVE-2025-29927 xuất phát từ cách Next.js xử lý header x-middleware-subrequest trong middleware. Ban đầu, header này được thiết kế để nhận diện các subrequest nội bộ và ngăn vòng lặp vô hạn trong middleware. Tuy nhiên, việc triển khai chưa đúng cách đã tạo ra kẽ hở: các yêu cầu bên ngoài có thể giả mạo header, khiến middleware nhầm nhận là subrequest nội bộ và bỏ qua toàn bộ kiểm tra authorization.
Kẻ tấn công có thể gửi các yêu cầu HTTP kèm header x-middleware-subrequest được tùy chỉnh. Khi middleware nhận header này, nó sẽ nhầm tưởng đây là subrequest nội bộ, cho phép truy cập trực tiếp vào các endpoint quản trị hoặc dữ liệu nhạy cảm mà không cần đăng nhập. Một ví dụ cơ bản về cách khai thác như sau:
Mã:
GET /admin HTTP/1.1
Host: vulnerable-app.com
x-middleware-subrequest: pages/_middleware
Cách khai thác thay đổi theo phiên bản Next.js. Với các phiên bản từ 12.2 trở xuống, header cần thiết là pages/_middleware để vượt qua middleware trong thư mục pages. Các phiên bản từ 12.2 đến trước 13.2.0 phải sử dụng middleware.ts làm giá trị header. Ngay cả với các phiên bản từ 13.2.0 trở đi, mặc dù có cơ chế bảo vệ độ sâu đệ quy, lỗ hổng cơ bản vẫn tồn tại nếu tin tặc lặp tên middleware trong header. Các nhà nghiên cứu bảo mật đã phát triển proof-of-concept scripts, tự động quét các endpoint quản trị phổ biến như /admin, /dashboard hay /settings, chèn header độc hại để nhanh chóng xác định các điểm truy cập dễ bị tấn công trên toàn bộ ứng dụng.
Hậu quả của lỗ hổng này đặc biệt nghiêm trọng đối với những ứng dụng chỉ dựa vào middleware Next.js để bảo vệ. Tin tặc có thể truy cập dữ liệu nhạy cảm của người dùng, thay đổi cấu hình ứng dụng hoặc thực thi các chức năng quản trị mà không cần thông tin xác thực. Tình huống càng nguy hiểm hơn khi ứng dụng sử dụng JWT hoặc cookie làm cơ chế xác thực chính, bởi header độc hại có thể hoàn toàn vượt qua các kiểm tra token, khiến lớp bảo vệ middleware trở nên vô hiệu. Điểm CVSS 3.1 của lỗ hổng này được đánh giá 9.8, cho thấy mức độ nghiêm trọng và khả năng khai thác thực tế cao.
Để giảm thiểu rủi ro, các tổ chức sử dụng Next.js cần:
- Cập nhật bản vá bảo mật ngay khi có sẵn.
- Đánh giá toàn bộ middleware đang triển khai, không dựa duy nhất vào một lớp bảo vệ.
- Triển khai các lớp kiểm soát authorization bổ sung theo chiến lược defense-in-depth, đảm bảo quyền truy cập được kiểm soát ở nhiều tầng của ứng dụng
Tổng hợp
Chỉnh sửa lần cuối: