สรุปสั้น
Obsidian Security ได้เผยแพร่ข้อมูลเชิงเทคนิคและโค้ดพิสูจน์แนวคิด (PoC) สำหรับช่องโหว่ remote code execution (RCE) ใน Flowise ซึ่งเป็นแพลตฟอร์มโอเพนซอร์สยอดนิยมที่ให้นักพัฒนาสร้าง LLM flow และ AI agent ด้วยอินเทอร์เฟซแบบ drag-and-drop มีดาวบน GitHub กว่า 52,000 ดวง ช่องโหว่นี้ถูกติดตามด้วยรหัส CVE-2026-40933 มีคะแนน CVSS สูงถึง 9.9 ต้นตอมาจากการ deserialization คำสั่ง stdio ที่ไม่ปลอดภัยใน MCP adapter ทำให้ผู้ใช้สามารถเพิ่ม MCP stdio server พร้อมคำสั่งใด ๆ และรันโค้ดบนระบบปฏิบัติการได้ ลักษณะการโจมตีเป็นแบบ one-click คือเพียงหลอกให้เหยื่อ import chatflow ที่สร้างมาเป็นพิเศษ การ import นั้นก็จะ trigger ให้รันโค้ดบนเซิร์ฟเวอร์ทันที กระทบ Flowise ทุกเวอร์ชันก่อน 3.1.0 ส่วน Flowise Cloud ไม่ได้รับผลกระทบเพราะปิด stdio MCP ไว้
รายละเอียดข่าว
เว็บไซต์ SecurityWeek รายงานเมื่อวันที่ 30 พฤษภาคม 2569 ว่า Obsidian Security ได้ปล่อยรายละเอียดเชิงเทคนิคและ PoC สำหรับช่องโหว่ RCE ใน Flowise ซึ่งช่องโหว่ CVE-2026-40933 นี้ถูกเปิดเผยตั้งแต่เดือนเมษายน พร้อมกับช่องโหว่อื่น ๆ อีกหลายตัวที่กระทบระบบนิเวศ AI ที่พึ่งพาโปรโตคอล MCP (Model Context Protocol) ของ Anthropic
ตามข้อมูลของ OX Security ต้นตอของปัญหาคือช่องโหว่ command injection เชิงระบบที่เป็นแบบ “by design” ในตัว MCP ของ Anthropic ซึ่งแพร่กระจายผ่านทั้งระบบนิเวศ โดยคำแนะนำของ NIST อธิบายว่า CVE-2026-40933 เกิดจากการ serialization คำสั่ง stdio ที่ไม่ปลอดภัยใน MCP adapter เปิดให้ผู้โจมตีเพิ่ม MCP stdio server พร้อมคำสั่งใด ๆ เพื่อรันโค้ด
จุดอ่อนนี้เกิดขึ้นเพราะ Flowise ก่อนเวอร์ชัน 3.1.0 อนุญาตให้ผู้ใช้ทุกคนเพิ่ม MCP ใหม่ได้ และเมื่อเพิ่มก็สามารถใส่คำสั่งอะไรก็ได้ จึงทำให้รันโค้ดบน OS ที่อยู่เบื้องหลังได้ Obsidian ระบุว่าผู้ใช้คนใดที่สามารถสร้างหรือแก้ไข chatflow ได้ ก็สามารถเพิ่ม Custom MCP Tool และใส่ค่า stdio MCP ที่เป็นอันตรายได้ ซึ่งในทางปฏิบัติต้องอาศัยผู้ไม่หวังดีที่เป็นคนใน หรือบัญชีผู้ใช้ที่ถูกยึด
ผู้โจมตีจากระยะไกลสามารถใส่คำสั่งอันตรายลงใน Custom MCP Tool แล้ว export chatflow เป็นไฟล์ JSON และส่งให้เหยื่อ เพย์โหลดจะใช้ฟังก์ชันปกติของ Flowise รันคำสั่งอันตรายในระหว่างขั้นตอน import โดย Obsidian อธิบายว่า Custom MCP node มี dropdown “Available Actions” ที่แสดงรายการเครื่องมือจาก MCP server ที่ตั้งค่าไว้ การจะแสดงรายการนี้ canvas จะร้องขอให้ backend แจกแจงเครื่องมือของ server ซึ่งในโหมด stdio การแจกแจงนี้จะเริ่มรันคำสั่งที่ตั้งค่าไว้ทันที เพราะ dropdown โหลดตอนที่ chatflow ที่ import เข้ามาแสดงผลบน canvas การ import เพียงอย่างเดียวจึงทำให้เกิดการรันคำสั่งได้
Obsidian ได้เผยแพร่ PoC ที่เมื่อ import แล้วจะสร้าง shell กลับไปยัง bridge address ของ Docker บนเครื่อง host
รายละเอียดช่องโหว่
ความรุนแรงของ CVE-2026-40933 อยู่ที่ผลลัพธ์หลังถูกโจมตีสำเร็จ Obsidian ระบุว่าจะนำไปสู่การรันโค้ดในระดับ OS ด้วยสิทธิ์ของ process Flowise ซึ่งมักเป็น root ใน deployment แบบ container ทุก credential ที่เก็บไว้บนแพลตฟอร์มจะถูกอ่านได้ ทุกบริการที่เชื่อมต่ออยู่จะเข้าถึงได้ และเนื่องจาก Flowise ในระบบ production มักเชื่อมต่อกับฐานข้อมูล API และบัญชีคลาวด์ ขอบเขตความเสียหายจึงขยายไปตามทุกสิ่งที่มันเชื่อมต่อด้วย ทั้งนี้ Flowise Cloud ไม่ได้รับผลกระทบเพราะปิดการใช้งาน stdio MCP ส่วน instance ที่ติดตั้งเอง (self-hosted) มีความเสี่ยงตามค่าเริ่มต้น
ผลกระทบต่อไทย
กระแสการนำ AI agent และ LLM มาใช้ในองค์กรไทยเติบโตอย่างรวดเร็ว และ Flowise เป็นหนึ่งในเครื่องมือ low-code ยอดนิยมที่นักพัฒนาและทีม AI ในไทยใช้สร้าง chatbot และ workflow อัตโนมัติ องค์กรหรือสตาร์ทอัพในไทยที่ติดตั้ง Flowise แบบ self-hosted บนเซิร์ฟเวอร์ของตนเองโดยเฉพาะใน container ที่รันด้วยสิทธิ์ root จึงมีความเสี่ยงสูง เพราะการถูกยึดเครื่องหมายถึงการรั่วไหลของ API key คลาวด์และฐานข้อมูลที่เชื่อมต่ออยู่ทั้งหมด เมื่อมี PoC สาธารณะออกมาแล้ว โอกาสที่ผู้โจมตีจะนำไปใช้จริงก็เพิ่มขึ้นทันที ทีมที่แชร์ chatflow กันภายในหรือรับไฟล์ chatflow จากภายนอกควรระวังเป็นพิเศษ
คำแนะนำ
ผู้ดูแลระบบควรอัปเดต Flowise เป็นเวอร์ชัน 3.1.0 ขึ้นไปโดยเร่งด่วน หลีกเลี่ยงการ import chatflow (ไฟล์ JSON) จากแหล่งที่ไม่น่าเชื่อถือหรือบุคคลที่ไม่รู้จักอย่างเด็ดขาด จำกัดสิทธิ์การสร้างและแก้ไข chatflow เฉพาะผู้ใช้ที่จำเป็น และทบทวนบัญชีผู้ใช้ที่มีอยู่ว่ามีบัญชีใดถูกยึดหรือไม่ ควรรัน Flowise ด้วยสิทธิ์ที่ต่ำที่สุดเท่าที่จำเป็น ไม่รันเป็น root ใน container และแยกเครือข่ายไม่ให้เซิร์ฟเวอร์ Flowise เข้าถึงระบบสำคัญได้โดยตรง หากเป็นไปได้ควรพิจารณาปิดการใช้งาน stdio MCP และหมุนเวียน (rotate) credential ทั้งหมดที่เคยเก็บไว้บนแพลตฟอร์ม
