Duy Linh✔
Writer
Flowise, nền tảng mã nguồn mở phổ biến dùng để xây dựng tác nhân AI và quy trình làm việc với mô hình ngôn ngữ lớn (LLM), vừa bị phát hiện thêm sáu lỗ hổng bảo mật mới. Các lỗ hổng này cho phép kẻ tấn công không cần xác thực hoặc chỉ có quyền hạn thấp thực hiện tấn công thực thi mã từ xa (RCE) trên các máy chủ Flowise tự lưu trữ cũng như môi trường đám mây đang sử dụng các phiên bản bị ảnh hưởng.

Nếu không được vá kịp thời, các lỗ hổng có thể khiến tổ chức bị chiếm toàn bộ máy chủ, đánh cắp dữ liệu và thao túng quy trình xử lý AI.
Trước đó, các cảnh báo bảo mật trên GitHub cũng ghi nhận nhiều vấn đề nghiêm trọng của Flowise, gồm lỗ hổng chiếm đoạt tài khoản thông qua quy trình đặt lại mật khẩu không an toàn (CVE-2025-58434), cùng nhiều lỗ hổng cho phép dữ liệu do người dùng cung cấp được thực thi dưới dạng JavaScript thô (CVE-2025-59434, CVE-2025-59528 và GHSA-7944-7c6r-55vv).
Nút Model Context Protocol (MCP) tùy chỉnh của Flowise cũng từng liên quan đến nhiều lỗ hổng RCE như CVE-2026-40933, CVE-2026-41268, CVE-2025-59528 và GHSA-6933-jpx5-q87q, cho thấy tình trạng sử dụng cơ chế sandbox không an toàn mang tính hệ thống trong các công cụ AI.
Qua quá trình phân tích mã nguồn Flowise 3.1.1 và 3.1.2, các nhà nghiên cứu phát hiện thêm sáu lỗ hổng RCE, trong đó có những lỗ hổng đã vượt qua các bản vá trước hoặc tái sử dụng các thiết kế thiếu an toàn.
Đáng chú ý, một trong số đó trùng với CVE-2026-41264, lỗ hổng RCE trong node CSVAgent từng được Flowise vá ở các phiên bản trước. Điều này cho thấy bản vá ban đầu chưa hoàn thiện và lỗ hổng vẫn có thể bị khai thác ở các bản dựng sau.
Các lỗ hổng mới liên quan đến việc lạm dụng Python, JavaScript và biến môi trường. Trong nhiều trường hợp, kẻ tấn công chỉ cần khai thác các trường cấu hình do người dùng kiểm soát, vốn được xem là an toàn trong quá trình xây dựng quy trình làm việc.
Mặc dù Flowise đã áp dụng cơ chế bảo vệ bằng danh sách từ chối và yêu cầu mã phải bắt đầu bằng một lệnh gọi readcsv duy nhất, các nhà nghiên cứu vẫn chứng minh được nhiều cách vượt qua cơ chế này, bao gồm khai thác hàm readpickle của pandas để giải mã dữ liệu độc hại và sử dụng pandas.io.common.
Trong kịch bản tấn công thực tế, kẻ tấn công có thể tạo payload pickle được mã hóa Base64 để khởi chạy reverse shell, sau đó truyền qua trường 'Additional Parameters' của CSVAgent và kích hoạt luồng trò chuyện thông qua API dự đoán nhằm giành quyền thực thi mã từ xa hoàn toàn trên máy chủ Flowise.

