LiteLLM bị cài mã độc, Railway bị lộ biến môi trường: lập trình viên cần đổi secret ngay
Nội dung bài viết

Chỉ trong hai ngày 21-22/10/2026, hai sự cố lớn cùng nhắm vào thứ quý nhất của lập trình viên: secret - khóa API, mật khẩu database, token đăng nhập dịch vụ đám mây.

  • LiteLLM, thư viện Python phổ biến để kết nối ứng dụng với các mô hình AI, bị chiếm quy trình phát hành và phát tán phiên bản 1.107.0 chứa mã độc qua PyPI và Docker.
  • Railway, nền tảng hosting ứng dụng với khoảng 4,8 triệu người dùng, phát hiện kẻ lạ truy cập vào hệ thống lưu biến môi trường của khách hàng.

Nếu bạn dùng một trong hai, hãy coi như secret đã bị lộ và đổi ngay.

LiteLLM 1.107.0: mã độc chạy mỗi khi Python khởi động

LiteLLM là SDK và cổng AI (AI gateway) mã nguồn mở, cho phép ứng dụng gọi mô hình của nhiều nhà cung cấp qua cùng một API. Thư viện có khoảng 92 triệu lượt tải mỗi tháng trên PyPI.

Ngày 21/10/2026, kẻ tấn công dùng tài khoản GitHub của ba kỹ sư LiteLLM - nhiều khả năng bằng token GitHub CLI bị đánh cắp - để sửa quy trình phát hành, tự phê duyệt và đẩy bản 1.107.0, rồi xóa nhật ký workflow để che dấu vết. Các bản bị nhiễm:

Nơi phát hànhBản bị nhiễmThời gian (UTC, 21/10)
PyPIlitellm==1.107.0 (cả 7 bản build cho Windows, Linux, macOS)11:39 - 13:23
Docker Hubtag v1.107.0, latest, main-latest, main-stable11:46 - 14:20
GHCRghcr.io/berriai/litellm, litellm-database, litellm-non_root với các tag trên11:46 - 13:51

Bản sạch gần nhất là 1.106.2. Khách hàng dùng registry riêng của bản enterprise không bị ảnh hưởng.

Cách mã độc hoạt động: kẻ tấn công không sửa mã của LiteLLM mà chèn 3 file cook.pth, cook.py và sitecustomize.py vào thư mục thư viện của Python. Python tự chạy các file này mỗi lần khởi động, nên mã độc chạy kể cả khi ứng dụng không dùng tới LiteLLM, và kể cả khi bạn chạy python hay pip để kiểm tra. Mã độc thu thập:

  • thông tin đăng nhập AWS, Azure, Google Cloud, Kubernetes, Docker;
  • khóa API của các dịch vụ AI và cấu hình nhà cung cấp lưu trong LiteLLM;
  • token GitHub, npm, PyPI, CI/CD, file .env, khóa SSH, GPG, TLS;
  • dữ liệu trình duyệt: mật khẩu đã lưu, cookie, thông tin thẻ, lịch sử;
  • biến môi trường và lịch sử lệnh.

Dữ liệu được mã hóa rồi gửi về litellm[.]dev/healthcheck - tên miền giả mạo. File sitecustomize.py còn khởi chạy một tiến trình nền, cứ mỗi giờ tải thêm mã Python từ máy chủ bên ngoài về chạy.

Đây là lần thứ hai trong năm LiteLLM bị tấn công chuỗi cung ứng. Vụ tháng 3 làm lộ dữ liệu liên quan tới khoảng 2.500 tổ chức.

Một chi tiết đáng chú ý: LiteLLM cho biết kẻ tấn công lấy được token GitHub từ log của một bản LiteLLM nội bộ để lộ ra Internet. Theo LiteLLM, trong một số trường hợp Claude Code chèn token GitHub CLI của người dùng vào nội dung phản hồi, nên nếu hệ thống ghi log toàn bộ phản hồi, token có thể nằm trong log. Bài học chung: không ghi log nguyên văn request/response của công cụ AI, và không để dịch vụ nội bộ lộ ra Internet.

Nếu đã cài LiteLLM 1.107.0

  1. Dừng ngay các ứng dụng, container đang chạy bản 1.107.0.
  2. Không sửa tại chỗ - xóa hẳn môi trường Python hoặc container bị nhiễm, tạo lại từ đầu với bản 1.106.2. Ghim phiên bản cụ thể thay vì dùng tag latest.
  3. Tìm các file cook.pth, cook.py, sitecustomize.py lạ trong thư mục site-packages, và kết nối ra ngoài tới litellm[.]dev.
  4. Đổi toàn bộ secret có trên máy đó: khóa cloud, khóa API AI, token GitHub/npm/PyPI, khóa SSH, mật khẩu database, thông tin trong .env. Đăng xuất các phiên trình duyệt nếu đó là máy cá nhân.
  5. Kiểm tra log của các dịch vụ cloud xem có hoạt động lạ từ ngày 21/10.

Railway: biến môi trường có thể đã bị giải mã

Railway là nền tảng đám mây để triển khai ứng dụng, API, database, phục vụ khoảng 4,8 triệu người dùng và hơn 16 triệu dịch vụ. Railway lưu cấu hình triển khai - thường gồm khóa API, mật khẩu database, thông tin registry - dưới dạng biến môi trường.

Theo Railway, một bên thứ ba trái phép có thể đã truy cập các biến môi trường được mã hóa, và với một số biến, đã lấy được nội dung đã giải mã. Railway cho biết sự cố nằm trong chuỗi tấn công nhắm vào các nhà cung cấp dịch vụ AI inference - các nhà cung cấp này đã được thông báo và khuyên thu hồi toàn bộ khóa.

Phân tích ban đầu cho thấy chỉ một phần người dùng bị ảnh hưởng, nhưng Railway khuyên tất cả người dùng:

  • đổi ngay mọi biến môi trường chứa secret, kể cả thông tin đăng nhập registry riêng;
  • kiểm tra log của các dịch vụ liên quan xem có hoạt động bất thường.

Railway đã tạm dừng mọi lượt triển khai trong lúc điều tra. Tới sáng 22/10, việc build đã được khôi phục cho gói Pro và Enterprise, các gói Hobby, Free và Trial sẽ được khôi phục sau.

Đổi secret đúng cách

Dù dùng LiteLLM, Railway hay chỉ muốn chủ động phòng ngừa, quy trình đổi secret nên làm theo thứ tự:

  1. Liệt kê mọi secret mà ứng dụng dùng: khóa API, mật khẩu database, token, khóa ký JWT, webhook secret.
  2. Tạo secret mới ở phía dịch vụ gốc (nhà cung cấp cloud, AI, database) trước, cập nhật vào ứng dụng, triển khai lại.
  3. Thu hồi secret cũ sau khi ứng dụng đã chạy ổn với secret mới. Chỉ thêm secret mới mà không thu hồi secret cũ thì kẻ tấn công vẫn dùng được.
  4. Kiểm tra log sử dụng của từng dịch vụ (hóa đơn cloud, lượng gọi API AI) để phát hiện việc dùng trái phép - khóa AI bị lộ thường bị lạm dụng rất nhanh để chạy mô hình bằng tiền của nạn nhân.
  5. Về lâu dài, ưu tiên token ngắn hạn, quyền tối thiểu, và trình quản lý secret thay vì để secret dài hạn trong biến môi trường.

Nguồn tham khảo: BleepingComputer - LiteLLM, Help Net Security, SecurityWeek và BleepingComputer - Railway.