Edison Watch

MCP Dependency Pinning

การป้องกัน supply-chain สำหรับ MCP server ที่ติดตั้งผ่าน package runner เช่น npx และ uvx

Edison Watch ป้องกันการโจมตี supply-chain ด้วยการ pin dependency ของ MCP server โดยอัตโนมัติในครั้งแรกที่เรียกใช้

วัตถุประสงค์

MCP server ที่ติดตั้งผ่าน package runner (npx, uvx) อาจมีความเสี่ยงต่อการโจมตี supply-chain หาก dependency ถูกอัปเดตอย่างเป็นอันตราย การ pin รับประกันว่า:

  • Reproducible execution: โค้ดเดียวกันอย่างแม่นยำทำงานทุกครั้ง
  • Tamper resistance: Lockfile ถูกเก็บไว้อย่างปลอดภัยและไม่สามารถแก้ไขได้โดยไม่มี action จากผู้ดูแลระบบ
  • Version control: เวอร์ชันแพ็กเกจที่แน่นอนถูกล็อก ป้องกันการอัปเดตที่ไม่คาดคิด

วิธีการทำงาน

  1. First-Run Resolution: เมื่อเซิร์ฟเวอร์ที่ใช้ npx หรือ uvx ถูก mount เป็นครั้งแรก Edison Watch จะ:

    • Resolve กราฟ dependency แบบ transitive ทั้งหมด
    • สร้าง lockfile (npm: package-lock.json, Python: uv.lock)
    • เก็บ lockfile อย่างปลอดภัยในฐานข้อมูลในเครื่อง
  2. Ephemeral Runtime: ในการ mount แต่ละครั้ง:

    • สร้างไดเรกทอรี runtime ชั่วคราว
    • ติดตั้ง dependency จาก lockfile ที่เก็บไว้ (ไม่ใช่จาก package registry)
    • เรียกใช้เซิร์ฟเวอร์จาก runtime environment ที่แยกออก
  3. Fail-Closed: หากการ pin ล้มเหลว (ปัญหาเครือข่าย lockfile เสียหาย) เซิร์ฟเวอร์จะไม่เริ่มต้น สิ่งนี้รับประกันว่าไม่มีโค้ดที่ไม่ได้ pin ทำงาน

การควบคุมของผู้ดูแลระบบ

การจัดการ pin ทั้งหมดทำผ่าน admin dashboard:

  • View Status: ดูเวอร์ชันของ package ที่ pin และวันที่ใน server overview
  • Clear Pin: ลบ lockfile ที่แคชไว้เพื่อบังคับให้ re-pin (มีประโยชน์หลังการอัปเดตแพ็กเกจ)
  • Clear All Pins: การดำเนินการ bulk เพื่อล้าง pin เซิร์ฟเวอร์ทั้งหมด

ไม่ต้องมีการกำหนดค่า command-line หรือ environment variable - การควบคุมทั้งหมดขับเคลื่อนด้วย UI เพื่อความปลอดภัยและ auditability

On this page