เตือนช่องโหว่ MCP Python SDK เสี่ยงถูกขโมยข้อมูล OAuth

เซิร์ฟเวอร์ MCP ที่เป็นอันตรายสามารถหลอกลวงแอปพลิเคชันที่สร้างขึ้นบน MCP Python SDK อย่างเป็นทางการ ให้ส่งมอบข้อมูลยืนยันตัวตน OAuth ที่ใช้ในการเข้าสู่ระบบบริการจริงได้ ตามรายงานแจ้งเตือนความปลอดภัยจากผู้ดูแล SDK

เวอร์ชันที่ได้รับผลกระทบจะส่งข้อมูลสำคัญอย่าง client secret, authorization code และ PKCE proof key ไปยังจุดสิ้นสุดโทเค็น (token endpoint) ที่ผู้โจมตีควบคุมอยู่ โดยปัจจุบันมีการออกแพตช์แก้ไขในเวอร์ชัน 1.30.0 และ 2.2.0 เรียบร้อยแล้ว

Model Context Protocol (MCP) เป็นมาตรฐานเปิดสำหรับเชื่อมต่อแอปพลิเคชัน AI เข้ากับเครื่องมือและข้อมูลภายนอก โดยแพ็กเกจเจ้าปัญหานี้เป็น Python SDK อย่างเป็นทางการที่ใช้สำหรับสร้างเซิร์ฟเวอร์และไคลเอนต์ในระบบ MCP

Cycode บริษัทด้านความปลอดภัยผู้รายงานช่องโหว่นี้ ระบุว่าผู้โจมตีสามารถใช้ข้อมูลที่ขโมยมาขอรับ access token ที่ถูกต้องเพื่อเข้าถึงบริการด้วยสิทธิ์เดียวกับแอปพลิเคชันนั้นๆ และเนื่องจาก client secret มักมีอายุการใช้งานยาวนาน จึงสามารถใช้งานได้ต่อเนื่องจนกว่าจะมีการเปลี่ยนแปลง

ช่องโหว่นี้ถูกจัดระดับความรุนแรงอยู่ที่ 7.5 สำหรับการทำงานแบบไร้ผู้ดูแล (non-interactive) และระดับ 6.5 สำหรับกรณีที่ต้องมีการโต้ตอบกับผู้ใช้ (interactive) อย่างไรก็ตาม ณ วันที่ 29 กันยายน ยังไม่มีการระบุหมายเลข CVE อย่างเป็นทางการ

เซิร์ฟเวอร์ขโมยข้อมูลยืนยันตัวตนได้อย่างไร

ปกติเมื่อไคลเอนต์ MCP ต้องการเข้าสู่ระบบ จะถามเซิร์ฟเวอร์ว่าบริการ authorization server อยู่ที่ไหน แต่ในเวอร์ชันที่มีปัญหา SDK ไม่ได้ตรวจสอบคำตอบอย่างเข้มงวด ทำให้เซิร์ฟเวอร์อันตรายสามารถชี้เป้าไปยังบริการของผู้โจมตีเอง หรือหลอกล่อให้ส่งข้อมูลยืนยันตัวตนไปยังที่อื่นได้

เมื่อไคลเอนต์ส่ง secret, authorization code และ PKCE proof key ไปยังผู้โจมตี การป้องกันด้วย PKCE ที่ออกแบบมาเพื่อป้องกันการนำ code กลับมาใช้ซ้ำก็จะถูกทำลายลงทันที

สำหรับการใช้งานแบบโต้ตอบ ผู้ใช้ยังต้องกดยืนยันการลงชื่อเข้าใช้ด้วยตนเอง ซึ่ง Cycode พบว่าหน้าเว็บที่ปรากฏเป็นหน้าเข้าสู่ระบบจริง ทำให้สังเกตความผิดปกติได้ยาก ส่วนการเชื่อมต่อแบบ machine-to-machine นั้นอันตรายยิ่งกว่าเพราะไม่ต้องใช้มนุษย์ในการยืนยัน

ใครบ้างที่ได้รับผลกระทบ

แอปพลิเคชันจะได้รับผลกระทบหากใช้ SDK เป็นไคลเอนต์ MCP ผ่าน HTTP ร่วมกับผู้ให้บริการ OAuth รายใดรายหนึ่ง ได้แก่ OAuthClientProvider, ClientCredentialsOAuthProvider, PrivateKeyJWTOAuthProvider หรือ RFC7523OAuthClientProvider (ในเวอร์ชัน 1.x) โดยมีรายละเอียดเวอร์ชันดังนี้:

LineAffectedFixed in
1.x1.9.1 through 1.29.11.30.0
2.x2.0.0 through 2.1.12.2.0

ทั้งนี้ เซิร์ฟเวอร์ MCP ที่สร้างด้วย SDK, ไคลเอนต์ภายใน (stdio) และไคลเอนต์ที่จัดการโทเค็นด้วยตัวเองจะไม่ได้รับผลกระทบจากช่องโหว่นี้

สิ่งที่ควรทำ

ผู้ใช้ควรอัปเกรดเป็นเวอร์ชัน 1.30.0 หรือ 2.2.0 ทันที ในเวอร์ชันใหม่นี้ไคลเอนต์จะตรวจสอบบริการเข้าสู่ระบบที่คาดไว้ก่อนดึงข้อมูล และจะปฏิเสธบริการที่ไม่ถูกต้อง

อย่างไรก็ตาม สำหรับผู้ใช้ ClientCredentialsOAuthProvider หรือ PrivateKeyJWTOAuthProvider การอัปเกรดเพียงอย่างเดียวอาจไม่พอ โดยรายงานระบุว่า "upgrading changes nothing until you also pass issuer=" เพื่อระบุชื่อบริการเข้าสู่ระบบที่ถูกต้อง หากไม่ระบุค่านี้ ระบบจะยังคงเชื่อถือค่าที่เซิร์ฟเวอร์ MCP ชี้ไปเช่นเดิม

นอกจากนี้ ผู้ใช้ควรล้างการลงทะเบียนไคลเอนต์ OAuth เก่าทิ้ง และทำการผลัดเปลี่ยน (rotate) client secret รวมถึงเพิกถอนโทเค็นเดิมทั้งหมดเพื่อความปลอดภัยสูงสุด หากเคยเชื่อมต่อกับเซิร์ฟเวอร์ที่ไม่น่าเชื่อถือมาก่อน

การเปิดเผยข้อมูล

การแก้ไขเรื่องการตรวจสอบผู้ออกบัตร (issuer checks) ถูกปล่อยออกมาตั้งแต่วันที่ 7 กันยายน แต่ในตอนแรกถูกระบุเป็นการเปลี่ยนแปลงพฤติกรรมทั่วไป จนกระทั่งมีการประกาศคำเตือนความปลอดภัยอย่างเป็นทางการในวันที่ 28 กันยายน พร้อมกับที่ Cycode เผยแพร่บทความวิจัย

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

Source: The Hacker News
ดูแลงานแปลและเรียบเรียงโดย AttapolK

ความคิดเห็น (0)

เข้าสู่ระบบเพื่อร่วมแสดงความเห็น

สมัครสมาชิก

มาเป็นคนแรกที่แสดงความเห็นกันเลยโบร