Lỗ hổng nghiêm trọng trong Multer Middleware: Hiểu rõ vấn đề và cách khắc phục
Multer, một middleware phổ biến trong hệ sinh thái Node.js để xử lý dữ liệu multipart/form-data, đã được phát hiện tồn tại các lỗ hổng nghiêm trọng có thể dẫn đến các cuộc tấn công Denial of Service (DoS). Bài viết này sẽ phân tích kỹ thuật chi tiết về các lỗ hổng được gán mã CVE-2025-47935 và CVE-2025-47944, đồng thời cung cấp các giải pháp thực tế để bảo vệ ứng dụng của bạn.
Tổng quan về lỗ hổng
Các lỗ hổng được công bố ảnh hưởng đến các phiên bản Multer trước 2.0.0. Cụ thể:
- CVE-2025-47935: Lỗ hổng gây ra tình trạng cạn kiệt tài nguyên (resource exhaustion) và rò rỉ bộ nhớ (memory leak) do xử lý luồng dữ liệu (stream handling) không đúng cách.
- CVE-2025-47944: Lỗ hổng xuất hiện từ phiên bản 1.4.4-lts.1 đến trước 2.0.0, cho phép kẻ tấn công gây ra tình trạng DoS bằng cách gửi các yêu cầu upload multipart/form-data bị biến đổi (malformed request).
Hậu quả của các lỗ hổng này là ứng dụng có thể trở nên không phản hồi hoặc bị crash, dẫn đến gián đoạn dịch vụ và nguy cơ mất dữ liệu. Chúng được phân loại theo CWE-248, liên quan đến xử lý không đúng các điều kiện bất thường (exceptional conditions).
Tác động tiềm tàng
Các lỗ hổng trong Multer có thể bị khai thác với những tác động nghiêm trọng như sau:
- Tấn công Denial of Service (DoS): Kẻ tấn công có thể gửi các yêu cầu multipart/form-data được thiết kế đặc biệt để gây cạn kiệt tài nguyên hệ thống và rò rỉ bộ nhớ, khiến ứng dụng không hoạt động.
- Gián đoạn dịch vụ: Ứng dụng có nguy cơ bị crash hoặc trở nên không khả dụng, ảnh hưởng đến trải nghiệm người dùng và hoạt động kinh doanh.
- Rủi ro bảo mật: Nếu không được vá, các lỗ hổng này có thể trở thành cửa ngõ để kẻ tấn công thực hiện các hành vi phá hoại khác thông qua việc làm gián đoạn hoạt động bình thường của hệ thống.
Giải pháp khắc phục
Để giảm thiểu rủi ro từ các lỗ hổng này, dưới đây là các bước thực hiện mà các nhà phát triển và quản trị viên hệ thống cần lưu ý:
1. Nâng cấp Multer lên phiên bản vá lỗi
Giải pháp hiệu quả nhất là nâng cấp Multer lên phiên bản 2.0.0 hoặc mới hơn, nơi các vấn đề về xử lý luồng dữ liệu đã được sửa. Lệnh nâng cấp như sau:
npm install [email protected]2. Áp dụng các biện pháp tạm thời nếu chưa thể nâng cấp
Trong trường hợp không thể nâng cấp ngay lập tức, một số cấu hình và thay đổi mã nguồn có thể giúp giảm thiểu rủi ro:
- Đảm bảo tất cả các luồng dữ liệu (streams) được đóng đúng cách để ngăn chặn rò rỉ bộ nhớ.
- Triển khai cơ chế xử lý lỗi (error handling) để bắt và xử lý các ngoại lệ có thể dẫn đến crash.
3. Ví dụ mã nguồn xử lý luồng dữ liệu đúng cách
Dưới đây là một đoạn mã minh họa cách xử lý luồng dữ liệu an toàn trong Multer bằng cách sử dụng khối try-catch và đảm bảo luồng được đóng trong khối finally:
const multer = require('multer');
const upload = multer({ dest: './uploads/' });
// Ví dụ xử lý luồng upload an toàn
const uploadHandler = (req, res) => {
try {
// Xử lý quá trình upload
} catch (err) {
console.error(err);
// Xử lý lỗi
} finally {
// Đảm bảo luồng được đóng
req.on('close', () => {
req.stream.destroy();
});
}
};Kết luận
Các lỗ hổng trong Multer trước phiên bản 2.0.0, được gán mã CVE-2025-47935 và CVE-2025-47944, là mối đe dọa nghiêm trọng đối với các ứng dụng Node.js sử dụng middleware này. Việc nâng cấp lên phiên bản mới nhất là cách tiếp cận được khuyến nghị để bảo vệ hệ thống khỏi các cuộc tấn công DoS do rò rỉ bộ nhớ và cạn kiệt tài nguyên. Ngoài ra, việc áp dụng các biện pháp xử lý lỗi và đóng luồng dữ liệu đúng cách sẽ giúp giảm thiểu nguy cơ trong trường hợp chưa thể cập nhật.
Việc duy trì bảo mật cho ứng dụng không chỉ là trách nhiệm kỹ thuật mà còn là yếu tố sống còn để đảm bảo tính liên tục và độ tin cậy của dịch vụ. Hãy hành động ngay hôm nay để bảo vệ hệ thống của bạn.










