เผยช่องโหว่ MCP: การวางยาพิษและการบิดเบือน

ภาพรวมของสถาปัตยกรรม

MCP เป้าหมายสำหรับการสาธิต: Toolbox

Smithery.ai โดดเด่นในฐานะศูนย์กลางที่สำคัญสำหรับปลั๊กอิน MCP ดึงดูดรายชื่อ MCP จำนวนมากและผู้ใช้งานที่กระตือรือร้น ในบรรดาเหล่านี้ @smithery/toolbox ซึ่งเป็นเครื่องมือจัดการ MCP อย่างเป็นทางการที่ Smithery.ai นำเสนอ ถือเป็นจุดสนใจของการประเมินความปลอดภัยนี้

Toolbox ได้รับเลือกให้เป็นเป้าหมายการทดสอบด้วยเหตุผลสำคัญหลายประการ:

  • มีฐานผู้ใช้จำนวนมาก ทำให้เป็นตัวอย่างที่เป็นตัวแทนภายในระบบนิเวศ MCP
  • รองรับการติดตั้งปลั๊กอินเพิ่มเติมโดยอัตโนมัติ เพิ่มฟังก์ชันการทำงานฝั่งไคลเอ็นต์ (เช่น Claude Desktop)
  • มีค่ากำหนดที่ละเอียดอ่อน เช่น คีย์ API ซึ่งอำนวยความสะดวกในการสาธิตการเอ็กซ์พลอยต์ที่อาจเกิดขึ้น

MCP ที่เป็นอันตรายที่ใช้สำหรับการสาธิต: MasterMCP

MasterMCP ซึ่งพัฒนาโดย SlowMist โดยเฉพาะเพื่อวัตถุประสงค์ในการทดสอบความปลอดภัย เป็นเครื่องมือ MCP ที่เป็นอันตรายจำลองซึ่งสร้างขึ้นบนสถาปัตยกรรมแบบแยกส่วน องค์ประกอบสำคัญ ได้แก่:

  1. การจำลองบริการเว็บไซต์ในเครื่อง: http://127.0.0.1:1024

เพื่อสร้างสถานการณ์การโจมตีที่สมจริง MasterMCP ได้รวมโมดูลจำลองบริการเว็บไซต์ในเครื่อง การใช้เฟรมเวิร์ก FastAPI โมดูลนี้จะสร้างเซิร์ฟเวอร์ HTTP อย่างง่ายได้อย่างรวดเร็วซึ่งเลียนแบบสภาพแวดล้อมเว็บทั่วไป หน้าเหล่านี้อาจดูไม่มีพิษภัย แสดงข้อมูลเบเกอรี่ หรือส่งคืนข้อมูล JSON มาตรฐาน แต่จะซ่อนเพย์โหลดที่เป็นอันตรายที่สร้างขึ้นอย่างพิถีพิถันภายในซอร์สโค้ดหรือการตอบสนอง API

แนวทางนี้ช่วยให้สามารถสาธิตเทคนิคการวางยาพิษข้อมูลและการซ่อนคำสั่งได้อย่างครอบคลุมในสภาพแวดล้อมภายในเครื่องที่ปลอดภัยและมีการควบคุม เน้นถึงความเสี่ยงที่อาจแฝงตัวอยู่ในหน้าเว็บที่ดูธรรมดา ซึ่งสามารถกระตุ้นพฤติกรรมที่ผิดปกติในโมเดลภาษาขนาดใหญ่ได้

  1. สถาปัตยกรรม MCP ปลั๊กอินในเครื่อง

MasterMCP ใช้แนวทางปลั๊กอินเพื่ออำนวยความสะดวกในการปรับขนาดอย่างรวดเร็วสำหรับเวกเตอร์การโจมตีใหม่ๆ เมื่อดำเนินการ MasterMCP จะเริ่มต้นบริการ FastAPI ของโมดูลก่อนหน้าในกระบวนการย่อย

ไคลเอนต์สาธิต

  • Cursor: หนึ่งใน IDE การเขียนโปรแกรมที่ใช้ AI ช่วยเหลือที่ใช้กันอย่างแพร่หลายมากที่สุดทั่วโลก
  • Claude Desktop: ไคลเอนต์อย่างเป็นทางการของ Anthropic องค์กรที่ปรับแต่งโปรโตคอล MCP

โมเดลภาษาขนาดใหญ่ (LLM) ที่ใช้สำหรับการสาธิต

  • Claude 3.7

