Lỗ hổng CVE nghiêm trọng Axios: DoS máy chủ Node.js khẩn cấp

Một lỗ hổng bảo mật nghiêm trọng đã được phát hiện trong Axios, một trong những thư viện máy khách HTTP phổ biến nhất trong hệ sinh thái JavaScript. Lỗ hổng này, được định danh là CVE-2026-25639, cho phép những kẻ tấn công từ xa kích hoạt tình trạng Từ chối Dịch vụ (DoS), làm sập các máy chủ Node.js chỉ với một yêu cầu độc hại duy nhất. Việc khai thác lỗ hổng CVE này có thể gây gián đoạn nghiêm trọng cho các ứng dụng web và ảnh hưởng đến tính khả dụng của dịch vụ.
Phân tích kỹ thuật lỗ hổng CVE-2026-25639 trong Axios
Lỗ hổng CVE-2026-25639 nằm sâu trong hàm mergeConfig của Axios. Hàm này chịu trách nhiệm hợp nhất các đối tượng cấu hình khác nhau mà Axios sử dụng cho các yêu cầu HTTP. Sự cố nghiêm trọng này phát sinh khi hàm cố gắng xử lý một đối tượng cấu hình đầu vào chứa khóa đặc biệt __proto__.
Theo quy trình thông thường, Axios lặp lại qua các thuộc tính của đối tượng cấu hình để hợp nhất chúng một cách có chọn lọc. Tuy nhiên, khi một kẻ tấn công cung cấp một đối tượng JSON độc hại chứa __proto__, logic nội bộ của Axios bị phá vỡ. Cụ thể, vấn đề xảy ra ở bước mà Axios cố gắng xác định một chiến lược hợp nhất phù hợp cho thuộc tính này.
Thay vì xử lý __proto__ như một khóa thông thường hoặc bỏ qua nó một cách an toàn, Axios lại vô tình truy xuất Object.prototype. Đây là nguyên mẫu gốc của tất cả các đối tượng trong JavaScript. Sau đó, mã thực thi cố gắng gọi Object.prototype này như thể nó là một hàm thông thường.
Vì Object.prototype bản thân nó là một đối tượng và không phải là một hàm có thể gọi được, thao tác này dẫn đến việc ứng dụng ném ra một TypeError không thể xử lý. Lỗi không mong đợi này khiến tiến trình Node.js chứa ứng dụng Axios bị sập ngay lập tức và đột ngột, gây ra tình trạng DoS.
Điều quan trọng cần lưu ý là cơ chế này khác biệt đáng kể so với các lỗ hổng “Prototype Pollution” phổ biến hơn. Trong trường hợp Prototype Pollution, kẻ tấn công thường tiêm các thuộc tính vào Object.prototype để ảnh hưởng đến các đối tượng khác trong ứng dụng. Tuy nhiên, với lỗ hổng CVE-2026-25639, ứng dụng bị sập trước khi bất kỳ thuộc tính nào có thể bị ô nhiễm, do đó nó là một lỗi kiểu dữ liệu trực tiếp dẫn đến DoS chứ không phải là một lỗ hổng tiêm dữ liệu.
Cơ chế khai thác lỗ hổng DoS và điều kiện tấn công
Vector tấn công mạng này được đánh giá là có độ phức tạp thấp (“Low” attack complexity), làm cho việc khai thác trở nên tương đối dễ dàng. Nó nhắm mục tiêu vào các ứng dụng đáp ứng ba điều kiện cụ thể:
- Chấp nhận đầu vào do người dùng kiểm soát: Ứng dụng phải cho phép người dùng gửi dữ liệu, thường là qua một JSON body trong yêu cầu HTTP POST hoặc PUT.
- Phân tích cú pháp đầu vào JSON: Đầu vào của người dùng phải được phân tích cú pháp bằng
JSON.parse()hoặc một cơ chế tương tự, biến chuỗi JSON thành một đối tượng JavaScript. - Truyền đối tượng kết quả vào cấu hình Axios: Đối tượng JavaScript đã phân tích cú pháp sau đó được truyền trực tiếp hoặc gián tiếp vào một đối số cấu hình của Axios (ví dụ:
axios.get(url, userConfig),axios.post(url, data, userConfig)).
Bằng cách gửi một payload đơn giản như {"__proto__": {"x": 1}} trong phần body của yêu cầu HTTP, kẻ tấn công có thể buộc máy chủ chứa ứng dụng Node.js phải chấm dứt hoạt động, khiến dịch vụ ngừng khả dụng đối với tất cả người dùng. Loại tấn công mạng này có thể gây ra thiệt hại đáng kể cho hoạt động kinh doanh và uy tín của tổ chức.
Ví dụ về payload độc hại:
POST /api/endpoint HTTP/1.1Host: example.comContent-Type: application/jsonContent-Length: 22{"__proto__": {"x": 1}}Đoạn mã phía máy chủ Node.js dễ bị tổn thương có thể trông tương tự như sau. Đây là một kịch bản phổ biến trong các ứng dụng web chấp nhận cấu hình động từ người dùng:
const express = require('express');const axios = require('axios');const app = express();app.use(express.json()); // Middleware để phân tích JSON bodyapp.post('/api/external-data', async (req, res) => { try { const userSuppliedConfig = req.body; // Lấy body JSON từ yêu cầu người dùng // Nếu userSuppliedConfig chứa {"__proto__": ...} // và được truyền trực tiếp vào Axios config, // Axios sẽ bị lỗi khi cố gắng hợp nhất. const response = await axios.get('http://internal-service.com/data', userSuppliedConfig); res.json({ status: 'success', data: response.data }); } catch (error) { console.error('Lỗi khi xử lý yêu cầu hoặc gọi Axios:', error.message); // Trong môi trường production, lỗi này có thể làm sập tiến trình res.status(500).send('Lỗi máy chủ nội bộ'); // Để ý rằng nếu lỗi TypeError không được bắt, toàn bộ ứng dụng sẽ sập }});app.listen(3000, () => { console.log('Máy chủ Node.js đang chạy trên cổng 3000');});Trong ví dụ trên, nếu đối tượng req.body chứa khóa __proto__, Axios sẽ cố gắng hợp nhất nó vào cấu hình của yêu cầu axios.get hoặc axios.post, dẫn đến lỗi TypeError. Lỗi này, nếu không được bắt và xử lý đúng cách ở cấp cao hơn, sẽ gây ra sự cố cho toàn bộ ứng dụng Node.js, dẫn đến việc ngừng dịch vụ một cách không mong muốn.
Các phiên bản bị ảnh hưởng và bản vá bảo mật khẩn cấp
Theo cảnh báo chính thức từ đội ngũ Axios tại GitHub, vấn đề lỗ hổng CVE nghiêm trọng này ảnh hưởng đến tất cả các phiên bản Axios lên đến 1.13.4. Điều này có nghĩa là bất kỳ dự án nào sử dụng Axios phiên bản 1.13.4 trở xuống đều có nguy cơ bị tấn công DoS.
Các nhà phát triển và quản trị hệ thống được khuyến cáo nâng cấp lên phiên bản 1.13.5 hoặc cao hơn ngay lập tức để khắc phục hoàn toàn lỗ hổng CVE này. Đây là một hành động khẩn cấp để bảo vệ tính khả dụng của các ứng dụng.
Các nhà bảo trì Axios đã kịp thời phát hành một bản vá trong phiên bản 1.13.5. Bản vá này được thiết kế để xử lý đúng cách khóa __proto__ trong các đối tượng cấu hình, ngăn chặn lỗi kiểu dữ liệu (TypeError) gây ra sự cố ứng dụng. Người dùng cần cập nhật các gói phụ thuộc của họ bằng trình quản lý gói npm hoặc yarn càng sớm càng tốt để áp dụng bản vá bảo mật này.
Để cập nhật thư viện Axios lên phiên bản an toàn, hãy thực hiện các lệnh sau trong thư mục gốc của dự án của bạn:
Sử dụng npm để cập nhật Axios:
npm install [email protected]Hoặc, để cập nhật lên phiên bản mới nhất (có thể cao hơn 1.13.5 nếu có các bản cập nhật phụ khác):
npm update axiosSử dụng yarn để cập nhật Axios:
yarn add [email protected]Tương tự, để cập nhật lên phiên bản mới nhất:
yarn upgrade axiosViệc thực hiện cập nhật bản vá này là cực kỳ quan trọng để bảo vệ các ứng dụng Node.js khỏi các cuộc tấn công mạng từ chối dịch vụ tiềm tàng. Việc bỏ qua việc cập nhật có thể khiến hệ thống của bạn dễ bị khai thác bởi lỗ hổng CVE nghiêm trọng này, gây ra sự gián đoạn dịch vụ không mong muốn và ảnh hưởng đến trải nghiệm người dùng.
Các quản trị viên hệ thống và nhà phát triển cần ưu tiên việc rà soát và cập nhật thư viện Axios trong tất cả các dự án đang hoạt động. Đảm bảo rằng tất cả các môi trường phát triển, thử nghiệm và sản xuất đều được cập nhật là một phần thiết yếu của chiến lược an toàn thông tin tổng thể. Việc này giúp duy trì tính ổn định, bảo mật và khả dụng của ứng dụng, đồng thời giảm thiểu rủi ro từ các lỗ hổng CVE đã biết.







