CVE-2026-44827 ช่วยให้ผู้โจมตีสามารถรันโค้ดตามต้องการ (arbitrary code) ได้เมื่อมีการโหลดโมเดล Hugging Face Diffusers แม้ว่าจะปิดแฟล็ก trust_remote_code ไว้ก็ตาม นักวิจัยตั้งชื่อช่องโหว่นี้ว่า “FaceHugger” และพบว่าสาเหตุมาจากสภาวะการแข่งขัน (race condition) ในกระบวนการโหลดโมเดลแบบสองขั้นตอนของไลบรารีนี้ โดยทุก Pipeline ที่มีการดึงโมเดลจาก Hub อาจได้รับผลกระทบ
ทำไมช่องโหว่นี้จึงมีความสำคัญ
Diffusers เป็นขุมพลังเบื้องหลังโมเดล text-to-image และโมเดล diffusion อื่นๆ ในเดือนกรกฎาคม 2026 มีการดาวน์โหลดสูงถึง 8.1 ล้านครั้ง ดังนั้นงาน CI/CD, container images และบริการ enterprise inference จำนวนมหาศาลจึงต้องพึ่งพาไลบรารีนี้ ช่องโหว่นี้สามารถข้ามกลไกความปลอดภัยหลัก (trust_remote_code) ที่นักพัฒนาเปิดใช้งานเพื่อบล็อกโค้ด Python ที่ไม่น่าเชื่อถือซึ่งมาพร้อมกับโมเดลได้
กลไกการข้ามผ่าน (Bypass) ทำงานอย่างไร
- การโหลดแบบสองขั้นตอน (Two-phase loading): Diffusers จะดึงการตั้งค่าโมเดล (model configuration) มาก่อน จากนั้นคำขอที่สองจะดึงน้ำหนักของโมเดล (model weights) และโค้ดที่เกี่ยวข้องทั้งหมดมา
- สภาวะการแข่งขัน (Race condition): การตรวจสอบความปลอดภัยที่ตรวจสอบคำขอแรกไม่ได้ครอบคลุมไปถึงคำขอที่สอง
- การแทรก Payload: ผู้โจมตีที่ควบคุมคำขอที่สองสามารถฉีดโค้ดอันตรายที่ไลบรารีจะนำไปรันในภายหลัง ซึ่งเป็นการข้ามผ่านด่านตรวจความปลอดภัย (trust gate) ไปโดยสิ้นเชิง
เนื่องจากการตรวจสอบจะดูเฉพาะคำขอเริ่มต้นเท่านั้น การปิด trust_remote_code จึงให้ความรู้สึกปลอดภัยที่ผิดพลาด (false sense of protection)
ขั้นตอนที่นักพัฒนาควรดำเนินการทันที
- ระบุเวอร์ชันของ Diffusers ให้แน่นอน (Pin the version) ใน
requirements.txtหรือ lock file ของคุณ เพื่อป้องกันการอัปเกรดไปยังเวอร์ชันที่มีช่องโหว่โดยไม่ตั้งใจ - หลีกเลี่ยงการดึงโมเดลแบบทันที (on-the-fly) ในสภาพแวดล้อม production ควรดาวน์โหลดโมเดลมาเก็บไว้ใน artifact store ที่เชื่อถือได้ (เช่น internal S3 bucket) แล้วจึงโหลดจากที่นั่น
- ตรวจสอบ (Audit) คลังเก็บโมเดล ก่อนใช้งาน ตรวจสอบให้แน่ใจว่าไฟล์โค้ดของโมเดลมีค่า hash ตรงตามที่คาดไว้ หรือมาจากแหล่งที่ผ่านการตรวจสอบแล้ว
- บังคับใช้การควบคุมการเชื่อมต่อเครือข่ายขาออก (Network egress controls) เพื่อไม่ให้ build agents และ inference servers สามารถเข้าถึง Hugging Face hub สาธารณะได้ เว้นแต่จะได้รับอนุญาต
- รันการโหลดโมเดลภายใน container หรือ sandbox ที่แยกส่วนออกมา โดยใช้สิทธิ์ขั้นต่ำ (minimal privileges) เพื่อจำกัดผลกระทบหากมีการรันโค้ดที่ไม่พึงประสงค์
บทสรุป:
ช่องโหว่ FaceHugger แสดงให้เห็นว่าการปิด trust_remote_code นั้นยังไม่เพียงพอ จนกว่าคุณจะอัปเดต Diffusers และเสริมความแข็งแกร่งให้กับ pipeline การนำเข้าโมเดล (model ingestion pipeline) การดึงโมเดลจากระยะไกลทุกครั้งจะยังคงเป็นช่องทางที่อาจถูกใช้เพื่อรันโค้ดอันตรายได้
