Wiki · news-analysis · confidence: high · ⚙ auto-approved · fact-checker

จุดเสี่ยงของการรันโมเดลเอง อยู่ที่โปรแกรมที่แปลผลลัพธ์ ไม่ใช่ที่ตัวโมเดล

vllmsglangself-hostingopen-weightsrcetool-callingsecurityupdated 2026-08-25

จุดเสี่ยงของการรันโมเดลเอง อยู่ที่โปรแกรมที่แปลผลลัพธ์ ไม่ใช่ที่ตัวโมเดล

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

ข้อเสนอของบทวิเคราะห์

Boyd Kane เผยแพร่บทวิเคราะห์เมื่อวันที่ 24 ส.ค. 2569 โดยระบุการโจมตีที่สนใจไว้ว่า "The primary attack considered here involves the LLM emitting a token sequence whose semantic meaning is irrelevant but that exploits a vulnerability in the software that loads an LLM onto GPUs, runs the LLM to generate output tokens, and parses those tokens into responses" (boydkane.com)

ประโยคสำคัญคือ semantic meaning is irrelevant ความหมายของสิ่งที่โมเดลพ่นออกมาไม่เกี่ยว สิ่งที่เกี่ยวคือรูปแบบของสัญลักษณ์ที่ไปกระตุ้นบั๊กในตัวแปลผล ซึ่งต่างจากความเสี่ยงที่คนคุ้นเคยอย่างโมเดลตอบผิดหรือโมเดลถูกหลอกด้วยคำสั่งแฝง

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

ช่องโหว่ที่เกิดขึ้นจริงแล้ว

ตัวอย่างที่ตรวจสอบได้คือช่องโหว่ในโปรแกรม vLLM ซึ่งประกาศความปลอดภัยของโครงการเขียนไว้ว่า "An unsafe deserialization vulnerability allows any authenticated user to execute arbitrary code on the server if they are able to get the model to pass the code as an argument to a tool call" (ประกาศความปลอดภัยของ vLLM)

รายละเอียดที่ยืนยันได้คือระดับความรุนแรง 8.8 กระทบรุ่นตั้งแต่ 0.10.0 ถึงก่อน 0.10.1.1 แก้แล้วในรุ่น 0.10.1.1 เผยแพร่ประกาศเมื่อวันที่ 21 ส.ค. 2568 โดยตัวที่มีปัญหาคือตัวแยกคำสั่งเรียกเครื่องมือของโมเดลตระกูล Qwen3 Coder ที่ส่งค่าที่ได้เข้าฟังก์ชัน eval() ของภาษา Python

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

จุดที่ต้องระวังเวลาอ้างอิงคือรหัส CVE-2025-9141 ไม่มีระเบียนในฐานข้อมูลกลางของสหรัฐ การอ้างอิงจึงควรชี้ไปที่ประกาศของโครงการเองหรือฐานข้อมูล OSV ส่วนคำว่าตัวแยกแบบ XML เป็นคำที่ผู้เขียนบทวิเคราะห์ใช้ ไม่ใช่คำในประกาศความปลอดภัย และเส้นทางไฟล์ที่บทวิเคราะห์อ้างถึงเป็นเส้นทางในตอนนั้น ปัจจุบันโครงสร้างโฟลเดอร์เปลี่ยนไปแล้ว

ลำดับเหตุการณ์ที่ทำให้โค้ดนั้นเข้าไปได้

ระบบตรวจโค้ดอัตโนมัติทิ้งความเห็นระดับวิกฤตไว้บนไฟล์นั้นเมื่อวันที่ 22 ก.ค. 2568 เวลา 18:00 น. ตามเวลามาตรฐานสากล โดยเขียนว่า "The use of eval() on model-generated output is a critical security vulnerability as it can lead to arbitrary code execution"

ราวสามชั่วโมงครึ่งต่อมา ผู้ดูแลโครงการชื่อ simon-mo รวมโค้ดชุดนั้นเข้าไปโดยข้ามขั้นตอนปกติ พร้อมเขียนไว้ว่า "I'm force merging this to unblock model usage, after lint." (ความเห็นตอนรวมโค้ด) ฐานข้อมูล OSV ระบุว่าชุดแก้ไขนี้คือจุดที่ช่องโหว่ถูกใส่เข้ามา

กรณีที่ไม่ใช่ช่องโหว่ แต่ชี้ปัญหาเดียวกัน

เมื่อวันที่ 14 ก.ค. 2569 มีผู้แจ้งบั๊กว่าเมื่อโมเดลพิมพ์ข้อความ <mm:think> ออกมาเป็นเนื้อหาปกติ ตัวแยกความคิดของโมเดลตระกูล minimax_m3 กลับตีความว่าเป็นเครื่องหมายเปิดบล็อกความคิด ผู้แจ้งเขียนว่าคำตอบที่มีข้อความนั้น "is silently split in half" และ "finish_reason is \"stop\", so nothing signals a problem. The caller just receives truncated, unparseable JSON" (รายงานบั๊ก)

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