RCE thông qua pandas (Nguồn: Elttam).
Một hướng tấn công RCE khác xuất phát từ việc Flowise tiếp tục sử dụng sandbox vm2 đã lỗi thời để thực thi JavaScript thông qua điểm cuối /api/v1/node-custom-function.
Theo các nhà nghiên cứu của Elttam, Flowise đã nhanh chóng trở thành một trong những dự án GitHub hàng đầu trong lĩnh vực xây dựng quy trình làm việc AI, hỗ trợ cả triển khai tự lưu trữ và các gói doanh nghiệp trên nền tảng đám mây với khả năng hỗ trợ đa không gian làm việc.
Mặc dù Flowise giới hạn sandbox chỉ cho phép một số mô-đun nhất định, hệ thống vẫn cho phép sử dụng axios, moment và node-fetch, đồng thời sử dụng phiên bản vm2 còn tồn tại lỗ hổng CVE-2026-22709. Lỗ hổng này cho phép thoát khỏi sandbox bằng cách khai thác ngăn xếp lỗi và child_process.execSync.
Ngay cả sau khi Flowise tăng cường sandbox và vô hiệu hóa vm2 theo mặc định, các nhà nghiên cứu vẫn phát hiện phương thức khai thác mới dựa trên lỗ hổng duyệt thư mục CVE-2022-24785 của moment. Kỹ thuật này kết hợp với chức năng tải tài liệu của Flowise để ghi tệp JavaScript độc hại vào thư mục .flowise/storage, sau đó nạp và thực thi thông qua moment.
Các nghiên cứu tiếp theo còn cho thấy vm2 vẫn có thể được truy cập thông qua các node AgentAsTool, ChatflowTool và ExecuteFlow. Các node này gọi hàm executeJavaScriptCode với tham số useSandbox=false.

Các thông số bổ sung (Nguồn: Elttam).
Trong những node này, tham số baseURL chỉ trải qua bước kiểm tra isValidURL đơn giản, bỏ qua phần băm của URL. Điều này cho phép kẻ tấn công chèn mã JavaScript tùy ý vào đoạn mã được thực thi trong sandbox bằng cách đưa payload vào phần hash của URL.
Kỹ thuật trên xác nhận phương thức thoát khỏi sandbox dựa trên moment vẫn tồn tại trong các bản cập nhật Flowise sau đó, cho thấy việc chỉ cập nhật vm2 không đủ để loại bỏ hoàn toàn rủi ro.
Flowise đã cố gắng giảm thiểu nguy cơ bằng cách giới hạn các lệnh chỉ còn node, npx, python, python3 và docker, đồng thời đưa một số biến môi trường nguy hiểm như PATH và NODEOPTIONS vào danh sách đen. Tuy nhiên, nhiều biến môi trường quan trọng khác vẫn chưa được kiểm soát.
Bằng cách tận dụng các kỹ thuật khai thác biến môi trường đã được công bố trước đây, trong đó có thủ thuật PYTHONWARNINGS/BROWSER của Joern, các nhà nghiên cứu đã thực hiện thành công RCE thông qua máy chủ MCP Python3. Họ cũng sử dụng Node.js với các đối số trỏ đến /proc/self/environ, đồng thời ghi đè biến môi trường HOME để biến tệp môi trường thành mã JavaScript hợp lệ chứa payload reverse shell.
Flowise đã khắc phục một phần các vấn đề thông qua nhiều yêu cầu kéo (pull request), bao gồm loại bỏ các node CSVAgent và AirtableAgent do lỗi chuẩn hóa NFKC, loại bỏ moment khỏi danh sách các thư viện được phép trong vm2, bổ sung danh sách cho phép đối với biến môi trường và thay đổi giao thức MCP mặc định từ stdio sang SSE.
Tuy nhiên, các nhà nghiên cứu nhấn mạnh rằng việc tiếp tục dựa vào vm2 vẫn tiềm ẩn nhiều rủi ro do liên tục xuất hiện các kỹ thuật thoát khỏi sandbox mới. Họ khuyến nghị Flowise chuyển sang isolated-vm hoặc một cơ chế cách ly mạnh hơn, đặc biệt với các hệ thống AI đa người dùng.
Ngoài ra, quản trị viên được khuyến cáo nâng cấp Flowise lên phiên bản bảo mật mới nhất, kiểm tra các điểm cuối dự đoán và chức năng tùy chỉnh của node đang bị công khai, vô hiệu hóa hoặc hạn chế các node thực thi Python và JavaScript tùy chỉnh, đồng thời không bật CUSTOMMCPPROTOCOL=stdio nếu không thực sự cần thiết và chưa có các biện pháp bảo vệ nghiêm ngặt ở cấp mạng và máy chủ.

