Nuxt 4.6.3 được phát hành ngày 27 tháng 10 năm 2026, và cùng ngày nhóm phát triển Nuxt công bố năm thông báo bảo mật. Ghi chú phát hành v4.6.3 liệt kê các bản sửa tương ứng. Bốn bản ghi thông báo, mỗi bản kèm một mã CVE tương ứng, đã được đưa vào phần đã rà soát của GitHub Advisory Database ngày 30 tháng 10, nên tính đến thời điểm viết bài không có gì trong số này là mới. Chúng tôi kiểm tra các nguồn vào ngày 1 tháng 11 năm 2026.

Điểm quan trọng nhất: không phải mọi website Nuxt đều bị ảnh hưởng. Hai thông báo liên quan đến cách xử lý trang trong production, trong những điều kiện cụ thể. Ba thông báo còn lại chỉ liên quan đến máy chủ development và không ảnh hưởng đến bản build production. Một website hoặc bản preview đã triển khai nhưng vô tình chạy nuxt dev vẫn nằm trong phạm vi của ba thông báo đó, nên hãy xác nhận từng môi trường thực sự đang chạy gì trước khi hành động.

Bước một: biết rõ mình đang chạy gì

Hãy hỏi lập trình viên hoặc nhà cung cấp hosting về phiên bản thực tế trong lockfile của ba gói nuxt, @nuxt/nitro-server và @nuxt/vite-builder. Đồng thời hỏi xem production có đang phục vụ bản build hay không, và có tiến trình development nào có thể truy cập từ bên ngoài, bao gồm môi trường preview, tunnel, cổng container và máy chủ staging. Hãy đọc thông tin này từ cấu hình triển khai và quy tắc tường lửa, không dùng công cụ quét.

Nếu dự án vẫn dùng Nuxt 3, lưu ý rằng Nuxt 3 đã hết vòng đời hỗ trợ. Hai thông báo dưới đây bao gồm các dải phiên bản Nuxt 3, và bản sửa 4.6.3 không áp dụng cho những phiên bản đó. Hướng dẫn từ nhóm phát triển là chuyển sang một bản Nuxt 4 được hỗ trợ.

Xử lý trang trong production: hai thông báo

Đường dẫn chưa chuẩn hóa và route rules (GHSA-9v7c-q64q-vv33 / CVE-2026-119200). Ảnh hưởng nuxt và @nuxt/nitro-server >=4.6.0 <4.6.3, đã sửa trong 4.6.3. Bộ định tuyến trang phân giải các đoạn dấu chấm trong URL, nhưng middleware của Nitro và các route rule theo đường dẫn lại thấy đường dẫn trước khi chuẩn hóa. Nếu ứng dụng dựa vào những rule đó để kiểm tra quyền truy cập, chuyển hướng hoặc đặt header, và đường dẫn tới máy chủ ở dạng chưa chuẩn hóa, một yêu cầu có thể vượt qua chúng và dữ liệu render phía máy chủ của trang được bảo vệ có thể bị lộ. Các handler API trong server/api và server/routes không bị chạm tới, và các kiểm tra trong appMiddleware hoặc definePageMeta khớp với route đã phân giải không bị ảnh hưởng. Nuxt 3 và Nuxt 4.0.0 đến 4.5.x không bị ảnh hưởng bởi vấn đề này. Một proxy chuẩn hóa đường dẫn có thể loại bỏ sự lệch này, nhưng đừng mặc định mọi CDN đều làm vậy. Hãy nâng cấp, build lại và triển khai lại, rồi nhờ lập trình viên rà soát việc phân quyền trang và kiểm tra đường dẫn. Nhóm phát triển lưu ý rằng chỉ kiểm tra pathname của yêu cầu là chưa đủ để làm giải pháp tạm, nên hãy ưu tiên nâng cấp thay vì viết mã tự xử lý. Đây không phải lỗi vượt xác thực toàn diện.

Server page islands và redirect rules (GHSA-2fxj-c3j7-rr69, chưa có CVE). Ảnh hưởng nuxt >=3.11.0 <4.6.3, đã sửa trong 4.6.3 cho Nuxt 4. Ứng dụng chỉ bị ảnh hưởng nếu một trang .server.vue có redirect route rule khớp và dựa vào chuyển hướng đó để giữ lại nội dung đã render. Các kiểm tra độc lập phía máy chủ hoặc route middleware không liên quan, và các trang thông thường nằm ngoài thông báo này. Bản sửa áp dụng redirect rule của trang trong quá trình render island. Chuyển hướng không phải là xác thực. Nuxt 3 sẽ không được sửa; nhóm phát triển khuyên nâng cấp lên Nuxt 4.

Chỉ máy chủ development: ba thông báo

