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)

ขั้นตอนที่นักพัฒนาควรดำเนินการทันที

  1. ระบุเวอร์ชันของ Diffusers ให้แน่นอน (Pin the version) ใน requirements.txt หรือ lock file ของคุณ เพื่อป้องกันการอัปเกรดไปยังเวอร์ชันที่มีช่องโหว่โดยไม่ตั้งใจ
  2. หลีกเลี่ยงการดึงโมเดลแบบทันที (on-the-fly) ในสภาพแวดล้อม production ควรดาวน์โหลดโมเดลมาเก็บไว้ใน artifact store ที่เชื่อถือได้ (เช่น internal S3 bucket) แล้วจึงโหลดจากที่นั่น
  3. ตรวจสอบ (Audit) คลังเก็บโมเดล ก่อนใช้งาน ตรวจสอบให้แน่ใจว่าไฟล์โค้ดของโมเดลมีค่า hash ตรงตามที่คาดไว้ หรือมาจากแหล่งที่ผ่านการตรวจสอบแล้ว
  4. บังคับใช้การควบคุมการเชื่อมต่อเครือข่ายขาออก (Network egress controls) เพื่อไม่ให้ build agents และ inference servers สามารถเข้าถึง Hugging Face hub สาธารณะได้ เว้นแต่จะได้รับอนุญาต
  5. รันการโหลดโมเดลภายใน container หรือ sandbox ที่แยกส่วนออกมา โดยใช้สิทธิ์ขั้นต่ำ (minimal privileges) เพื่อจำกัดผลกระทบหากมีการรันโค้ดที่ไม่พึงประสงค์

บทสรุป:

ช่องโหว่ FaceHugger แสดงให้เห็นว่าการปิด trust_remote_code นั้นยังไม่เพียงพอ จนกว่าคุณจะอัปเดต Diffusers และเสริมความแข็งแกร่งให้กับ pipeline การนำเข้าโมเดล (model ingestion pipeline) การดึงโมเดลจากระยะไกลทุกครั้งจะยังคงเป็นช่องทางที่อาจถูกใช้เพื่อรันโค้ดอันตรายได้