Botnet NadMesh Mới Săn Lùng Dịch Vụ AI Bị Lộ Để Chiếm Đoạt Cloud Keys và Kubernetes Tokens

Một botnet viết bằng ngôn ngữ Go có tên NadMesh đã xuất hiện vào đầu tháng 7 nhằm săn lùng các dịch vụ AI bị lộ trên internet. Kẻ vận hành tuyên bố đã thu thập được 3.811 AWS keys duy nhất từ các công cụ phổ biến như ComfyUI, Ollama và n8n. Một công cụ thu thập dữ liệu Shodan liên tục cung cấp danh sách mục tiêu gồm các trình tạo hình ảnh và trình chạy mô hình cục bộ vốn thường được triển khai nhanh chóng nhưng lại thiếu các biện pháp bảo mật tường lửa cần thiết.
Botnet NadMesh tấn công dịch vụ AI

Một botnet viết bằng Go mang tên NadMesh đã xuất hiện vào đầu tháng 7 nhằm săn lùng các dịch vụ AI bị lộ thông tin, và bảng điều khiển (dashboard) của kẻ vận hành tuyên bố đã thu thập được 3.811 AWS keys duy nhất.

Một công cụ thu thập dữ liệu Shodan liên tục cung cấp danh sách mục tiêu cho hàng chờ quét, bao gồm ComfyUI, Ollama, n8n, Open WebUI, Langflow và Gradio: đây là các trình tạo hình ảnh, trình chạy mô hình cục bộ và trình xây dựng quy trình công việc mà các đội ngũ triển khai rất nhanh nhưng lại thiết lập tường lửa rất chậm.

Dữ liệu tình báo đằng sau bảng đếm đó cho thấy 47 đợt thu thập thông tin xác thực và 41 danh mục mô hình trong 100 bản ghi gần nhất. Các danh mục này mang định danh DeepSeek, GLM và Kimi được gắn thẻ :cloud, cho thấy những gì bot thống kê được còn vươn xa hơn cả chính thiết bị bị nhiễm.

XLab của QiAnXin đã công bố một báo cáo vào thứ Sáu, đặt tên cho mã độc theo chuỗi "n4d mesh controller" trong mã nguồn của nó và chụp ảnh màn hình bảng điều khiển. Các con số trên đó là của chính kẻ vận hành, được ghi lại vào ngày 10 tháng 7, và chúng không hoàn toàn khớp với nhau.

Một bộ đếm hiển thị 17.700 tổng số lượt triển khai nằm trên một phễu dữ liệu tuyên bố có 95.700 lượt trong 24 giờ qua. Một ô hiển thị 16 bot đang hoạt động; ô tiếp theo lại ghi 12. Con số thông tin xác thực ít nhất là con số được nêu hai lần. Các cảm biến riêng của XLab đưa ra một thước đo bên ngoài, và đó cũng không phải là số lượng bot: các IP nguồn riêng biệt phát tán NadMesh gần như bằng không cho đến cuối tháng 6, sau đó tăng vọt trong tuần đầu tiên của tháng 7 lên khoảng 139 địa chỉ mỗi ngày.

Thứ mà một bot gửi về nhà là các cloud keys được trích xuất từ biến môi trường, k8s service account tokens, và nội dung của các tệp ~/.aws/config, .env và ~/.docker/config.json.

Các nhà nghiên cứu nêu rõ: kẻ vận hành không nhắm vào chính máy chủ, mà là "thông tin xác thực đám mây (cloud credentials), các đặc quyền cụm Kubernetes" trên đó. Quyền truy cập mô hình và các công cụ MCP có thể gọi được cũng nằm trong danh sách mục tiêu.

MCP đứng đầu thứ tự ưu tiên khai thác của bộ điều khiển, trên cả Kubernetes, Docker API và Redis. Vector tấn công mà XLab ghi nhận bên cạnh nó là một lệnh gọi JSON-RPC tools/call tới execute_command. Không có mã CVE nào được gán cho dòng lệnh đó và báo cáo cũng không tuyên bố điều này.