Không thông báo nào trong số này ảnh hưởng bản build production. Chúng chỉ đáng lo khi máy chủ development có thể bị truy cập qua TCP hoặc HTTP bởi người bạn không tin cậy.

  • Báo lỗi phía client và đọc tệp (GHSA-x287-wcfc-q46c / CVE-2026-119198). @nuxt/vite-builder >=4.6.0 <4.6.3, đã sửa trong 4.6.3. Một HMR socket có thể truy cập cho phép đọc bất kỳ tệp nào tiến trình dev đọc được, kể cả secret và khóa. Cần truy cập TCP trực tiếp đến máy chủ dev. Cấu hình mặc định lắng nghe trên localhost hạn chế phạm vi lộ, và một trang web từ origin khác không thể tự lấy tệp. Nuxt 3 không bị ảnh hưởng.
  • Runtime config riêng tư bị nhúng (GHSA-648h-gw55-m2g7 / CVE-2026-119199). @nuxt/vite-builder >=3.0.0 <4.0.0 và >=4.0.0 <4.6.3, đã sửa trong 4.6.3. Với Nitro 2, mặc định trong Nuxt 3 và 4, bundle dev nhúng các giá trị runtimeConfig riêng tư được phân giải lúc build, nên truy cập HTTP trực tiếp đến máy chủ dev bị lộ cho phép đọc chúng. Production và Nitro 3 không bị ảnh hưởng. Các giá trị để trống trong nuxt.config và cung cấp qua biến môi trường NUXT_* tương ứng lúc khởi động không bị nhúng qua đường này, nhưng cách bố trí đó không giải quyết các thông báo khác. Nuxt 3 sẽ không được sửa.
  • App secret được sinh tự động (GHSA-3xf4-9g3c-4h4w / CVE-2026-119201). @nuxt/vite-builder >=4.6.0 <4.6.3, đã sửa trong 4.6.3, chỉ khi không cấu hình appSecret một cách tường minh. Tệp .nuxt/app-secret được sinh ra có thể bị tải bởi một client không tin cậy truy cập trực tiếp, và người đó có thể giả mạo cookie phiên dev bằng secret suy ra. Production không bao giờ sinh tệp này. Secret được cấu hình tường minh không bị ảnh hưởng bởi vấn đề tệp này, nhưng vẫn có thể thuộc phạm vi thông báo phía trên.

Cần làm gì

  1. Hạn chế ngay mọi máy chủ development đang bị lộ, chỉ cho lắng nghe trên localhost hoặc đặt phía sau lớp truy cập có xác thực.
  2. Cập nhật lên Nuxt 4.6.3 hoặc bản đã vá mới hơn. Nếu đang dùng Nuxt 3, bản sửa 4.6.3 không áp dụng cho bạn; hãy lên kế hoạch chuyển sang một bản Nuxt 4 được hỗ trợ.
  3. Build lại, triển khai lại và khởi động lại các instance liên quan, rồi xác nhận phiên bản thực tế trong lockfile đã triển khai.
  4. Chạy kiểm tra chức năng và phân quyền trong môi trường staging do bạn sở hữu, đặc biệt với các trang được bảo vệ bằng route rule hoặc chuyển hướng. Hãy sao lưu trước; hướng dẫn chiến lược sao lưu của chúng tôi giải thích cách làm.
  5. Nếu một máy chủ dev có lỗ hổng từng có thể bị client không tin cậy tiếp cận, hãy áp dụng khuyến nghị phòng ngừa của nhóm phát triển cho từng thông báo khớp với phiên bản của bạn. Với thông báo đọc tệp, coi mọi tệp mà tiến trình dev có thể đọc là đã lộ và đổi các thông tin xác thực chứa trong đó, kể cả khóa SSH và secret trong .env. Với thông báo runtime config, đổi các thông tin xác thực được định nghĩa qua runtimeConfig trong nuxt.config. Với thông báo secret được sinh tự động, nếu tệp sinh ra từng có thể bị tải về, hãy xóa tệp đó để nó được sinh lại, hoặc đặt NUXT_APP_SECRET mới, nhằm vô hiệu hóa các phiên dev; secret do bạn tự cấu hình nên dài ít nhất 32 ký tự ngẫu nhiên. Đây là biện pháp phòng ngừa, không phải bằng chứng có thứ gì đã bị lấy.
  6. Lưu giữ nhật ký bao phủ khoảng thời gian bị lộ và rà soát chúng. Hướng dẫn giám sát của chúng tôi cung cấp bối cảnh rộng hơn về ghi nhật ký và cảnh báo.

Giới hạn của điều đã biết

Chúng tôi không tìm thấy báo cáo nào về việc khai thác năm vấn đề này trong các thông báo đã rà soát. Điều đó không chứng minh việc khai thác chưa từng xảy ra, và việc phía bạn không có cảnh báo không có nghĩa là bạn an toàn. Vá lỗi, xác minh phiên bản và rà soát kiểm soát truy cập của chính mình vẫn là cách phản ứng đáng tin cậy. Để có bối cảnh rộng hơn, xem các thực hành bảo mật website tốt nhất.