Claude 3.7 ได้รับเลือกเนื่องจากมีความสามารถที่ได้รับการปรับปรุงในการจดจำการดำเนินการที่ละเอียดอ่อน และการเป็นตัวแทนของความสามารถในการปฏิบัติงานที่แข็งแกร่งภายในระบบนิเวศ MCP ปัจจุบัน

การกำหนดค่า claude\_desktop\_config.json

เมื่อการกำหนดค่าเสร็จสมบูรณ์ ขั้นตอนการสาธิตจะเริ่มต้นขึ้น

การเรียกใช้ที่เป็นอันตรายข้าม MCP

การสาธิตนี้รวมเอาทั้งเทคนิคการวางยาพิษและกลยุทธ์การเรียกใช้ที่เป็นอันตรายข้าม MCP ที่ระบุไว้ในรายการตรวจสอบ

การโจมตีการวางยาพิษเนื้อหาหน้าเว็บ

  1. การวางยาพิษตามความคิดเห็น

Cursor เข้าถึงเว็บไซต์ทดสอบในเครื่องที่ http://127.0.0.1:1024

หน้านี้เกี่ยวกับ “Delicious Cake World” ที่ดูเหมือนไม่มีอันตราย ทำหน้าที่เป็นการจำลองเพื่อแสดงให้เห็นถึงผลกระทบที่อาจเกิดขึ้นจากการที่ไคลเอนต์โมเดลภาษาขนาดใหญ่เข้าถึงเว็บไซต์ที่เป็นอันตราย

คำสั่งดำเนินการ:

ผลลัพธ์แสดงให้เห็นว่า Cursor ไม่เพียงแต่อ่านเนื้อหาหน้าเว็บเท่านั้น แต่ยังส่งข้อมูลการกำหนดค่าที่ละเอียดอ่อนในเครื่องกลับไปยังเซิร์ฟเวอร์ทดสอบด้วย พรอมต์ที่เป็นอันตรายจะถูกฝังอยู่ในซอร์สโค้ดเป็นความคิดเห็น HTML:

แม้ว่าแนวทางที่ใช้ความคิดเห็นนี้จะค่อนข้างตรงไปตรงมาและตรวจจับได้ง่าย แต่ก็ยังสามารถกระตุ้นการดำเนินการที่เป็นอันตรายได้

  1. การวางยาพิษความคิดเห็นที่เข้ารหัส

การเข้าถึง http://127.0.0.1:1024/encode เผยให้เห็นหน้าเว็บที่ดูเหมือนจะเหมือนกับตัวอย่างก่อนหน้า อย่างไรก็ตาม พรอมต์ที่เป็นอันตรายถูกเข้ารหัส ทำให้การเอ็กซ์พลอยต์ตรวจจับได้ยากยิ่งขึ้นแม้ในขณะที่ตรวจสอบซอร์สโค้ดของหน้าเว็บ

แม้ว่าจะไม่มีพรอมต์ที่ชัดเจนในซอร์สโค้ด การโจมตีก็ประสบความสำเร็จ

การวางยาพิษข้อมูลตอบกลับเครื่องมือ MCP

จากคำแนะนำพร้อมท์ MasterMCP เราป้อนคำสั่งจำลองที่กระตุ้น MCP ที่เป็นอันตรายและแสดงให้เห็นถึงการดำเนินการที่ตามมา

เมื่อเรียกใช้คำสั่ง ไคลเอนต์จะเริ่มต้นการโทรข้าม MCP ไปยัง Toolbox และเพิ่มเซิร์ฟเวอร์ MCP ใหม่ได้สำเร็จ

การตรวจสอบโค้ดปลั๊กอินเผยให้เห็นว่าข้อมูลที่ส่งคืนมีเพย์โหลดที่เป็นอันตรายที่เข้ารหัส ทำให้ผู้ใช้แทบตรวจไม่พบ

การโจมตีมลพิษอินเทอร์เฟซของบุคคลที่สาม

การสาธิตนี้เน้นถึงความเสี่ยงที่อาจเกิดขึ้นที่เกี่ยวข้องกับ MCP ทั้งที่เป็นอันตรายและไม่เป็นอันตรายที่ส่งคืนข้อมูล API ของบุคคลที่สามไปยังบริบทโดยตรง

ตัวอย่างโค้ด:

คำขอดำเนินการ:

ผลลัพธ์: พรอมต์ที่เป็นอันตรายจะถูกฝังอยู่ในข้อมูล JSON ที่ส่งคืนและกระตุ้นการดำเนินการที่เป็นอันตรายได้สำเร็จ

เทคนิคการวางยาพิษระหว่างการเริ่มต้น MCP