Đặc tả đầu tiên của MCP đã đặt việc xác thực hoàn toàn nằm ngoài giao thức cốt lõi, và luồng ủy quyền được thêm vào tháng 3 năm 2025 vẫn được coi là tùy chọn theo chính câu chữ của đặc tả. Rất nhiều triển khai đã bỏ qua nó. Censys đã đếm được 12.520 dịch vụ MCP có thể truy cập được trên 8.758 địa chỉ IP tính đến ngày 28 tháng 4, tăng lên hơn 21.000 vào ngày 6 tháng 5, và khoảng 90 dịch vụ quảng cáo một công cụ cho phép chạy lệnh.

Trên 39 dịch vụ trong số đó, công cụ được đặt tên là execute_command, chính xác là lệnh gọi nằm ở đầu bảng của NadMesh. Các bộ đếm MCP của chính botnet này không khớp nhau: 12.100 dịch vụ MCP được liệt kê là có thể khai thác, tổng cộng 21 lỗ hổng MCP, nhưng không có lỗ hổng nào trong số 100 bản ghi tình báo trên màn hình.

Tiếp theo là những gì XLab thực tế quan sát được. Công ty đã lập biểu đồ lưu lượng khai thác mà họ ghi nhận, và docker_containers_api_rce chiếm 30,31%, jenkins_scripttext_rce chiếm 22,28%. Mật khẩu Telnet yếu chiếm 10,36%, Redis chiếm 8,29%.

Biểu đồ các lỗ hổng bị khai thác bởi NadMesh
Biểu đồ thống kê các phương thức tấn công do XLab quan sát

mcp_cmd_execute có trên biểu đồ, vì vậy vector này tồn tại trong lưu lượng mà XLab quan sát được, nhưng nó nằm ở phần đuôi không được dán nhãn, dưới cả lát cắt nhỏ nhất, ở mức 0,78%. Các nhãn trên biểu đồ không khớp với các chuỗi trạng thái của chính bộ điều khiển, vì vậy đây là góc nhìn từ cảm biến của XLab về các nỗ lực tấn công, không phải sổ cái thành công của kẻ vận hành.

Vì vậy, việc nhắm mục tiêu vào AI là có thật ở khâu đầu vào và chiến lợi phẩm, nhưng hầu hết lưu lượng khai thác vẫn đổ dồn vào các socket Docker và bảng điều khiển Jenkins.

Quá trình quét diễn ra liên tục. Các subnet tạo ra kết quả khớp sẽ được lấy mẫu lại dày đặc hơn sau mỗi năm phút; các IP bị gắn thẻ nguy hiểm trong 24 giờ qua sẽ được quét lại sau mỗi 15 phút dưới dạng /32 với các cổng AI được ưu tiên trước; một đợt quét toàn diện sẽ kéo tất cả những gì bị đánh dấu nguy hiểm trong bảy ngày qua trở lại đầu danh sách.

Bất kỳ mục tiêu nào nhận mười nỗ lực triển khai mà không trả về kết quả sẽ tự động bị đưa vào danh sách đen vì nghi ngờ là honeypot. XLab coi đó là dấu hiệu cho thấy tác giả biết các nhà nghiên cứu đang theo dõi. Nếu hàng chờ hết mục tiêu, bot sẽ tạo ngẫu nhiên một dải /24 và tiếp tục.

Năm phiên bản build chạy đồng thời, mười một bot chạy trên bản 33.8-GO-TITAN, và những kẻ tụt hậu vẫn ở bản 30.0. Một canary endpoint thử nghiệm các bản build mới cho một phần của mạng lưới botnet.

Bảng điều khiển botnet NadMesh
Giao diện quản lý của botnet NadMesh

Phần ghi chú chân trang của bảng điều khiển đã tiết lộ tất cả: điểm số thành công được tính dựa trên một danh sách cho phép (allowlist) kết quả, vốn loại trừ rõ ràng việc thu hoạch Ollama và AWS. Bảng điểm của kẻ vận hành không hề đếm thứ mà kẻ đó đang lấy đi.

Việc gỡ bỏ được thiết kế để thất bại. Tác nhân (agent) duy trì sự hiện diện bằng ba cách cùng lúc, do đó nếu gỡ bỏ một cách, các cách còn lại sẽ khôi phục nó. Mọi bản build đều trải qua quá trình làm rối mã (obfuscation) bằng Garble, nén bằng UPX -9 và chèn đệm ngẫu nhiên, nghĩa là không có hai agent nào có chung mã hash. Mã hash mẫu được công bố sẽ chỉ bắt được một bản build đó và bỏ lỡ tất cả các bản còn lại.