เรื่องที่คนเข้าใจผิดบ่อย

ข้อแรกคือการอ่านว่านี่เป็นเหตุที่เกิดขึ้นแล้ว ไม่ใช่ บทวิเคราะห์นี้เป็นการตั้งข้อสังเกต ไม่มีผู้เสียหาย ไม่มีรายงานการโจมตีจริง และตัวผู้เขียนเองก็ไม่ได้ฟันธง โดยเขียนไว้ว่า "Somewhat likely? I'm unsure. Discovering a useful vulnerability is probably the harder step." ซึ่งเป็นการตั้งคำถามกับตัวเองพร้อมออกตัว ไม่ใช่การประเมินความน่าจะเป็น

ข้อสองคือการเอาตัวเลขความหลากหลายของโปรแกรมมาใช้ผิดที่ vLLM ระบุบนหน้าเอกสารของตัวเองว่ารองรับสถาปัตยกรรมโมเดลมากกว่า 200 แบบ และมีแม่แบบบทสนทนาแบบ Jinja อยู่ 35 ไฟล์ในโฟลเดอร์ตัวอย่าง เมื่อตรวจวันที่ 25 ส.ค. 2569 แต่ตัวเลขทั้งสองวัดฝั่งขาเข้า คือการประกอบคำสั่งก่อนส่งให้โมเดล ไม่ใช่โค้ดที่แยกผลลัพธ์ขาออก ตัวเลขที่ตรงกับประเด็นมากกว่าคือจำนวนตัวแยกความคิดเฉพาะรุ่น ซึ่งอยู่ราว 27 ไฟล์ในเวลาเดียวกัน ตัวเลขพวกนี้เปลี่ยนทุกสัปดาห์ ถ้าอ้างต้องติดวันที่กำกับ

ข้อสามคือการเหมารวมว่า SGLang มีปัญหาแบบเดียวกัน บทวิเคราะห์เอ่ยชื่อ SGLang คู่กับ vLLM ว่าซับซ้อนเหมือนกัน แต่ไม่ได้ให้หลักฐานเฉพาะของ SGLang เลยสักชิ้น หลักฐานทั้งหมดในบทวิเคราะห์เป็นของ vLLM

สิ่งที่ยังไม่มีหลักฐาน

เมื่อไล่ดูช่องโหว่รันโค้ดของโปรแกรมรันโมเดลตัวอื่น ภาพที่ได้ไม่สนับสนุนการบอกว่านี่เป็นรูปแบบที่พบบ่อย ช่องโหว่ร้ายแรงส่วนใหญ่เข้าทางขาเข้าหรือทางไฟล์โมเดล ไม่ใช่ทางผลลัพธ์ของโมเดล ตัวอย่างเช่นช่องโหว่ของ SGLang ที่ระดับความรุนแรง 9.8 ซึ่งเข้าทางแม่แบบบทสนทนาที่ฝังมาในไฟล์โมเดล (US-CERT VU#915947) และช่องโหว่อื่นที่เข้าทางการแปลงข้อมูลกลับของไฟล์ที่ดาวน์โหลดมา

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

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

สิ่งที่ทีมที่รันโมเดลเองทำได้ตอนนี้

จดรุ่นของโปรแกรมรันโมเดลที่ใช้อยู่ แล้วเทียบกับประกาศความปลอดภัยของโครงการนั้น เหมือนที่ทำกับซอฟต์แวร์เซิร์ฟเวอร์ตัวอื่น หลายทีมอัปเดตน้ำหนักโมเดลบ่อยกว่าอัปเดตโปรแกรมที่รันมัน

ตรวจว่าระบบเปิดใช้งานการเรียกเครื่องมืออัตโนมัติไว้หรือเปล่า ถ้าไม่ได้ใช้ก็ปิด เพราะนั่นคือเงื่อนไขที่ทำให้ช่องโหว่ประเภทนี้ใช้ได้

ปฏิบัติกับไฟล์โมเดลที่ดาวน์โหลดมาเหมือนไฟล์แนบจากคนแปลกหน้า เพราะหลักฐานชี้ว่าทางเข้าที่ถูกใช้จริงมากที่สุดคือทางไฟล์โมเดลกับสิ่งที่ป้อนเข้าไป

คำถามที่ยังไม่มีคำตอบ

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

■ ไม่อยากพลาดของใหม่

อ่านจบแล้วอยากตามเรื่อง AI แบบนี้ต่อทุกวัน เรามีสรุปข่าวภาษาไทยส่งทาง LINE ทุกเช้า กดเพิ่มเพื่อนไว้ได้เลย ไม่มีค่าใช้จ่าย

เพิ่มเพื่อนใน LINE →
QR เพิ่มเพื่อน LINE ของ TRAINIAC AIคอมพิวเตอร์สแกนด้วยมือถือได้เลย