LiteLLM 1.107.0 chứa mã độc, chỉ cần mở Python là key bị gửi đi
Bản LiteLLM 1.107.0 trên PyPI và Docker bị cài mã độc lấy key cloud, key AI, mật khẩu trình duyệt. Ai cài hay kéo image trong chiều tối 21/10 (giờ Việt Nam) cần dựng lại môi trường bằng 1.106.2 và đổi mọi khóa.
Xem nhanh trong 1 phút
Kẻ tấn công vào được quy trình phát hành của LiteLLM nhờ token GitHub nằm trong file log. Token đó lọt vào log vì một con gateway LiteLLM nội bộ ghi lại nguyên văn câu trả lời của AI, và câu trả lời có chứa token.
Kết quả là bản LiteLLM 1.107.0 phát hành ngày 21/10 mang theo mã độc. LiteLLM là thư viện Python để gọi hàng trăm model AI qua một giao diện chung, đồng thời là proxy giữ key OpenAI, Anthropic cho cả team. BleepingComputer ghi nhận gói này có khoảng 92 triệu lượt tải mỗi tháng trên PyPI.
Ai bị dính
Theo thông báo của BerriAI, công ty làm LiteLLM, bạn bị ảnh hưởng nếu:
Cài litellm không ghim phiên bản trong khoảng 11:39 đến 13:23 UTC ngày 21/10, tức 18:39 đến 20:23 giờ Việt Nam. Cả bảy file wheel (macOS, Linux, Windows) đều nhiễm.
Kéo image Docker tag v1.107.0, latest, main-latest hoặc main-stable trong khoảng 11:46 đến 14:20 UTC (18:46 đến 21:20 giờ Việt Nam). Gồm litellm/litellm trên Docker Hub và ghcr.io/berriai/litellm, litellm-database, litellm-non_root trên GHCR.
Thời gian ngắn, nhưng CI chạy đêm, server tự kéo latest khi khởi động lại thì vẫn trúng. Bản 1.106.2 trở về trước không bị gì. Khách dùng bản enterprise riêng cũng không bị ảnh hưởng.
Mã độc làm gì
Mã nguồn của LiteLLM không bị sửa. Hacker chỉ nhét thêm ba file vào gói cài: cook.pth, cook.py và sitecustomize.py.
Chỗ khó chịu nằm ở file .pth. Python tự đọc các file này mỗi lần trình thông dịch khởi động, nên bạn không cần import litellm. Chạy một script bất kỳ, chạy pip, mở REPL trong môi trường đó là mã độc chạy.
Theo phân tích của StepSecurity, cook.py gom gần như mọi thứ có giá trị trên máy:
Key AWS, Azure, GCP, kubeconfig, token GitHub CLI, .npmrc, .pypirc, file .env trong thư mục làm việc
Khóa SSH, GPG, mật khẩu và cookie lưu trong Chrome, Edge, Brave, Firefox
Cấu hình và token của công cụ code AI: Claude Code, Cursor, Windsurf, Copilot, Cline, Codex, Gemini CLI, cùng file cấu hình MCP trong VS Code
Biến môi trường của mọi tiến trình đọc được trên máy Linux
Với image litellm-database, nó đọc thẳng bảng chứa key của các nhà cung cấp AI trong database của proxy
Dữ liệu được mã hóa rồi gửi tới litellm.dev, một tên miền giả đăng ký từ 13/10. File còn lại, sitecustomize.py, chạy ngầm và cứ mỗi giờ hỏi một địa chỉ trên GitHub xem có mã mới để tải về chạy không. StepSecurity cho biết lúc phát hành, địa chỉ đó đang để trống, nên phần tải mã về chưa kích hoạt. Phần lấy key thì đã chạy.
Hacker vào bằng cách nào
Theo báo cáo của BerriAI, kẻ tấn công vào được một bản LiteLLM triển khai nội bộ nhưng lại mở ra internet. Vào bằng lỗ nào thì công ty chưa xác nhận, chỉ nghi là một lỗ hổng vừa được vá. Trong log của bản này có token GitHub CLI của ba lập trình viên. BerriAI giải thích rằng trong một số tình huống, Claude Code đưa token GitHub CLI vào nội dung câu trả lời, và gateway lại được cấu hình ghi log cả nội dung câu trả lời.
Có ba token, hacker dùng token của một chủ tổ chức GitHub để gỡ chế độ bảo vệ nhánh, sửa workflow phát hành cho nó build từ repo giả Berri-AI/litellm (thêm dấu gạch nối). Token thứ hai dùng để bấm duyệt bước phát hành. Token thứ ba xóa lịch sử chạy workflow. Cả quá trình mất chưa tới hai tiếng.
Đây là lần thứ hai trong năm LiteLLM bị đầu độc. Sau vụ tháng 3, họ đã chuyển việc phát hành sang repo riêng, dùng Trusted Publisher, ký image. Những lớp đó vẫn bị vượt vì token thật nằm trong tay hacker.
Mình thấy bài học lớn nhất ở đây không nằm ở PyPI. Nó nằm ở file log. Nhiều người dựng proxy AI cho team, bật ghi log đầy đủ để tiện xem lại prompt, mà quên rằng prompt và câu trả lời của agent code thường chứa token, nội dung .env, chuỗi kết nối database.
Nếu bạn có dùng LiteLLM
Đừng chạy pip hay python trong môi trường nghi nhiễm. Làm vậy là chạy luôn mã độc. Kiểm tra bằng shell:
File /tmp/.pc_once_... có nghĩa là dữ liệu đã gửi đi. Không thấy file này cũng chưa chắc an toàn.
Dừng tiến trình chạy ngầm đang giữ /tmp/remote_code_loader.lock (xem bằng lsof).
Dựng lại môi trường từ đầu: xóa virtualenv, build lại image, cài litellm==1.106.2. Với Docker, ghim theo digest thay vì tag. Xóa image 1.107.0 trong registry nội bộ và cache.
Coi như mọi khóa trên máy đó đã lộ nếu máy có ra internet: key cloud và IAM role, khóa SSH, token GitHub, npm, PyPI, key AI, mật khẩu lưu trong trình duyệt. Trên máy chạy proxy, đổi cả key của từng nhà cung cấp trong database, master key, virtual key và mật khẩu DATABASE_URL.
Xem log mạng có truy cập litellm.dev không, và trên AWS CloudTrail xem có lệnh GetCallerIdentity lạ quanh lúc cài.
Không dính vụ này thì vẫn nên làm hai việc: ghim phiên bản trong requirements.txt hay file lock thay vì để trống, và mở cấu hình log của proxy AI xem nó có đang lưu nguyên văn prompt và câu trả lời không.
Team bạn có tự dựng proxy AI như LiteLLM không, và log của nó đang lưu những gì? Vào cộng đồng Vibe Code & Bảo Mật kể cho mọi người nghe nhé.
LiteLLM 1.107.0 chua ma doc, chi can mo Python la key bi gui di Ban LiteLLM 1.107.0 tren PyPI va Docker bi cai ma doc lay key cloud, key AI, mat khau trinh duyet. Ai cai hay keo image trong chieu toi 21/10 (gio Viet Nam) can dung lai moi truong bang 1.106.2 va doi moi khoa. PyPI chuoi cung ung ma doc API key Ke tan cong vao duoc quy trinh phat hanh cua LiteLLM nho token GitHub nam trong file log. Token do lot vao log vi mot con gateway LiteLLM noi bo ghi lai nguyen van cau tra loi cua AI, va cau tra loi co chua token.
Ket qua la ban **LiteLLM 1.107.0** phat hanh ngay 21/10 mang theo ma doc. LiteLLM la thu vien Python de goi hang tram model AI qua mot giao dien chung, dong thoi la proxy giu key OpenAI, Anthropic cho ca team. BleepingComputer ghi nhan goi nay co khoang 92 trieu luot tai moi thang tren PyPI.

