Lỗ hổng trong Hugging Face Diffusers có thể cho phép các kho lưu trữ mô hình thực thi mã tùy ý

Ba lỗ hổng bảo mật nghiêm trọng đã được phát hiện trong thư viện Diffusers của Hugging Face, cho phép các kho lưu trữ mô hình được tạo thủ công thực thi mã tùy ý một cách âm thầm trên máy tính tải chúng, gây rủi ro cho chuỗi cung ứng trí tuệ nhân tạo (AI). Các lỗ hổng này vượt qua cơ chế trust_remote_code, vốn được thiết kế để bảo vệ người dùng khỏi các đoạn mã chưa được kiểm duyệt.
Hugging Face Diffusers Vulnerabilities
Lỗ hổng FaceHugger trong thư viện Diffusers của Hugging Face

Ba lỗ hổng bảo mật mức độ nghiêm trọng cao đã được tiết lộ trong thư viện Diffusers của Hugging Face, có thể cho phép các kho lưu trữ mô hình được tạo thủ công thực thi mã tùy ý một cách âm thầm trên các máy tính tải chúng, gây ra rủi ro bảo mật cho chuỗi cung ứng trí tuệ nhân tạo (AI).

"Các lỗ hổng này đang vượt qua trust_remote_code, biện pháp bảo vệ được thiết kế để ngăn chặn mã chưa qua kiểm duyệt chạy trong quá trình tải các custom pipeline," các nhà nghiên cứu Gal Zaban và Ido Shani từ Zafran Labs cho biết trong một phân tích được công bố vào tuần trước.

Các thiếu sót này đã được đặt tên chung là FaceHugger.

Với việc Hugging Face đang trở thành "GitHub của kỷ nguyên AI" và các thư viện cũng như kho lưu trữ của nó trở nên phổ biến trong môi trường doanh nghiệp, các lỗ hổng trong các thư viện như Diffusers có thể cấp cho kẻ tấn công quyền truy cập sâu rộng do cách thư viện này được nhúng vào các pipeline sản xuất, hệ thống CI/CD và container images.

Diffusers là một Python package đóng vai trò là thư viện của các mô hình khuếch tán (diffusion models) tiên tiến (SOTA) đã được huấn luyện trước để tạo video, hình ảnh và âm thanh. Theo số liệu thống kê từ pepy.tech, gói này đã được tải xuống hơn 8,1 triệu lần trong tháng 7 năm 2026.

Cơ chế hoạt động và rủi ro RCE

Một trong những khả năng chính của thư viện là tải cục bộ một mô hình từ kho lưu trữ Hugging Face Hub thông qua DiffusionPipeline API. API này sử dụng một tệp cấu hình để khởi tạo các lớp pipeline và thành phần cụ thể, cùng với mã custom pipeline.

Tham số "trust_remote_code" trong Diffusers là một rào chắn bảo mật kiểm soát việc mã Python tùy chỉnh được lưu trữ bên trong kho lưu trữ mô hình có được phép thực thi trong quá trình tải "from_pretrained()" hay không. Việc đặt tham số này thành "True" cho phép thực thi mã tùy chỉnh, trong khi "False" hoặc bỏ qua nó sẽ ngăn chặn mã chưa được xác minh chạy.

"Nguyên nhân gốc rễ của tất cả các biến thể RCE khác nhau [...] là do việc kiểm tra độ tin cậy hoàn toàn nằm ở giai đoạn đầu tiên," Zafran giải thích. "Do đó, bất kỳ phương pháp nào khiến trình tải nhìn thấy mã tùy chỉnh mà rào chắn bảo mật không thấy đều cho phép vượt qua cơ chế trust_remote_code."
Proof of Concept
Minh họa quy trình khai thác lỗ hổng (PoC)

Mỗi biến thể đã được truy nguyên từ một trường hợp Time-of-Check to Time-of-Use (TOCTOU), với việc tải xuống mô hình được thiết kế dưới dạng hai yêu cầu HTTP tuần tự, không nguyên tử thay vì một "thao tác nguyên tử đơn lẻ" và rào chắn bảo mật "trust_remote_code" chỉ được cấu hình để chạy đối với yêu cầu đầu tiên.

Danh sách các lỗ hổng

  • CVE-2026-44827 (Điểm CVSS: 8.8) - Một lỗ hổng chèn mã cho phép mã tùy ý được tải thông qua luồng custom_pipeline từ một kho lưu trữ Hub bằng cách sử dụng một pipeline được tạo thủ công với tên "None.py" mặc dù đã đặt trust_remote_code=False.
  • CVE-2026-45804 (Điểm CVSS: 7.5) - Một lỗ hổng Race condition cho phép mã tùy ý được đưa vào kho lưu trữ bằng cách sửa đổi cấu hình giữa các lệnh gọi HTTP hf_hub_download và snapshot_download tới Hub, dẫn đến thực thi mã.
  • CVE-2026-44513 (Điểm CVSS: 8.8) - Một lỗ hổng chèn mã cho phép mã tùy ý được tải thông qua luồng custom_pipeline từ một kho lưu trữ Hub bất chấp việc đặt trust_remote_code=False.

Sau khi được báo cáo, các lỗ hổng đã được khắc phục trong phiên bản Diffusers 0.38.0, phát hành vào đầu tháng 5 năm 2026. Bất kỳ người dùng nào gọi "DiffusionPipeline.from_pretrained" với các custom pipeline đều bị ảnh hưởng.

"Vấn đề cốt lõi là các thành phần được lấy từ các kho lưu trữ AI thường được coi là dữ liệu thụ động, trong khi các tệp cấu hình, trình tải và mã custom pipeline có thể âm thầm chuyển thành mã thực thi và biến một quá trình tải mô hình thông thường thành một vector truy cập ban đầu," các nhà nghiên cứu bổ sung.

Biện pháp giảm thiểu và khuyến nghị

Nếu việc cập nhật bản vá ngay lập tức không khả thi, những người duy trì dự án đã đề xuất các giải pháp thay thế sau:

  • Chỉ gọi from_pretrained với pretrained_model_name_or_path, custom_pipeline và các thư mục snapshot cục bộ từ các nguồn hoàn toàn tin cậy đã được kiểm tra.
  • Không truyền custom_pipeline= trỏ đến một kho lưu trữ Hub khác với pretrained_model_name_or_path chính trước khi đọc tệp pipeline.py của nó.
  • Trước khi gọi from_pretrained trên một snapshot cục bộ, hãy kiểm tra snapshot để tìm các tệp *.py không mong muốn, đặc biệt là dưới các thư mục con thành phần (unet/, scheduler/, v.v.) và tại gốc của snapshot.

"Những lỗ hổng này nhấn mạnh nhu cầu quan trọng trong việc coi các kho lưu trữ mô hình AI là mã không đáng tin cậy, đặc biệt là khi sự phụ thuộc của doanh nghiệp vào các nền tảng như Hugging Face tiếp tục tăng lên," Zafran cho biết. "Một lần tải xuống mô hình thông thường có thể dễ dàng trở thành vector thực thi mã tùy ý nếu các ranh giới bảo mật như trust_remote_code bị vượt qua."