สรุปสั้น
มีการเปิดเผยช่องโหว่ความปลอดภัยระดับรุนแรงสูง 3 รายการในไลบรารี Diffusers ของ Hugging Face ซึ่งเปิดทางให้คลังโมเดลที่ถูกสร้างขึ้นมาเป็นพิเศษสามารถรันโค้ดใดก็ได้บนเครื่องที่โหลดมันขึ้นมาอย่างเงียบเชียบ เท่ากับเปิดห่วงโซ่อุปทานของงานปัญญาประดิษฐ์ให้รับความเสี่ยงด้านความปลอดภัย นาย Gal Zaban และนาย Ido Shani นักวิจัยจาก Zafran Labs ระบุในบทวิเคราะห์ที่เผยแพร่เมื่อสัปดาห์ก่อนว่า “ช่องโหว่เหล่านี้ข้ามกลไก trust_remote_code ซึ่งเป็นด่านป้องกันที่ออกแบบมาเพื่อหยุดไม่ให้โค้ดที่ยังไม่ผ่านการตรวจสอบทำงานในกระบวนการโหลดไปป์ไลน์แบบกำหนดเอง” โดยช่องโหว่ชุดนี้ถูกตั้งชื่อรวมกันว่า FaceHugger
ความสำคัญของเรื่องนี้อยู่ที่ตำแหน่งของ Hugging Face ในระบบนิเวศงาน AI ซึ่งกลายเป็น “GitHub แห่งยุค AI” ไปแล้ว ไลบรารีและคลังโมเดลของแพลตฟอร์มถูกใช้แพร่หลายในสภาพแวดล้อมองค์กร ช่องโหว่ในไลบรารีอย่าง Diffusers จึงให้สิทธิ์เข้าถึงแก่ผู้โจมตีได้กว้างขวาง เพราะไลบรารีนี้ถูกฝังอยู่ในไปป์ไลน์ที่ใช้งานจริง ระบบ CI/CD และอิมเมจของคอนเทนเนอร์ ตัว Diffusers เองเป็นแพ็กเกจภาษาไพทอนที่ทำหน้าที่เป็นคลังโมเดล diffusion ที่ฝึกมาแล้วระดับแนวหน้าสำหรับสร้างวิดีโอ ภาพ และเสียง ซึ่งตามสถิติที่แชร์บน pepy.tech ระบุว่ามียอดดาวน์โหลดมากกว่า 8.1 ล้านครั้งในเดือนกรกฎาคม พ.ศ. 2569 เพียงเดือนเดียว
รายละเอียดข่าว
เว็บไซต์ The Hacker News รายงานเมื่อวันที่ 3 สิงหาคม พ.ศ. 2569 ว่า หนึ่งในความสามารถหลักของไลบรารี Diffusers คือการโหลดโมเดลจากคลังบน Hugging Face hub มาไว้ที่เครื่องผ่าน API ชื่อ DiffusionPipeline ซึ่งจะไปอ่านไฟล์ตั้งค่าเพื่อกำหนดค่าเริ่มต้นให้คลาสของไปป์ไลน์และองค์ประกอบต่าง ๆ พร้อมกับโค้ดไปป์ไลน์แบบกำหนดเองที่มาด้วยกัน จุดนี้เองที่กลายเป็นเส้นแบ่งระหว่าง “ข้อมูล” กับ “โค้ดที่รันได้”
พารามิเตอร์ trust_remote_code ใน Diffusers ทำหน้าที่เป็นด่านความปลอดภัยที่ควบคุมว่าโค้ดไพทอนแบบกำหนดเองที่โฮสต์อยู่ในคลังโมเดลจะได้รับอนุญาตให้ทำงานระหว่างการโหลดผ่าน from_pretrained() หรือไม่ การตั้งค่าเป็น True คืออนุญาตให้รันโค้ดแบบกำหนดเอง ส่วนการตั้งเป็น False หรือไม่ระบุเลย (ซึ่งเป็นค่าเริ่มต้น) คือปิดกั้นไม่ให้โค้ดที่ยังไม่ได้ตรวจสอบทำงาน แต่ Zafran อธิบายว่า “ต้นตอของช่องโหว่ทุกตัวแปรที่นำไปสู่การรันโค้ด คือการที่ด่านตรวจสอบความน่าเชื่อถืออยู่ในเฟสแรกทั้งหมด ดังนั้นวิธีใดก็ตามที่ทำให้ตัวโหลดมองเห็นโค้ดแบบกำหนดเองที่ด่านตรวจไม่เห็น ย่อมข้ามกลไก trust_remote_code ได้”

