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: เวอร์ชันแพ็กเกจที่แน่นอนถูกล็อก ป้องกันการอัปเดตที่ไม่คาดคิด
วิธีการทำงาน
-
First-Run Resolution: เมื่อเซิร์ฟเวอร์ที่ใช้
npxหรือuvxถูก mount เป็นครั้งแรก Edison Watch จะ:- Resolve กราฟ dependency แบบ transitive ทั้งหมด
- สร้าง lockfile (npm:
package-lock.json, Python:uv.lock) - เก็บ lockfile อย่างปลอดภัยในฐานข้อมูลในเครื่อง
-
Ephemeral Runtime: ในการ mount แต่ละครั้ง:
- สร้างไดเรกทอรี runtime ชั่วคราว
- ติดตั้ง dependency จาก lockfile ที่เก็บไว้ (ไม่ใช่จาก package registry)
- เรียกใช้เซิร์ฟเวอร์จาก runtime environment ที่แยกออก
-
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