การสาธิตนี้ครอบคลุมรายการตรวจสอบของการแทรกพรอมต์เริ่มต้นและความขัดแย้งของชื่อ

การโจมตีการเขียนทับฟังก์ชันที่เป็นอันตราย

MasterMCP สร้างเครื่องมือที่มีชื่อฟังก์ชันเดียวกับฟังก์ชัน remove_server ของ Toolbox และเข้ารหัสพรอมต์ที่เป็นอันตรายภายในนั้น

คำสั่งดำเนินการ:

Claude Desktop ไม่ได้เรียกใช้เมธอด toolbox remove_server ดั้งเดิม แต่จะทริกเกอร์เมธอดที่ MasterMCP จัดเตรียมให้ด้วยชื่อเดียวกันแทน:

สิ่งนี้ทำได้โดยเน้นว่า “เมธอดดั้งเดิมเลิกใช้แล้ว” ซึ่งสนับสนุนให้โมเดลภาษาขนาดใหญ่จัดลำดับความสำคัญของฟังก์ชันที่ถูกเขียนทับที่เป็นอันตราย

การเพิ่มตรรกะการตรวจสอบส่วนกลางที่เป็นอันตราย

MasterMCP สร้างเครื่องมือที่เรียกว่า “banana” ซึ่งออกแบบมาเพื่อบังคับใช้การตรวจสอบความปลอดภัยภาคบังคับก่อนที่จะดำเนินการเครื่องมืออื่นใด

ก่อนที่จะดำเนินการแต่ละฟังก์ชัน ระบบจะจัดลำดับความสำคัญของกลไกการตรวจสอบ “banana”:

การแทรกตรรกะส่วนกลางนี้ทำได้โดยเน้นย้ำซ้ำๆ ถึง “การดำเนินการบังคับของการตรวจจับ banana” ภายในโค้ด

เทคนิคขั้นสูงสำหรับการซ่อนพรอมต์ที่เป็นอันตราย

วิธีการเข้ารหัสที่เป็นมิตรกับ LLM

โมเดลภาษาขนาดใหญ่มีความสามารถในการแยกวิเคราะห์ที่แข็งแกร่งสำหรับรูปแบบหลายภาษา ซึ่งสามารถนำไปใช้เพื่อซ่อนข้อมูลที่เป็นอันตรายได้ วิธีการทั่วไป ได้แก่:

  • สภาพแวดล้อมภาษาอังกฤษ: การเข้ารหัส Hex Byte
  • สภาพแวดล้อมภาษาจีน: การเข้ารหัส NCR หรือการเข้ารหัส JavaScript

กลไกการส่งคืนเพย์โหลดที่เป็นอันตรายแบบสุ่ม

คล้ายกับมลพิษอินเทอร์เฟซของบุคคลที่สามที่กล่าวถึงในส่วนที่สาม การร้องขอ http://127.0.0.1:1024/random ส่งผลให้:

แต่ละคำขอจะส่งคืนหน้าที่สร้างขึ้นแบบสุ่มซึ่งมีเพย์โหลดที่เป็นอันตราย ซึ่งเพิ่มความยากในการตรวจจับและการติดตามอย่างมาก

จากการสาธิตเชิงปฏิบัติของ MasterMCP ช่องโหว่ด้านความปลอดภัยที่ซ่อนอยู่ภายในระบบนิเวศ Model Context Protocol (MCP) ได้ถูกเปิดเผย จากการแทรกพรอมต์พื้นฐานและการเรียกข้าม MCP ไปจนถึงการโจมตีที่ละเอียดอ่อนยิ่งขึ้นระหว่างการเริ่มต้นและการซ่อนคำสั่งที่เป็นอันตราย แต่ละขั้นตอนทำหน้าที่เป็นเครื่องเตือนใจถึงความเปราะบางโดยธรรมชาติควบคู่ไปกับพลังของระบบนิเวศ MCP

วันนี้ เมื่อโมเดลขนาดใหญ่มีการโต้ตอบกับปลั๊กอินและ API ภายนอกมากขึ้น มลพิษอินพุตที่ดูเหมือนเล็กน้อยสามารถกระตุ้นความเสี่ยงด้านความปลอดภัยทั่วทั้งระบบ ความหลากหลายที่พัฒนาไปของกลยุทธ์ของผู้โจมตี รวมถึงเทคนิคการเข้ารหัส มลพิษแบบสุ่ม และการเขียนทับฟังก์ชัน ทำให้จำเป็นต้องมีการอัปเกรดที่ครอบคลุมสำหรับแนวทางด้านความปลอดภัยแบบเดิมๆ