Thông tin về lỗ hổng bảo mật trong middleware của Next.js
Lỗ hổng nghiêm trọng trong middleware của Next.js, được xác định là CVE-2025-29927, cho phép kẻ tấn công vượt qua các biện pháp bảo mật của middleware bằng cách thao tác với header x-middleware-subrequest.
Các hệ thống và phiên bản bị ảnh hưởng
Lỗ hổng này đặc biệt ảnh hưởng đến các ứng dụng Next.js chạy các phiên bản trước 14.2.25 và trước 15.2.3. Điều này bao gồm tất cả các phiên bản từ 11.1.4 đến 13.5.6, 14.x trước 14.2.25, và 15.x trước 15.2.3.
Phân tích kỹ thuật
Vấn đề cốt lõi xuất phát từ việc xác thực không đầy đủ của header x-middleware-subrequest trong middleware của Next.js. Header này ban đầu được thiết kế cho mục đích nội bộ để ngăn chặn vòng lặp thực thi middleware vô hạn. Tuy nhiên, kẻ tấn công có thể khai thác lỗ hổng này bằng cách tiêm header x-middleware-subrequest vào các yêu cầu, từ đó vượt qua các kiểm tra bảo mật và đạt được quyền truy cập trái phép.
Phương thức tấn công
Sự khai thác này liên quan đến việc tạo ra các yêu cầu HTTP có chứa header độc hại:
GET /protected-route HTTP/1.1
Host: vulnerable-app.com
x-middleware-subrequest: true
Logic của middleware không xác thực hoặc chặn header này sẽ vô tình cấp quyền truy cập vào các tài nguyên được bảo vệ mà không cần xác thực.
Thông tin về bản vá
Next.js đã giải quyết lỗ hổng này trong các phiên bản:
- 14.2.25
- 15.2.3
Việc nâng cấp ngay lập tức lên các phiên bản này là rất quan trọng. Nếu không thể vá ngay, hãy thực hiện logic middleware sau như một biện pháp tạm thời:
export function middleware(request: NextRequest) {
if (request.headers.has('x-middleware-subrequest')) {
return new Response('Unauthorized', { status: 401 });
}
return NextResponse.next();
}
Phương pháp phát hiện
Để phát hiện các nỗ lực khai thác có thể, hãy theo dõi nhật ký yêu cầu HTTP để tìm sự xuất hiện của header x-middleware-subrequest. Các mục nhật ký nghi ngờ có thể giống như:
GET /protected-route HTTP/1.1 200 - x-middleware-subrequest: true
Việc triển khai các cơ chế cảnh báo cho các mẫu nhật ký như vậy là điều nên làm.
Các kịch bản tác động
Lỗ hổng này gây ra rủi ro lớn cho các ứng dụng phụ thuộc vào middleware để xác thực và phân quyền. Kẻ tấn công có thể đạt được quyền truy cập trái phép vào các tài nguyên nhạy cảm bằng cách vượt qua các biện pháp bảo vệ dựa trên middleware.
Chiến lược khắc phục
- Nâng cấp lên các phiên bản đã được vá: Cập nhật lên các phiên bản Next.js 14.2.25 hoặc 15.2.3 để giải quyết lỗ hổng.
- Triển khai xác thực header: Sử dụng logic middleware đã cung cấp để xác thực header
x-middleware-subrequestvà ngăn chặn quyền truy cập trái phép. - Theo dõi nhật ký: Thường xuyên theo dõi nhật ký yêu cầu HTTP để phát hiện hoạt động nghi ngờ liên quan đến header
x-middleware-subrequest.
Bản vá chính thức và biện pháp thay thế
Next.js đã phát hành các bản vá cho các phiên bản bị ảnh hưởng, và các bản vá quay ngược cũng có sẵn cho các phiên bản trước đó. Nếu việc vá không khả thi, việc triển khai logic middleware tạm thời là cần thiết.
Thời gian
– **2025-02-27**: Báo cáo lỗ hổng tới đội ngũ Next.js qua báo cáo lỗ hổng riêng tư trên GitHub
– **2025-03-14**: Đội ngũ Next.js bắt đầu phân loại báo cáo
– **2025-03-14**: Bản vá được đẩy cho Next.js 15.x
– **2025-03-14**: Bản vá được đẩy cho Next.js 14.x
– **2025-03-17**: Next.js 14.2.25 được phát hành
– **2025-03-18**: Next.js 15.2.3 được phát hành
– **2025-03-18**: CVE-2025-29927 được phát hành bởi GitHub
– **2025-03-21**: Cảnh báo bảo mật được công bố
– **2025-03-22**: Next.js 13.5.9 được phát hành
– **2025-03-23**: Next.js 12.3.5 được phát hành.
Kết luận
CVE-2025-29927 đại diện cho một rủi ro bảo mật nghiêm trọng cho các ứng dụng Next.js. Hành động ngay lập tức, bao gồm việc nâng cấp lên các phiên bản đã được vá và thực hiện xác thực header, là cần thiết để bảo vệ các ứng dụng khỏi bị khai thác tiềm ẩn. Các đội ngũ bảo mật nên luôn cảnh giác, sử dụng các chiến lược phát hiện để xác định và phản ứng kịp thời trước các mối đe dọa.