Nếu không được vá kịp thời, các lỗ hổng có thể khiến tổ chức bị chiếm toàn bộ máy chủ, đánh cắp dữ liệu và thao túng quy trình xử lý AI.
Trước đó, các cảnh báo bảo mật trên GitHub cũng ghi nhận nhiều vấn đề nghiêm trọng của Flowise, gồm lỗ hổng chiếm đoạt tài khoản thông qua quy trình đặt lại mật khẩu không an toàn (CVE-2025-58434), cùng nhiều lỗ hổng cho phép dữ liệu do người dùng cung cấp được thực thi dưới dạng JavaScript thô (CVE-2025-59434, CVE-2025-59528 và GHSA-7944-7c6r-55vv).
Nút Model Context Protocol (MCP) tùy chỉnh của Flowise cũng từng liên quan đến nhiều lỗ hổng RCE như CVE-2026-40933, CVE-2026-41268, CVE-2025-59528 và GHSA-6933-jpx5-q87q, cho thấy tình trạng sử dụng cơ chế sandbox không an toàn mang tính hệ thống trong các công cụ AI.
Qua quá trình phân tích mã nguồn Flowise 3.1.1 và 3.1.2, các nhà nghiên cứu phát hiện thêm sáu lỗ hổng RCE, trong đó có những lỗ hổng đã vượt qua các bản vá trước hoặc tái sử dụng các thiết kế thiếu an toàn.
Đáng chú ý, một trong số đó trùng với CVE-2026-41264, lỗ hổng RCE trong node CSVAgent từng được Flowise vá ở các phiên bản trước. Điều này cho thấy bản vá ban đầu chưa hoàn thiện và lỗ hổng vẫn có thể bị khai thác ở các bản dựng sau.
Các lỗ hổng mới liên quan đến việc lạm dụng Python, JavaScript và biến môi trường. Trong nhiều trường hợp, kẻ tấn công chỉ cần khai thác các trường cấu hình do người dùng kiểm soát, vốn được xem là an toàn trong quá trình xây dựng quy trình làm việc.
Các lỗ hổng RCE ảnh hưởng trực tiếp đến Flowise
Một trong những phát hiện đáng chú ý nhất là đường dẫn thực thi Python phía máy chủ thông qua node CSVAgent. Thành phần này sử dụng Pyodide để chạy mã pandas do người dùng cung cấp nhằm tiền xử lý tệp CSV.Mặc dù Flowise đã áp dụng cơ chế bảo vệ bằng danh sách từ chối và yêu cầu mã phải bắt đầu bằng một lệnh gọi readcsv duy nhất, các nhà nghiên cứu vẫn chứng minh được nhiều cách vượt qua cơ chế này, bao gồm khai thác hàm readpickle của pandas để giải mã dữ liệu độc hại và sử dụng pandas.io.common.
Trong kịch bản tấn công thực tế, kẻ tấn công có thể tạo payload pickle được mã hóa Base64 để khởi chạy reverse shell, sau đó truyền qua trường 'Additional Parameters' của CSVAgent và kích hoạt luồng trò chuyện thông qua API dự đoán nhằm giành quyền thực thi mã từ xa hoàn toàn trên máy chủ Flowise.

RCE thông qua pandas (Nguồn: Elttam).
Một hướng tấn công RCE khác xuất phát từ việc Flowise tiếp tục sử dụng sandbox vm2 đã lỗi thời để thực thi JavaScript thông qua điểm cuối /api/v1/node-custom-function.
Theo các nhà nghiên cứu của Elttam, Flowise đã nhanh chóng trở thành một trong những dự án GitHub hàng đầu trong lĩnh vực xây dựng quy trình làm việc AI, hỗ trợ cả triển khai tự lưu trữ và các gói doanh nghiệp trên nền tảng đám mây với khả năng hỗ trợ đa không gian làm việc.
Mặc dù Flowise giới hạn sandbox chỉ cho phép một số mô-đun nhất định, hệ thống vẫn cho phép sử dụng axios, moment và node-fetch, đồng thời sử dụng phiên bản vm2 còn tồn tại lỗ hổng CVE-2026-22709. Lỗ hổng này cho phép thoát khỏi sandbox bằng cách khai thác ngăn xếp lỗi và child_process.execSync.
Ngay cả sau khi Flowise tăng cường sandbox và vô hiệu hóa vm2 theo mặc định, các nhà nghiên cứu vẫn phát hiện phương thức khai thác mới dựa trên lỗ hổng duyệt thư mục CVE-2022-24785 của moment. Kỹ thuật này kết hợp với chức năng tải tài liệu của Flowise để ghi tệp JavaScript độc hại vào thư mục .flowise/storage, sau đó nạp và thực thi thông qua moment.
Các nghiên cứu tiếp theo còn cho thấy vm2 vẫn có thể được truy cập thông qua các node AgentAsTool, ChatflowTool và ExecuteFlow. Các node này gọi hàm executeJavaScriptCode với tham số useSandbox=false.

