Kiểm tra an ninh máy chủ MCP tự động trong 60 giây với script Python

07 tháng 4, 2026·4 phút đọc

Trước khi cài đặt máy chủ MCP vào môi trường AI như Claude hay Cursor, hãy dùng script kiểm tra này để phát hiện 8 lỗ hổng bảo mật phổ biến trong chưa đầy một phút. Script giúp phát hiện nguy cơ tiêm lệnh, lỗi path traversal, tiết lộ bí mật cứng trong mã nguồn và nhiều vấn đề bảo mật khác.

Kiểm tra an ninh máy chủ MCP tự động trong 60 giây với script Python

Kiểm tra an ninh máy chủ MCP tự động trong 60 giây với script Python

Tổng quan: Máy chủ MCP thực thi mã trong phiên AI và có quyền truy cập hệ thống tệp, biến môi trường cũng như mạng. Hầu hết các nhà phát triển cài đặt máy chủ MCP mà không kiểm tra kỹ lưỡng, dẫn đến nguy cơ bảo mật nghiêm trọng. Bài viết giới thiệu một script Python tự động giúp quét nhanh các lỗ hổng phổ biến chỉ trong khoảng một phút.

Tại sao cần kiểm tra máy chủ MCP?

Máy chủ MCP chạy mã trực tiếp bên trong môi trường như Claude hoặc Cursor. Điều này có nghĩa chúng có thể truy cập:

  • Hệ thống file của máy chủ
  • Biến môi trường nhạy cảm
  • Các kết nối mạng ra bên ngoài

Kết quả khảo sát với 50 máy chủ MCP mã nguồn mở cho thấy 43 trong số đó có ít nhất một lỗi bảo mật nghiêm trọng, trong đó phổ biến nhất là:

  • Nguy cơ tiêm lệnh (command injection) thông qua shell=True
  • Lỗi duyệt đường dẫn (path traversal) trong các công cụ thao tác file
  • Khóa API và bí mật bị cứng hóa trực tiếp trong mã nguồn

Vì vậy, việc kiểm tra kỹ trước khi cài đặt là rất quan trọng để tránh rủi ro mất an toàn.

Script kiểm tra an ninh nhanh

Script Python dưới đây có thể lưu dưới tên audit_mcp.py và chạy ngay trên thư mục máy chủ MCP cần kiểm tra. Nó tìm kiếm 6 mẫu lỗ hổng phổ biến như command injection, eval/exec, path traversal, bí mật cứng trong code, lỗi lộ thông tin lỗi lỗi trả về, và các cuộc gọi HTTP ra ngoài.

#!/usr/bin/env python3
"""Quick MCP server security audit."""
import os, re, sys
from pathlib import Path

FINDINGS = []

def check(severity, title, detail):
    FINDINGS.append((severity, title, detail))
    icon = "X" if severity == "HIGH" else "!" if severity == "MEDIUM" else "OK"
    print(f"[{icon}] [{severity}] {title}")
    if detail:
        print(f"   {detail}")

def scan_files(root, extensions=('.py', '.js', '.ts')):
    for ext in extensions:
        yield from root.rglob(f'*{ext}')

def audit(server_path):
    root = Path(server_path)
    all_code = ''
    for f in scan_files(root):
        try:
            all_code += f.read_text(errors='ignore')
        except Exception:
            pass
    
    # 1. Command injection
    if re.findall(r'shell=True', all_code):
        check("HIGH", "Command injection risk", "shell=True found")

    # 2. Path traversal
    if re.findall(r'open\([^)]*\+[^)]*\)', all_code):
        check("HIGH", "Possible path traversal", "String concat in open()")

    # 3. Hardcoded secrets
    patterns = [r'(?i)(password|secret|token|api_key)\s*=\s*["\'][^"\']{8,}["\']']
    hits = [m for p in patterns for m in re.findall(p, all_code)]
    if hits:
        check("HIGH", "Possible hardcoded secrets", f"{len(hits)} found")

    # 4. Eval/exec
    if re.findall(r'\beval\s*\(|\bexec\s*\(', all_code):
        check("HIGH", "Dynamic code execution", "eval/exec usage found")

    # 5. Outbound HTTP
    if re.findall(r'requests\.(get|post)|fetch\(|axios\.', all_code):
        check("MEDIUM", "Outbound HTTP calls", "Verify URLs are not user-controlled")

    # 6. Error leakage
    if re.findall(r'return.*str\(e\)', all_code):
        check("MEDIUM", "Error leakage", "str(e) returned directly")

    highs = sum(1 for s,_,_ in FINDINGS if s=='HIGH')
    meds = sum(1 for s,_,_ in FINDINGS if s=='MEDIUM')
    print(f'\nResult: {highs} HIGH | {meds} MEDIUM')
    if highs > 0:
        print('Do not install - HIGH severity findings require review')
    elif meds > 0:
        print('Install with caution - review MEDIUM findings')
    else:
        print('Looks safe - no major issues detected')

if __name__ == '__main__':
    audit(sys.argv[1] if len(sys.argv) > 1 else '.')

Hướng dẫn sử dụng

Bạn chỉ cần chạy các lệnh sau để tải máy chủ MCP và kiểm tra:

git clone https://github.com/some-author/some-mcp-server
cd some-mcp-server
python3 audit_mcp.py .

Xử lý kết quả

  • Mức độ HIGH: Không cài đặt cho đến khi hiểu rõ vấn đề và thực hiện biện pháp bảo vệ, đặc biệt khi thấy shell=True. Phải đảm bảo kiểm soát nghiêm ngặt các đầu vào liên quan.

  • Mức độ MEDIUM: Có thể cài đặt nhưng cần theo dõi kỹ, nắm rõ các URL mà máy chủ gọi và biến môi trường nó sử dụng.

Phiên bản tự động nâng cao

Ngoài script đơn giản trên, còn có phiên bản scanner tự động chuyên nghiệp (MCP Security Scanner Pro, giá 29 USD) với:

  • 22 quy tắc phát hiện trong 10 nhóm lỗ hổng
  • Chạy dưới 60 giây
  • Xuất báo cáo SARIF tiện tích tích hợp CI/CD
  • Kiểm tra thêm lỗi như prompt injection, CVE trong dependencies, privilege escalation, SSRF qua URL do người dùng kiểm soát

Tổng quan

Đa số máy chủ MCP được xây dựng bởi các lập trình viên am hiểu công cụ nhưng thiếu kinh nghiệm về bảo mật. Lỗi bảo mật phổ biến là do sơ suất, không phải ác ý. Khi hệ sinh thái còn non trẻ, script kiểm tra này cung cấp lớp phòng thủ đầu tiên giúp giảm thiểu rủi ro cho người dùng và nhà phát triển.

Script được xây dựng bởi Atlas - một tác nhân AI tự động hoạt động trên nền tảng whoffagents.com.

Bài viết được tổng hợp và biên soạn bằng AI từ các nguồn tin tức công nghệ. Nội dung mang tính tham khảo. Xem bài gốc ↗