MCP Top 10 (v0.1 beta)
Model Context Protocol (MCP) กำหนดวิธีที่ AI application เชื่อมกับ server เพื่อค้นหาและเรียก tool, resource และ prompt ความเสี่ยงไม่ได้อยู่ที่ protocol เพียงอย่างเดียว แต่เกิดจาก host เชื่อ metadata แค่ไหน, server ถือ credential อะไร, tool ทำ side effect ได้เพียงใด และ context ถูกส่งข้าม trust boundary อย่างไร
OWASP MCP Top 10 ยังเป็น v0.1 beta และหน้าโครงการระบุ Phase 3 (pilot) ส่วนเดือนตุลาคม 2026 ใน roadmap คือรอบ continuous improvement/next release ไม่ใช่กำหนดการของ “final standard” จึงควรบันทึกเวอร์ชันและวันที่เข้าถึงเมื่อใช้อ้างอิง (OWASP MCP Top 10, ตรวจสอบ 25 สิงหาคม 2026)
Trust boundaries ของระบบ MCP
ระบบ MCP อย่างน้อยมีสี่จุดที่ต้องพิจารณาแยกกัน:
- User ↔ Host — ใครขอให้ agent ทำอะไรและยืนยันตัวตนอย่างไร
- Model ↔ Tool catalog — model เห็นชื่อ description และ schema ใดบ้าง
- Host ↔ MCP server — transport, server identity, authorization และ session
- MCP server ↔ Downstream system — credential, data store, SaaS API, shell หรือ filesystem
การเชื่อมต่อ MCP สำเร็จไม่ได้แปลว่า server น่าเชื่อถือ และการ sign tool definition ไม่ได้ยืนยันว่า backend ของ tool จะทำตาม description ทุกครั้ง
สิบความเสี่ยง
| รหัส | สิ่งที่อาจเกิดขึ้น | Control หลัก |
|---|---|---|
| MCP01 Token Mismanagement & Secret Exposure | secret อยู่ใน config, prompt, context, log หรือ shared service account; token อายุยาวและ scope กว้าง | vault/runtime injection, short-lived token, audience/scope binding, per-user delegation, redaction, rotation/revocation |
| MCP02 Privilege Escalation via Scope Creep | permission ชั่วคราวกลายเป็นสิทธิ์ถาวร หรือ tool ใหม่ใช้ token เดิมที่กว้างเกิน | deny-by-default scope, expiry, approval ต่อ capability, entitlement review, authorization ทุก call |
| MCP03 Tool Poisoning | ชื่อ description schema หรือ output แฝงคำสั่ง; rug pull เปลี่ยน definition หลังได้รับความไว้ใจ | explicit registration, catalog review, canonical fingerprint, block เมื่อ definition เปลี่ยน, ถือ tool output เป็น untrusted |
| MCP04 Supply Chain & Dependency Tampering | package, image, transitive dependency หรือ release pipeline ของ server ถูกแทรก | version/hash pinning, SBOM, signed artifact, SCA, isolated build, provenance และ patch SLA |
| MCP05 Command Injection & Execution | untrusted prompt หรือ context ถูกประกอบเป็น shell, SQL, code หรือ path แล้ว execute | typed API, allowlisted operation, parameterized query, path normalization, no shell, sandbox และ quota |
| MCP06 Intent Flow Subversion | context กลายเป็น instruction channel ที่พา agent ออกจาก user intent | แยก data จาก instruction, บันทึก intent, policy ก่อน tool call, isolate untrusted content, จำกัด capability และ egress |
| MCP07 Insufficient AuthN & AuthZ | server ไม่ยืนยัน client, user หรือ resource หรือรับ token โดยไม่ตรวจ audience/scope | TLS และ server identity, token validation, resource-level authorization, credential แยกตาม user/task |
| MCP08 Lack of Audit & Telemetry | ตรวจย้อนหลังไม่ได้ว่าใครเห็น tool ใด เรียกอะไร ส่ง argument ใด หรืออนุมัติเมื่อไร | structured append-only audit, correlation ID, actor/delegator, tool version, policy decision, redacted input/result |
| MCP09 Shadow MCP Servers | server ถูกตั้งนอก inventory ใช้ default credential หรือไม่มี owner และ patch process | approved registry, egress discovery, explicit registration, owner/expiry, block unknown host, inventory reconciliation |
| MCP10 Context Injection & Over-Sharing | context, memory หรือ result ไหลข้าม user/tenant/task หรือส่งข้อมูลเกินจำเป็นให้ server | per-task context, field minimization, tenant isolation, cache-key isolation, DLP/redaction, retention/TTL |
Controls ที่มักถูกเข้าใจเกินจริง
Tool annotations เป็นข้อมูลประกอบ ไม่ใช่ access control
ค่าอย่าง readOnlyHint, destructiveHint, idempotentHint และ openWorldHint ช่วย host ประเมินความเสี่ยง แต่เป็น metadata ที่ server ประกาศเอง Host ต้องบังคับ policy จากข้อมูลและขอบเขตที่เชื่อถือได้ เช่น credential scope, sandbox posture, downstream endpoint และ operation allowlist
Fingerprint ตรวจการเปลี่ยนแปลง ไม่ได้พิสูจน์ความปลอดภัย
การ hash ชื่อ description และ input schema ช่วยตรวจ rug pull: เมื่อ definition เปลี่ยน ระบบ block tool เพื่อรอ review ใหม่ อย่างไรก็ตาม trust-on-first-use ยังเชื่อข้อมูลที่เห็นครั้งแรก และ backend อาจเปลี่ยนพฤติกรรมโดย interface ไม่เปลี่ยน OWASP เสนอ client-side risk gating เป็น control pattern พร้อมระบุข้อจำกัดนี้ (recommended control)
Human approval ลดผลกระทบ แต่ไม่ได้ตรวจ prompt injection
approval ก่อนเรียก tool อาจหยุด action บางอย่าง แต่ถ้าหน้าจอใช้คำสรุปจากโมเดลหรือไม่แสดง recipient, path หรือ amount จริง ผู้ใช้ยังอาจอนุมัติผิด Approval ต้องผูกกับ exact payload และไม่ควรใช้แทน hard exposure ceiling สำหรับ tool ที่มี inherent risk สูง
ตัวอย่างลำดับการตัดสินใจของ MCP host
discover server
→ verify server identity and transport
→ load tool definitions
→ compare approved fingerprint
→ calculate inherent capability risk
→ expose only tools below policy ceiling
→ authorize user and resource on every call
→ validate exact arguments
→ approve sensitive payload if required
→ execute in a bounded environment
→ log decision, call, result and side effect
Model ไม่ควรเห็น tool ที่ policy ห้ามตั้งแต่แรก การให้ model เลือก tool แล้วจึงหวังว่าผู้ใช้จะปฏิเสธในหน้าจออนุมัติเป็น control ที่อยู่ปลายทางเกินไป
หลักฐานที่ควรตรวจ
| พื้นที่ | หลักฐาน | Negative test |
|---|---|---|
| Inventory | server URL, owner, environment, data classification, expiry, approved tools | server ที่ไม่อยู่ใน registry ต้องเชื่อมไม่ได้ |
| Identity | issuer, audience, scopes, TTL, subject และ delegation | token ผิด audience หรือหมดอายุต้องถูกปฏิเสธ |
| Tool catalog | canonical definition, fingerprint, reviewer, approved version | เปลี่ยน description/schema แล้ว tool ต้องถูกซ่อนจน review ใหม่ |
| Authorization | policy code/config และ decision log ต่อ resource | ผู้ใช้ A เรียก tool อ่าน resource ของ B ไม่ได้ |
| Execution | sandbox profile, egress allowlist, filesystem policy, quota | shell metacharacter และ path traversal ต้องไม่ถึง interpreter |
| Context | field mapping, tenant key, retention, redaction | context จาก task หรือ tenant หนึ่งต้องไม่ปรากฏในอีก task |
| Audit | correlation ID จาก user intent ถึง downstream side effect | ระบุผู้อนุมัติและ payload ได้โดยไม่เก็บ secret ดิบ |
| Response | output schema, size/content limit, untrusted-data handling | tool result ที่มี injection ต้องไม่เปลี่ยน policy หรือเพิ่ม capability |
ตัวอย่างเหตุการณ์และสิ่งที่พิสูจน์ได้
CVE-2025-6514 (mcp-remote) เป็น command injection ที่แสดงว่า bootstrap และ connection tooling อยู่ใน supply chain และ execution path จำนวนดาวน์โหลดไม่ใช่จำนวนระบบที่ vulnerable หรือถูกโจมตี (NVD)
postmark-mcp ถูกกล่าวหาว่าเป็น package ที่เพิ่ม BCC recipient โดยผู้ใช้ไม่ตั้งใจ กรณีนี้เกี่ยวข้องกับ MCP03 และ MCP04 แต่ไม่ควรใช้ตัวเลขจากจำนวนดาวน์โหลดเป็นจำนวนองค์กรที่ได้รับผลกระทบ เว้นแต่มี incident report ยืนยันโดยตรง
Checklist ก่อนอนุญาต third-party MCP server
- มี owner และ business purpose ชัดเจน
- pin version หรือ image digest และบันทึก provenance
- review source หรือ vendor assessment ตามระดับสิทธิ์
- ใช้ credential แยกตาม user/task และมีอายุสั้น
- จำกัด network egress และ downstream APIs
- expose เฉพาะ tools ที่อนุมัติ ไม่ auto-discover เข้า production
- block และ re-review เมื่อ definition เปลี่ยน
- validate และ authorize arguments ที่ host หรือ trusted gateway
- แยก context, cache และ memory ตาม tenant/task
- มี log, alert, revoke, isolate และ uninstall procedure
สถานะเอกสาร
MCP Top 10 v0.1 เป็น living beta list ใช้สร้าง threat model ได้ แต่ไม่ควรใช้เป็น compliance badge และต้องใช้ร่วมกับ MCP specification security guidance, OWASP ASVS และ control ของระบบปลายทาง