Nếu Bạn Đang Chạy Bất Kỳ Dịch Vụ Nào Sau Đây

Hầu hết những gì NadMesh tung ra đều nhằm vào các dịch vụ bị lộ và các chức năng quản trị còn để ngỏ: Docker API mở trên cổng 2375, bảng điều khiển script Jenkins, Redis không xác thực, Telnet yếu và mật khẩu SSH. Không có bản vá nào có thể đóng các lỗ hổng này ngoài việc cấu hình lại.

Hãy đưa chúng ra sau lớp xác thực hoặc ngắt kết nối khỏi internet công cộng, bắt đầu với bốn cổng mà công việc quét lại ưu tiên hàng đầu: 8188 (ComfyUI), 11434 (Ollama), 7860 (Gradio) và 5678 (n8n).

Cũng có một danh sách các bản vá cần thực hiện, và không phải tất cả đều là lỗi cũ. Biểu đồ bao gồm CVE-2026-39987, lỗi RCE tiền xác thực trong Marimo notebooks phiên bản trước 0.23.0. CISA đã đưa nó vào KEV vào tháng 4 sau khi nó bị khai thác chỉ vài giờ sau khi công bố.

Bên cạnh đó là CVE-2026-41176, cho phép kẻ gọi chưa xác thực chuyển trạng thái rc.NoAuth trên các rclone RC servers từ 1.45.0 đến 1.73.5 được khởi chạy mà không có xác thực HTTP. Các tệp cấu hình rclone chính là thông tin xác thực đám mây. Các lỗi cũ hơn cần được kiểm tra điều kiện trước khi bạn hoảng loạn: CVE-2022-22947 ở mức 6,48% chỉ gây hại nếu Spring Cloud Gateway Actuator endpoint được bật và để lộ mà không được bảo mật, và CVE-2017-12611 ở mức 4,15% là lỗi thẻ Struts Freemarker.

Sau đó, hãy kiểm tra các đường dẫn thả mã độc:

  • ~/.ssh/authorized_keys: tìm các key mà không ai nhớ đã thêm vào
  • /dev/shm/.a, /var/tmp/.a, /tmp/.a
  • /etc/cron.d/.sys_monitor, /etc/cron.d/.s

Nếu bất kỳ điều nào ở trên xuất hiện, hãy cách ly máy chủ và thu hồi ngay lập tức mọi thông tin xác thực mà nó có thể nhìn thấy: AWS keys, cluster tokens, nội dung tệp .env, thông tin đăng nhập registry. Thu hồi (revoking) không phải là xoay vòng (rotating). Hãy loại bỏ sự hiện diện lâu dài (persistence) trước khi bạn cấp các khóa thay thế, nếu không các khóa mới cũng sẽ chịu chung số phận với các khóa cũ.

Sau đó, hãy xem xét các khóa cũ đã được sử dụng ở đâu trong thời gian chúng còn hiệu lực. Các chỉ số nhận diện (IOC) của XLab bao gồm một C2 tại 209.99.186[.]235, tên miền cdnorigin[.]net và một mẫu agent, SHA1 31c69b3e12936abca770d430066f379ec1d997ec.

Vào tháng 4, một kẻ vận hành khác cũng nhắm vào cùng loại mục tiêu này: Censys đã phát hiện ra việc khai thác ComfyUI bị lộ để đào tiền ảo Monero và Conflux, cộng với một nút proxy Hysteria để bán lại. Ba tháng sau, NadMesh quét một mạng lưới rộng hơn nhiều, nhưng ComfyUI và Docker trên cổng 2375 vẫn nằm trong cả hai danh sách mục tiêu.

Điểm thay đổi chính là mục đích: kẻ tấn công hồi tháng 4 muốn GPU, còn NadMesh muốn những gì máy chủ đó có thể đăng nhập vào. Censys đã kết thúc cuộc điều tra MCP của mình với dự đoán về kết quả ít tồi tệ nhất cho tất cả các công cụ shell bị lộ đó, rằng máy chủ sẽ trở thành "một phần của một cơ sở hạ tầng botnet hoặc lạm dụng trong tương lai". Đó là ngày 27 tháng 5. Bảy tuần sau, XLab đã công bố một botnet với mcp_cmd_execute trong biểu đồ khai thác của nó.