## Ai bi dinh
Theo thong bao cua BerriAI, cong ty lam LiteLLM, ban bi anh huong neu:
- Cai `litellm` khong ghim phien ban trong khoang **11:39 den 13:23 UTC ngay 21/10**, tuc 18:39 den 20:23 gio Viet Nam. Ca bay file wheel (macOS, Linux, Windows) deu nhiem.
- Keo image Docker tag `v1.107.0`, `latest`, `main-latest` hoac `main-stable` trong khoang **11:46 den 14:20 UTC** (18:46 den 21:20 gio Viet Nam). Gom `litellm/litellm` tren Docker Hub va `ghcr.io/berriai/litellm`, `litellm-database`, `litellm-non_root` tren GHCR.
Thoi gian ngan, nhung CI chay dem, server tu keo `latest` khi khoi dong lai thi van trung. Ban 1.106.2 tro ve truoc khong bi gi. Khach dung ban enterprise rieng cung khong bi anh huong.
## Ma doc lam gi
Ma nguon cua LiteLLM khong bi sua. Hacker chi nhet them ba file vao goi cai: `cook.pth`, `cook.py` va `sitecustomize.py`.
Cho kho chiu nam o file `.pth`. Python tu doc cac file nay **moi lan trinh thong dich khoi dong**, nen ban khong can `import litellm`. Chay mot script bat ky, chay `pip`, mo REPL trong moi truong do la ma doc chay.
Theo phan tich cua StepSecurity, `cook.py` gom gan nhu moi thu co gia tri tren may:
- Key AWS, Azure, GCP, kubeconfig, token GitHub CLI, `.npmrc`, `.pypirc`, file `.env` trong thu muc lam viec
- Khoa SSH, GPG, mat khau va cookie luu trong Chrome, Edge, Brave, Firefox
- Cau hinh va token cua cong cu code AI: Claude Code, Cursor, Windsurf, Copilot, Cline, Codex, Gemini CLI, cung file cau hinh MCP trong VS Code
- Bien moi truong cua moi tien trinh doc duoc tren may Linux
- Voi image `litellm-database`, no doc thang bang chua **key cua cac nha cung cap AI** trong database cua proxy
Du lieu duoc ma hoa roi gui toi `litellm.dev`, mot ten mien gia dang ky tu 13/10. File con lai, `sitecustomize.py`, chay ngam va cu moi gio hoi mot dia chi tren GitHub xem co ma moi de tai ve chay khong. StepSecurity cho biet luc phat hanh, dia chi do dang de trong, nen phan tai ma ve chua kich hoat. Phan lay key thi da chay.
## Hacker vao bang cach nao
Theo bao cao cua BerriAI, ke tan cong vao duoc mot ban LiteLLM trien khai noi bo nhung lai mo ra internet. Vao bang lo nao thi cong ty **chua xac nhan**, chi nghi la mot lo hong vua duoc va. Trong log cua ban nay co token GitHub CLI cua ba lap trinh vien. BerriAI giai thich rang trong mot so tinh huong, Claude Code dua token GitHub CLI vao noi dung cau tra loi, va gateway lai duoc cau hinh ghi log ca noi dung cau tra loi.
Co ba token, hacker dung token cua mot chu to chuc GitHub de go che do bao ve nhanh, sua workflow phat hanh cho no build tu repo gia `Berri-AI/litellm` (them dau gach noi). Token thu hai dung de bam duyet buoc phat hanh. Token thu ba xoa lich su chay workflow. Ca qua trinh mat chua toi hai tieng.
Day la lan thu hai trong nam LiteLLM bi dau doc. Sau vu thang 3, ho da chuyen viec phat hanh sang repo rieng, dung Trusted Publisher, ky image. Nhung lop do van bi vuot vi token that nam trong tay hacker.
Minh thay bai hoc lon nhat o day khong nam o PyPI. No nam o file log. Nhieu nguoi dung proxy AI cho team, bat ghi log day du de tien xem lai prompt, ma quen rang prompt va cau tra loi cua agent code thuong chua token, noi dung `.env`, chuoi ket noi database.
## Neu ban co dung LiteLLM
1. **Dung chay `pip` hay `python` trong moi truong nghi nhiem.** Lam vay la chay luon ma doc. Kiem tra bang shell:
```bash
find / -path "*site-packages*" -name cook.pth 2>/dev/null
ls -la /tmp/.pc_once_* /tmp/remote_code_loader.lock
docker images --digests | grep -E 'berriai/litellm|litellm/litellm'
```
File `/tmp/.pc_once_...` co nghia la du lieu **da gui di**. Khong thay file nay cung chua chac an toan.
2. **Dung tien trinh chay ngam** dang giu `/tmp/remote_code_loader.lock` (xem bang `lsof`).
3. **Dung lai moi truong tu dau**: xoa virtualenv, build lai image, cai `litellm==1.106.2`. Voi Docker, ghim theo digest thay vi tag. Xoa image 1.107.0 trong registry noi bo va cache.
4. **Coi nhu moi khoa tren may do da lo** neu may co ra internet: key cloud va IAM role, khoa SSH, token GitHub, npm, PyPI, key AI, mat khau luu trong trinh duyet. Tren may chay proxy, doi ca key cua tung nha cung cap trong database, master key, virtual key va mat khau `DATABASE_URL`.
5. **Xem log mang** co truy cap `litellm.dev` khong, va tren AWS CloudTrail xem co lenh `GetCallerIdentity` la quanh luc cai.
Khong dinh vu nay thi van nen lam hai viec: ghim phien ban trong `requirements.txt` hay file lock thay vi de trong, va mo cau hinh log cua proxy AI xem no co dang luu nguyen van prompt va cau tra loi khong.
---
Team ban co tu dung proxy AI nhu LiteLLM khong, va log cua no dang luu nhung gi? Vao [cong dong Vibe Code & Bao Mat](https://www.facebook.com/groups/1867387324580254) ke cho moi nguoi nghe nhe.
## Nguon
- [Security incident: LiteLLM v1.107.0](https://docs.litellm.ai/blog/security-incident-oct-21-2026), LiteLLM
- [litellm 1.107.0 Compromised on PyPI](https://www.stepsecurity.io/blog/litellm-1-107-0-compromised-pypi-backdoored-wheels-credential-stealer), StepSecurity
- [LiteLLM release pipeline hacked to distribute info-stealer malware](https://www.bleepingcomputer.com/news/security/litellm-release-pipeline-hacked-to-distribute-info-stealer-malware/), BleepingComputer
- [LiteLLM supply chain attack hoovers up passwords and secrets](https://www.theregister.com/security/2026/10/21/litellm-supply-chain-attack-hoovers-up-passwords-and-secrets/5304548), The Register