Nếu bạn tự chạy cổng AI LiteLLM trên VPS hoặc trong Docker, hãy kiểm tra ngay. Ngày 21/10/2026, phiên bản LiteLLM 1.107.0 bị cài mã độc đã lên PyPI và Docker Hub qua chính quy trình phát hành của dự án. Theo bài báo cáo sự cố của LiteLLM, bản này "chứa mã độc đã biên dịch, đánh cắp thông tin xác thực và tải công cụ thực thi mã từ xa". Đến 23 và 24/10, LiteLLM tiếp tục công bố thêm chi tiết về nguyên nhân.

Tóm tắt nhanh

  • Bị ảnh hưởng: litellm==1.107.0 (PyPI) và các tag Docker v1.107.0, latest, main-latest, main-stable.
  • Bản an toàn: ghim về 1.106.2 hoặc bản cụ thể phát hành trước 21/10/2026.
  • Mã độc: chạy mỗi lần Python khởi động, lấy khóa đám mây, khóa API AI, SSH, token CI/CD.
  • Việc cần làm: cô lập máy, dựng lại môi trường, đổi toàn bộ khóa máy đó truy cập được.

Khung giờ bị ảnh hưởng (giờ UTC, ngày 21/10/2026)

Kênh phân phốiThành phầnThời gian
PyPIlitellm==1.107.0 (7 tệp wheel)11:39 đến 13:23
Docker HubTag v1.107.0, latest, main-latest, main-stable11:46 đến 14:20
GHCRlitellm, litellm-database, litellm-non_root (cùng các tag)11:46 đến 13:51

Quy đổi sang giờ Việt Nam, khung nguy hiểm rơi vào khoảng 18:39 đến 21:20 tối 21/10/2026. Máy nào tự động kéo tag latest hoặc cài bản mới nhất trong khoảng này cần được coi là đã bị xâm nhập. Theo BleepingComputer, các hãng bảo mật phát hiện bản độc chỉ trong vòng sáu phút sau khi phát hành.

Mã độc hoạt động ra sao?

Kẻ tấn công không sửa mã nguồn ứng dụng. Chúng chỉ chèn thêm ba tệp vào thư mục site-packages: cook.pth, cook.py và sitecustomize.py. Python tự chạy các tệp này mỗi lần khởi động. Nghĩa là chỉ cần gõ python hay pip trong môi trường đó là mã độc chạy lại.

Theo tổng hợp từ LiteLLM và các hãng Wiz, Socket, Endor Labs, mã độc thu thập:

  • Khóa AWS, Google Cloud, Azure, kể cả qua instance metadata.
  • Khóa API OpenAI, Anthropic và các nhà cung cấp mô hình khác, cùng bảng khóa lưu trong cơ sở dữ liệu LiteLLM proxy.
  • Khóa SSH, GPG, TLS, tệp .env, lịch sử shell.
  • Token GitHub, npm, PyPI, CI/CD, Kubernetes, Vault.
  • Mật khẩu, cookie lưu trong trình duyệt.

Dữ liệu được mã hóa rồi gửi về litellm[.]dev/healthcheck, một tên miền giả mạo. Tệp sitecustomize.py còn chạy một tiến trình nền, mỗi giờ tải và chạy mã Python từ máy chủ của kẻ tấn công. Wiz ghi nhận khóa AWS bị đánh cắp được dùng để liệt kê mô hình AI khoảng 4,5 giờ sau khi bị lấy.

Nguyên nhân: token GitHub bị lộ

Theo LiteLLM, kẻ tấn công nắm token GitHub CLI của ba lập trình viên. Chúng dùng token của một chủ tổ chức để tắt bảo vệ nhánh, rồi cho quy trình phát hành thật chạy trên kho giả Berri-AI/litellm (có dấu gạch nối). Nhờ vậy, gói độc vẫn được ký và đẩy lên như bản chính thức. LiteLLM cũng cho biết đã tạm mở rộng quyền phát hành từ thứ Hai 19/10 để hai kỹ sư đẩy các bản sửa lỗi hằng ngày.

Về điểm xâm nhập ban đầu, LiteLLM ban đầu nghi token bị lộ qua log của một hệ thống LiteLLM nội bộ mở ra Internet. Ngày 23/10, LiteLLM thông báo một số nhận định trước đó "không chính xác hoặc chưa đầy đủ" và dẫn tới bản ghi chính thức mới. Một số báo cáo sau đó nhắc tới một master key bị lộ từ tháng 5 nhưng chưa thu hồi. Bạn nên theo dõi trang sự cố của LiteLLM để có thông tin cuối cùng.

Cách kiểm tra máy chủ của bạn

Lưu ý: LiteLLM khuyên không chạy pip hay Python trong môi trường nghi nhiễm, vì làm vậy sẽ kích hoạt lại mã độc. Hãy kiểm tra bằng lệnh shell:

# Tìm dấu vết gói độc và tệp khởi động
find / -name "litellm-1.107.0.dist-info" 2>/dev/null
find / \( -name "cook.pth" -o -name "cook.py" \) -path "*site-packages*" 2>/dev/null

# Tệp khóa của tiến trình nền
ls -la /tmp/remote_code_loader.lock

# Kiểm tra image Docker đã từng chạy
docker images --digests | grep litellm

Digest của image Docker Hub bị nhiễm là sha256:1bbcb1443bc962e45f5aad53fe3d2c30600e0379715fb6c664cdd3ac126c339e. LiteLLM nhấn mạnh: tìm thấy dấu vết thì chắc chắn đã bị ảnh hưởng, nhưng không tìm thấy chưa chứng minh môi trường sạch.

Xử lý và đổi khóa

  1. Ngắt mạng máy hoặc container bị ảnh hưởng.
  2. Xóa cook.pth, cook.py, sitecustomize.py và các tệp .pyc tương ứng trong __pycache__, rồi dừng tiến trình đang giữ /tmp/remote_code_loader.lock. Cách an toàn hơn là dựng lại image, môi trường ảo từ đầu.
  3. Cài lại với phiên bản ghim cố định: litellm==1.106.2. Với Docker, ghim theo digest.
  4. Từ một máy sạch, đổi mọi khóa máy chủ đó truy cập được: khóa nhà cung cấp mô hình lưu trong proxy, master key, virtual key của LiteLLM, mật khẩu trong DATABASE_URL, khóa IAM, SSH, token GitHub, CI/CD.
  5. Chặn tên miền litellm[.]dev ở DNS và tường lửa đầu ra. Kiểm tra log đám mây, bảng điều khiển của nhà cung cấp AI để phát hiện sử dụng bất thường.

Về lâu dài, Cloud Security Alliance khuyên không mở giao diện quản trị LiteLLM ra Internet, giới hạn kết nối đầu ra theo danh sách cho phép, và tắt lưu nội dung prompt nếu không thực sự cần.

Nguồn tham khảo