หลังการเปิดเผยอย่างมีความรับผิดชอบ ช่องโหว่ทั้งหมดได้รับการแก้ไขแล้วใน Diffusers เวอร์ชัน 0.38.0 ซึ่งปล่อยออกมาตั้งแต่ต้นเดือนพฤษภาคม พ.ศ. 2569 โดยผู้ที่ได้รับผลกระทบคือผู้ใช้ทุกรายที่เรียก DiffusionPipeline.from_pretrained ร่วมกับไปป์ไลน์แบบกำหนดเอง นักวิจัยสรุปประเด็นเชิงหลักการไว้ว่า “ปัญหาที่แท้จริงคือสิ่งที่ดึงมาจากคลังโมเดล AI มักถูกปฏิบัติเสมือนเป็นข้อมูลที่ไม่ทำอะไร ทั้งที่ไฟล์ตั้งค่า ตัวโหลด และโค้ดไปป์ไลน์แบบกำหนดเอง สามารถข้ามเส้นไปเป็นโค้ดที่รันได้อย่างเงียบ ๆ และเปลี่ยนการโหลดโมเดลตามปกติให้กลายเป็นช่องทางเข้าถึงระบบครั้งแรกได้”
ทั้งนี้รายงานไม่ได้ระบุว่ามีการนำช่องโหว่ชุดนี้ไปใช้โจมตีจริงแล้วหรือไม่ และไม่มีตัวเลขว่ามีคลังโมเดลที่เป็นอันตรายอยู่บนแพลตฟอร์มมากน้อยเพียงใด สิ่งที่ยืนยันได้จากหลักฐานที่มีคือความเป็นไปได้ทางเทคนิคและขนาดของฐานผู้ใช้ที่อาจได้รับผลกระทบเท่านั้น
รายละเอียดช่องโหว่
ช่องโหว่แต่ละตัวถูกไล่ย้อนกลับไปหาสาเหตุเดียวกันคือกรณี Time-of-Check to Time-of-Use หรือ TOCTOU เนื่องจากการดาวน์โหลดโมเดลถูกออกแบบให้เป็นคำขอ HTTP สองครั้งที่ทำงานต่อเนื่องกันและไม่เป็นหน่วยเดียวกัน แทนที่จะเป็น “ปฏิบัติการอะตอมมิกครั้งเดียว” ขณะที่ด่านความปลอดภัย trust_remote_code ถูกตั้งให้ทำงานกับคำขอแรกเท่านั้น ช่องว่างระหว่างสองคำขอนี้จึงเป็นพื้นที่ให้ผู้โจมตีสอดโค้ดเข้ามาได้
| CVE | CVSS | ประเภท | รายละเอียด |
|---|---|---|---|
| CVE-2026-44827 | 8.8 | Code injection | โหลดโค้ดใดก็ได้ผ่านเส้นทาง custom_pipeline จากคลังบน Hub ด้วยไปป์ไลน์ที่สร้างขึ้นมาให้ชื่อว่า None.py แม้จะส่ง trust_remote_code=False หรือไม่ระบุ (ค่าเริ่มต้น) |
| CVE-2026-45804 | 7.5 | Race condition | แทรกโค้ดเข้าไปในคลังได้ด้วยการแก้ไฟล์ตั้งค่าในช่วงระหว่างคำขอ hf_hub_download กับ snapshot_download ที่ยิงไปยัง Hub จนนำไปสู่การรันโค้ด |
| CVE-2026-44513 | 8.8 | Code injection | โหลดโค้ดใดก็ได้ผ่านเส้นทาง custom_pipeline จากคลังบน Hub แม้จะส่ง trust_remote_code=False หรือไม่ระบุก็ตาม |
สิ่งที่ทำให้ชุดช่องโหว่นี้อันตรายกว่าช่องโหว่รันโค้ดทั่วไปคือ ผู้ใช้ที่ทำทุกอย่างถูกต้องตามคำแนะนำด้านความปลอดภัย นั่นคือไม่เปิด trust_remote_code ก็ยังโดนได้อยู่ดี เพราะกลไกที่ควรจะปกป้องนั้นถูกข้ามไปตั้งแต่แรก ผู้ใช้จึงไม่มีสัญญาณเตือนใด ๆ ให้สังเกตระหว่างการโหลดโมเดลตามปกติ
ผลกระทบ
ผู้ที่ได้รับผลกระทบโดยตรงคือทีมที่ใช้ Diffusers ในไปป์ไลน์การทำงานจริง ซึ่งมักไม่ได้จำกัดอยู่แค่เครื่องของนักวิจัยคนเดียว แต่ฝังอยู่ในระบบ CI/CD และอิมเมจคอนเทนเนอร์ที่ทำงานอัตโนมัติ เมื่อการโหลดโมเดลกลายเป็นช่องทางรันโค้ด ผู้โจมตีจึงอาจได้สิทธิ์ในสภาพแวดล้อมที่มีข้อมูลรับรองของระบบคลาวด์ กุญแจ API และสิทธิ์เข้าถึงคลังโค้ดขององค์กรอยู่ด้วย ซึ่งมีค่ามากกว่าตัวเครื่องที่ถูกเจาะเสียอีก
ยอดดาวน์โหลดกว่า 8.1 ล้านครั้งในเดือนเดียวสะท้อนว่าฐานผู้ใช้ที่อาจได้รับผลกระทบมีขนาดใหญ่มาก และเนื่องจากแพตช์ออกมาตั้งแต่ต้นเดือนพฤษภาคมแต่รายละเอียดเพิ่งถูกเปิดเผยเมื่อสัปดาห์ที่ผ่านมา จึงมีความเป็นไปได้สูงที่หลายองค์กรยังใช้เวอร์ชันที่มีช่องโหว่อยู่โดยไม่รู้ตัว โดยเฉพาะในอิมเมจคอนเทนเนอร์ที่สร้างไว้ก่อนหน้าและไม่ได้ถูกสร้างใหม่
ประเด็นเชิงหลักการที่สำคัญกว่าตัวช่องโหว่คือ ข้อสรุปของนักวิจัยที่ว่าต้องปฏิบัติต่อคลังโมเดล AI เสมือนเป็น “โค้ดที่ไม่น่าเชื่อถือ” ไม่ใช่ข้อมูลนิ่ง ๆ ซึ่งเป็นการเปลี่ยนกรอบคิดที่หลายองค์กรยังไม่ได้ปรับตาม เพราะกระบวนการตรวจสอบความปลอดภัยส่วนใหญ่ยังโฟกัสที่แพ็กเกจซอฟต์แวร์และไลบรารี ไม่ได้ครอบคลุมไปถึงไฟล์โมเดลและไฟล์ตั้งค่าที่ดึงมาจากคลังสาธารณะ
คำแนะนำ
มาตรการแรกคืออัปเกรด Diffusers เป็นเวอร์ชัน 0.38.0 ขึ้นไป และตรวจสอบด้วยว่าอิมเมจคอนเทนเนอร์ ไฟล์ requirements และสภาพแวดล้อมของระบบ CI/CD ทั้งหมดถูกสร้างใหม่ด้วยเวอร์ชันที่แพตช์แล้ว เพราะการอัปเกรดเฉพาะเครื่องนักพัฒนาไม่ได้ครอบคลุมจุดที่ไลบรารีทำงานจริง
หากยังอัปเดตทันทีไม่ได้ ทีมผู้ดูแลโครงการแนะนำมาตรการชั่วคราวไว้ 3 ข้อ ข้อแรกคือเรียก from_pretrained ด้วย pretrained_model_name_or_path, custom_pipeline และไดเรกทอรี snapshot ในเครื่อง เฉพาะจากแหล่งที่เชื่อถือได้เต็มที่และผ่านการตรวจสอบมาแล้วเท่านั้น ข้อสองคืออย่าส่ง custom_pipeline= ที่ชี้ไปยังคลังบน Hub คนละคลังกับ pretrained_model_name_or_path ก่อนที่จะได้อ่านไฟล์ pipeline.py ของคลังนั้นด้วยตาตัวเอง และข้อสามคือก่อนเรียก from_pretrained บน snapshot ในเครื่อง ให้ตรวจ snapshot นั้นว่ามีไฟล์นามสกุล .py ที่ไม่คาดคิดหรือไม่ โดยเฉพาะในไดเรกทอรีย่อยขององค์ประกอบต่าง ๆ เช่น unet/ และ scheduler/ รวมถึงที่รากของ snapshot
ในระดับนโยบาย องค์กรควรเริ่มปฏิบัติต่อโมเดลและไฟล์ตั้งค่าที่ดึงจากคลังสาธารณะด้วยมาตรฐานเดียวกับแพ็กเกจซอฟต์แวร์จากภายนอก คือมีการตรึงเวอร์ชัน มีการตรวจสอบก่อนนำเข้าใช้งาน และมีการทำมิเรอร์ภายในสำหรับโมเดลที่ใช้ในระบบจริง แทนที่จะดึงสดจากอินเทอร์เน็ตทุกครั้งที่ไปป์ไลน์ทำงาน
