POST /mcp-rest/test/connectionPOST /mcp-rest/test/tools/listปลายทางทั้งสองยอมรับการตั้งค่าเซิร์ฟเวอร์ MCP ทั้งหมดในเนื้อหาคำขอ (Request Body) แบบ JSON รวมถึงฟิลด์ Cmd, args, และ env ที่การขนส่งแบบ stdio ใช้ในการเปิดโปรเซสเซิร์ฟเวอร์ เมื่อผู้ใช้ที่ผ่านการพิสูจน์ตัวตนเรียกปลายทางเหล่านี้ด้วยการตั้งค่าดังกล่าว LiteLLM จะนำค่า Cmd ที่ให้มาและสร้างมันเป็นโปรเซสย่อย (Subprocess) บนเครื่องโฮสต์ โดยรันด้วยสิทธิ์ของระบบปฏิบัติการเดียวกันกับตัวโปรเซสพร็อกซีของ LiteLLM เอง
เดิมที BerriAI เปิดเผยเรื่องนี้ว่าเป็นจุดบกพร่องการรันโค้ดระยะไกลที่ต้องผ่านการพิสูจน์ตัวตน นั่นคือผู้โจมตีจำเป็นต้องมี API Key ที่ถูกต้องเพื่อเข้าถึงปลายทาง และไม่มีการตรวจสอบตามบทบาท (Role-based Check) เพื่อจำกัดว่าใครเรียกใช้ได้บ้าง แม้แต่ผู้ใช้ภายในที่มีสิทธิ์ต่ำและมีกุญแจ API ของพร็อกซีก็สามารถรันคำสั่งใดๆ บนเครื่องโฮสต์ได้ แต่เรื่องราวไม่ได้จบแค่นั้น
ช่องโหว่ตัวที่สองคือ CVE-2026-48710 ซึ่งนักวิจัยตั้งชื่อเล่นว่า "BadHost" นี่คือข้อบกพร่องในการตรวจสอบ Host-Header ใน Starlette ซึ่งเป็นเฟรมเวิร์ค ASGI ขนาดเบาที่เป็นรากฐานของ FastAPI, vLLM และเว็บแอปพลิเคชัน Python อีกนับพันรายการ รวมถึง LiteLLM Starlette ทุกเวอร์ชันตั้งแต่ 0.8.3 ถึง 1.0.0 ได้รับผลกระทบ
สาเหตุหลักคือการตีความที่แตกต่างกันระหว่างวิธีที่ Starlette จัดเส้นทางคำขอเข้า กับวิธีที่มันสร้าง URL ใหม่สำหรับตรรกะของแอปพลิเคชัน เลเยอร์การจัดเส้นทางของ ASGI ใช้เส้นทาง HTTP ดิบจากคำขอเพื่อตัดสินใจว่าปลายทางใดจะจัดการมัน แต่
request.url — URL ที่มิดเดิลแวร์และดีโคราเตอร์ของแอปพลิเคชันเห็น — ถูกสร้างขึ้นใหม่โดยการนำค่า Host Header ดิบมาต่อกับเส้นทางคำขอ โดยไม่มีการตรวจสอบที่เหมาะสม
ด้วยการแทรกอักขระตัวคั่นระหว่างส่วน authority กับ path ของ URI เช่น ? หรือ # ลงใน Host Header ผู้โจมตีสามารถทำให้ request.url.path ดูแตกต่างจากเส้นทางจริงที่ถูกจัดเส้นทางไปอย่างสิ้นเชิง มิดเดิลแวร์เห็นเส้นทางที่ดูไม่อันตรายเช่น
/ ในขณะที่เราเตอร์ส่งต่อคำขอไปยังปลายทางเป้าหมายจริงที่อยู่เบื้องหลัง มิดเดิลแวร์ยืนยันตัวตนใดๆ ที่ใช้เส้นทางและเชื่อถือ request.url.path สามารถถูกเลี่ยงได้อย่างง่ายดาย
ดีโคราเตอร์ยืนยันตัวตนของ LiteLLM จะตรวจสอบ request.url.path เพื่อตัดสินว่าคำขอจำเป็นต้องมี API Key ที่ถูกต้องหรือไม่ ทางเลี่ยง BadHost ทำให้ผู้โจมตีสามารถเปลี่ยนแปลง URL นั้นเพื่อให้มิดเดิลแวร์เห็นเส้นทางที่ไม่ต้องยืนยันตัวตน ในขณะที่เราเตอร์ ASGI ส่งคำขอไปยังหนึ่งในปลายทางที่มีช่องโหว่ Command Injection ของ MCP พร้อมๆ กัน
สิ่งนี้จะลบประตูควบคุมการเข้าถึงเพียงจุดเดียวที่กั้นระหว่างอินเทอร์เน็ตกับการรันคำสั่งตามอำเภอใจ ผู้โจมตีที่ไม่มี Credential และไม่เคยเข้าถึงเครือข่ายมาก่อน สามารถส่งคำขอ HTTP ที่สร้างขึ้นมาเป็นพิเศษเพียงครั้งเดียว เพื่อเลี่ยงการยืนยันตัวตนทั้งหมดและรันคำสั่งระบบปฏิบัติการบนเครื่องโฮสต์ของพร็อกซี LiteLLM ได้ Horizon3.ai ยืนยันว่าลูกโซ่การโจมตีนี้ทำงานได้สมบูรณ์ และให้คะแนน CVSS รวมที่ 10.0 ซึ่งเป็นระดับความรุนแรงสูงสุด เพราะมันบรรลุการรันโค้ดระยะไกลโดยไม่ต้องผ่านการพิสูจน์ตัวตน
การโจมตีที่สำเร็จทำให้ผู้โจมตีรันคำสั่งได้ด้วยสิทธิ์ของโปรเซสพร็อกซี LiteLLM จากจุดนั้น พื้นผิวภัยคุกคามจะขยายตัวอย่างรวดเร็ว:
การที่ CISA เพิ่ม CVE-2026-42271 ลงในแคตตาล็อก KEV เมื่อวันที่ 8 มิถุนายน 2026 ยืนยันว่าช่องโหว่นี้ไม่ได้เป็นแค่ทฤษฎี — ผู้โจมตีกำลังใช้มันเป็นอาวุธอย่างแข็งขันในตอนนี้ ภายใต้คำสั่งปฏิบัติการผูกมัด (Binding Operational Directive) 22-01 หน่วยงานฝ่ายบริหารพลเรือนของรัฐบาลกลางสหรัฐฯ ทั้งหมดต้องแก้ไขช่องโหว่ที่อยู่ในรายชื่อ KEV ภายในกรอบเวลาที่กำหนด CISA ยังแนะนำอย่างแข็งขันให้ทุกองค์กร ทั้งภาครัฐและเอกชน จัดลำดับความสำคัญการแก้ไขรายการที่ถูกเพิ่มใน KEV เป็นกรณีฉุกเฉิน
การแก้ไขสำหรับช่องโหว่ที่ถูกใช้ร่วมกันนี้ต้องการการอัปเดตในสองด้าน พร้อมกับมาตรการป้องกันเชิงลึกหลายประการเพื่อจัดการกับการรั่วไหลของ Credential:
Host Header ที่เข้ามากับข้อกำหนดของ URL และจะไม่สนใจ Header ที่มีอักขระที่ไม่ถูกต้อง ป้องกันกลลวงการสับสนเส้นทางที่เป็นหัวใจหลักของการเลี่ยงการยืนยันตัวตน POST /mcp-rest/test/connectionPOST /mcp-rest/test/tools/listHost Header ด้วยคะแนนความรุนแรง CVSS 10.0, การโจมตีที่กำลังเกิดขึ้นจริง และการถูกจัดให้อยู่ในรายชื่อ KEV ของ CISA หมายความว่าองค์กรที่ใช้บริการของ LiteLLM หรือ Starlette ควรมองว่านี่คือเหตุการณ์ฉุกเฉินที่ต้องรีบแก้ไขและเปลี่ยนคีย์ทันที ช่องว่างระหว่างการเริ่มโจมตีกับการขโมย Credential ได้เปิดกว้างขึ้นแล้ว
Comments
0 comments