Các thông số bổ sung (Nguồn: Elttam).
Trong những node này, tham số baseURL chỉ trải qua bước kiểm tra isValidURL đơn giản, bỏ qua phần băm của URL. Điều này cho phép kẻ tấn công chèn mã JavaScript tùy ý vào đoạn mã được thực thi trong sandbox bằng cách đưa payload vào phần hash của URL.
Kỹ thuật trên xác nhận phương thức thoát khỏi sandbox dựa trên moment vẫn tồn tại trong các bản cập nhật Flowise sau đó, cho thấy việc chỉ cập nhật vm2 không đủ để loại bỏ hoàn toàn rủi ro.
Khuyến nghị bảo vệ hệ thống Flowise
Lỗ hổng RCE thứ sáu ảnh hưởng đến node MCP tùy chỉnh của Flowise, thành phần tích hợp các máy chủ Model Context Protocol bên ngoài thông qua modelcontextprotocolsdk. Theo mặc định, node này cho phép sử dụng giao thức truyền stdio không an toàn khi thiết lập CUSTOMMCPPROTOCOL=stdio.Flowise đã cố gắng giảm thiểu nguy cơ bằng cách giới hạn các lệnh chỉ còn node, npx, python, python3 và docker, đồng thời đưa một số biến môi trường nguy hiểm như PATH và NODEOPTIONS vào danh sách đen. Tuy nhiên, nhiều biến môi trường quan trọng khác vẫn chưa được kiểm soát.
Bằng cách tận dụng các kỹ thuật khai thác biến môi trường đã được công bố trước đây, trong đó có thủ thuật PYTHONWARNINGS/BROWSER của Joern, các nhà nghiên cứu đã thực hiện thành công RCE thông qua máy chủ MCP Python3. Họ cũng sử dụng Node.js với các đối số trỏ đến /proc/self/environ, đồng thời ghi đè biến môi trường HOME để biến tệp môi trường thành mã JavaScript hợp lệ chứa payload reverse shell.
Flowise đã khắc phục một phần các vấn đề thông qua nhiều yêu cầu kéo (pull request), bao gồm loại bỏ các node CSVAgent và AirtableAgent do lỗi chuẩn hóa NFKC, loại bỏ moment khỏi danh sách các thư viện được phép trong vm2, bổ sung danh sách cho phép đối với biến môi trường và thay đổi giao thức MCP mặc định từ stdio sang SSE.
Tuy nhiên, các nhà nghiên cứu nhấn mạnh rằng việc tiếp tục dựa vào vm2 vẫn tiềm ẩn nhiều rủi ro do liên tục xuất hiện các kỹ thuật thoát khỏi sandbox mới. Họ khuyến nghị Flowise chuyển sang isolated-vm hoặc một cơ chế cách ly mạnh hơn, đặc biệt với các hệ thống AI đa người dùng.
Ngoài ra, quản trị viên được khuyến cáo nâng cấp Flowise lên phiên bản bảo mật mới nhất, kiểm tra các điểm cuối dự đoán và chức năng tùy chỉnh của node đang bị công khai, vô hiệu hóa hoặc hạn chế các node thực thi Python và JavaScript tùy chỉnh, đồng thời không bật CUSTOMMCPPROTOCOL=stdio nếu không thực sự cần thiết và chưa có các biện pháp bảo vệ nghiêm ngặt ở cấp mạng và máy chủ.
Được phối hợp thực hiện bởi các chuyên gia của Bkav,
cộng đồng An ninh mạng Việt Nam WhiteHat
và cộng đồng Khoa học công nghệ VnReview
Sửa lần cuối: