LiteLLM mendapat pintu belakang: audit rantai alat AI Anda minggu ini
TeamPCP mengirimkan malware pencuri kredensial ke dalam rilis LiteLLM dan menguras kunci AWS, GCP, dan SSH dari mesin pengembang. Lima pemeriksaan untuk dijalankan sebelum instalasi pip Anda berikutnya.
Pada bulan Maret 2026, pelaku ancaman yang menamakan dirinya TeamPCP menerbitkan rilis yang telah dirusak
litellm, perpustakaan Python yang menggabungkan 100+ penyedia LLM di belakang satu
Antarmuka yang kompatibel dengan OpenAI. Rilis ini mengirimkan infostealer yang dihubungkan ke jalur pasca-instalasi.
Siapa pun yang berlari pip install litellm selama jendela menyerahkan kunci pribadi SSH,
Kredensial AWS, token Azure, JSON akun layanan GCP, dan Docker config.json
file ke titik akhir yang dikendalikan penyerang. Berita Peretas, Ardan Labs, dan Security Boulevard
masing-masing mengkonfirmasi atribusi dan daftar artefak yang dieksfiltrasi.
LiteLLM tidak jelas. Itu berada di dalam kerangka agen, di dalam saluran CI yang merutekan eval lalu lintas lintas penyedia, di dalam buku catatan Jupyter di laptop data scientist yang juga menampungnya kredensial cloud yang berumur panjang. Satu rilis yang dikompromikan memberi penyerang dompet penyedia kunci, serangkaian peran cloud, dan materi SSH untuk dipindahkan secara lateral ke setiap repo kunci tersebut bisa mencapai.
Anda tidak dapat mencegah pencurian token PyPI milik pengelola. Anda dapat memperkecil radius ledakan Anda sehingga ketika perpustakaan AI berikutnya diserang; dan itu akan terjadi; satu laptop tidak berubah menjadi a insiden lintas awan. Berikut lima pemeriksaan yang layak dijalankan minggu ini di seluruh AI rantai alat: LiteLLM, LangChain, LlamaIndex, pembungkus Ollama, SDK Claude, klien MCP, dan semuanya kerangka agen yang Anda miliki dalam produksi.
Apa yang sebenarnya diambil oleh TeamPCP
Muatannya mengalir ke dalam setup.py dan pengait pasca pemasangan. Saat mengimpor atau menginstalnya
baca yang berikut dari direktori home pengembang dan sistem file CI runner:
~/.ssh/id_rsa,id_ed25519, Danknown_hosts~/.aws/credentialsDan~/.aws/configprofil~/.azure/token dan menyegarkan kredensial- GCP
application_default_credentials.jsondan file JSON akun layanan ~/.docker/config.jsontermasuk token autentikasi registri- Variabel lingkungan dimulai dengan
AWS_,GCP_,OPENAI_,ANTHROPIC_,GITHUB_
Saluran exfil adalah HTTPS POST biasa ke domain penyerang yang dirotasi setiap minggu. Penghapusan terjadi dalam beberapa hari, tapi jangka waktu itu sudah cukup; kredensial yang bocor tidak dapat dibatalkan. Ke cek.
Pemeriksaan 1: sematkan versi yang tepat, bukan rentang
Itu ^1.14.0 Dan ~=1.48 pola di requirements.txt,
pyproject.toml, Dan package.json biarkan rilis minor atau patch baru apa pun
berguling ke lingkungan yang bersih semalaman. Ini adalah bagaimana jendela berbahaya selama tiga jam menjadi a
paparan selama sebulan; lockfile Anda tidak pernah dibuat ulang tetapi cache CI Anda menyebabkan kerusakan
versi pada cold build berikutnya.
Sematkan versi yang tepat. Sematkan demi hash jika ekosistem mendukungnya.
Dengan --require-hashes, pip menolak menginstal apa pun yang SHA-256-nya tidak cocok
apa yang Anda hasilkan pada waktu kunci. Rilis yang dikompromikan dengan string versi yang sama tetapi a
hash tarball yang berbeda gagal dalam instalasi. Pasangan pip-compile --generate-hashes dengan a
Pekerjaan CI yang membuat ulang file hash hanya pada pembaruan ketergantungan eksplisit, tidak pernah secara langsung
instal.
Pengguna puisi mendapatkan jaring pengaman yang sama melalui lockfile. Gotcha adalah sintaks tanda sisipan di
pyproject.toml; ganti dengan pin yang sama persis:
poetry install --sync menghapus paket apa pun yang tidak ada di lockfile, yang berhenti
ketergantungan yang menyimpang dari persembunyian di antara penerapan. Untuk perkakas AI sisi npm, gunakan
npm ci (bukan npm install) pada setiap CI yang dijalankan dan dikomit
package-lock.json.
Pemeriksaan 2: isolasi kredensial dari shell dev
Shell dev yang memiliki ~/.aws/credentials dengan kunci akses berumur panjang dimuat
pistol menunjuk ke tagihan cloud Anda dan data pelanggan Anda. LiteLLM tidak memerlukan kredensial tersebut
melakukan tugasnya; mereka duduk di disk karena pengembang pernah menjalankannya aws configure dan
tidak pernah dibersihkan.
Pindahkan kredensial dari disk. Muat sesuai permintaan, rentangkan pendek, dan cabut yang persisten lapisan:
-
AWS:
aws sso logindengan durasi sesi dibatasi pada 8 hingga 12 jam. Menghapus~/.aws/credentials. Semuanya harus dilalui~/.aws/ssocache yang kedaluwarsa dengan sendirinya. -
GCP:
gcloud auth application-default logindengan--lifetime=43200. Cabut JSON akun layanan yang berumur panjang yang ada di laptop; gunakan federasi identitas beban kerja dari CI. -
Biru langit:
az logindengan akses bersyarat yang memaksa MFA; membunuh token penyegaran yang disimpan lebih dari 12 jam. -
Kunci API: simpan di 1Password, Vault, atau Doppler. Suntikkan pada awal proses
melalui
op runatauvault read. Jangan pernah mengekspornya ke~/.zshrc.
Jika TeamPCP hanya menemukan token sesi STS yang kedaluwarsa, radius ledakan akan berhenti dalam beberapa jam akses. Insiden ini terjadi karena kunci berumur panjang berada dalam teks biasa di disk, siap digunakan membaca.
Pemeriksaan 3: pindai setiap instalasi dengan sandbox
Sebelum Anda mempercayai perpustakaan AI baru atau memutakhirkan ke perpustakaan yang sudah ada, instal di suatu tempat tidak dapat mencapai kredensial Anda. Kontainer Docker sekali pakai dengan kemampuan yang menurun dan isolasi jaringan memberi tahu Anda apakah kode waktu penginstalan melakukan sesuatu yang mencurigakan:
Pola dua langkah itu penting. Langkah pertama memerlukan akses jaringan untuk mencapai PyPI, jadi pasca instalasi
skrip masih dapat dieksfiltrasi. Jalankan langkah pertama pada VM yang bersih tanpa rahasia dan aturan keluar DNS
yang mencatat setiap nama host keluar. Langkah kedua berjalan dengan --network=none; jika Anda
perpustakaan mencoba menelepon ke rumah pada waktu impor, impor gagal dan Anda tahu.
Lebih baik: gunakan microVM sekali pakai seperti Firecracker atau orb di macOS untuk hal yang sama
bentuk tanpa kernel bersama Docker. Untuk JavaScript, model izin Deno memberi Anda
isolasi yang sama tanpa wadah: deno run --allow-net=api.openai.com,api.anthropic.com
agent.ts.
Pemeriksaan 4: verifikasi paparan pelanggaran sebelum memutar
Jika kunci Anda berada di mesin yang pelepasannya buruk, putar kunci tersebut. Tidak ada perdebatan. Tapi juga periksa apakah identitas yang terkait dengan kunci tersebut sudah muncul di dump yang diketahui; laptop itu menjalankan rilis LiteLLM yang disusupi bulan lalu mungkin adalah laptop yang pemiliknya menggunakan kembali kata sandinya dari tempat pembuangan sampah Collection1 2019. Kedua masalah tersebut perlu diperbaiki, dan Pemeriksaan 4 memberi tahu Anda akun mana memerlukan perhatian yang paling mendesak.
milik Botoi /v1/breach/check titik akhir menggabungkan sumber data yang sama dengan sebagian besar IAM perusahaan
alat membayar per kursi, dan tidak ada biaya apa pun pada tingkat gratis:
Telusuri setiap email akun layanan, setiap email pengguna mesin, dan setiap pengembang manusia yang memiliki laptop
menyentuh jendela. Email apa pun dengan password_exposed: true memerlukan rotasi dan a
memaksa reset MFA sebelum Anda melanjutkan. Masukkan output ke dalam runbook respons insiden Anda; satu
curl per identitas, sepuluh menit untuk organisasi teknik yang beranggotakan 50 orang.
Pemeriksaan 5: perhatikan jalan keluar Anda
Malware pasca-instal harus menelepon ke rumah. Kebanyakan pengembang tidak dapat mengingat kapan terakhir kali mereka melihat apa yang sebenarnya dibicarakan oleh laptop mereka; itulah kesenjangan yang diandalkan oleh TeamPCP.
Pada mesin yang dicurigai, satu perintah memberi tahu Anda tentang setiap proses Python dan Node terhubung ke:
Di tingkat armada, dorong setiap laptop pengembang dan pelari CI melalui jalan keluar Zero Trust daftar yang diizinkan. Cloudflare WARP, Tailscale ACL, dan Little Snitch semuanya memberi Anda bentuk yang sama: daftarkan nama host yang benar-benar Anda perlukan, blokir sisanya, waspadai blok tersebut.
Daftar yang diizinkan seketat ini terasa sulit di minggu pertama. Pada minggu kedua, satu-satunya peringatan yang Anda lihat adalah nyata: perpustakaan mencoba mencapai tujuan yang tidak ada urusannya untuk dijangkau. Itulah tepatnya sinyal infostealer TeamPCP akan tersandung saat instalasi.
Sekilas tentang lima pemeriksaan
| Memeriksa | Upaya | Pengurangan radius ledakan |
|---|---|---|
| Sematkan versi persisnya dengan hash | 1 jam untuk satu repo; 1 hari untuk monorepo | Menghentikan peluncuran diam-diam dari rilis yang disusupi |
| Pindahkan kredensial ke sesi yang berumur pendek | 2 hingga 4 jam per pengembang, satu kali | Batasi exfil hingga 8 hingga 12 jam akses, bukan berbulan-bulan |
| Sandbox setiap instalasi | 15 menit per evaluasi perpustakaan baru | Kode waktu penginstalan tidak dapat melihat rahasia sebenarnya atau jaringan prod |
| Identitas pemeriksaan pelanggaran terkait dengan kunci yang terbuka | 10 menit untuk organisasi yang beranggotakan 50 orang | Memprioritaskan rotasi dan pengaturan ulang MFA berdasarkan paparan yang diketahui |
| Terapkan daftar keluar yang diizinkan pada dev dan CI | 1 hari untuk mengkonfigurasi, terus menerus untuk memelihara | Memblokir saluran telepon-rumah yang mengeluarkan data yang dicuri |
Poin-poin penting
- Sematkan versi yang tepat, bukan rentang. Tanda sisipan atau tanda gelombang di lockfile Anda adalah sebuah janji bahwa rilis besok aman. TeamPCP mengingkari janji itu.
- Kredensial cloud tidak termasuk dalam shell dev. Sesi SSO yang berumur pendek berubah menjadi a kredensial yang dicuri menjadi acara rotasi, bukan pelanggaran.
-
Sandbox dipasang sebelum Anda memercayainya. Docker dengan topi terjatuh dan
--network=nonecukup untuk menangkap malware saat instalasi dengan biaya 15 menit. -
Putar plus pemeriksaan pelanggaran. Jika mesin menyentuh pelepasan yang buruk, putar setiap kali
identitas yang dilihatnya dan menjalankan setiap email
/v1/breach/checkuntuk menemukan yang itu membutuhkan pengaturan ulang MFA yang mendesak. - Daftar jalan keluar yang diizinkan menerima telepon ke rumah. Aturan Zero Trust pada laptop dan giliran CI a eksfiltrasi diam-diam ke dalam peristiwa yang keras, dicatat, dan dapat diblokir.
Botoi memberi Anda titik akhir HTTP untuk pemeriksaan pelanggaran, verifikasi hash, inspeksi SSL, HTTP audit header, dan pencarian metadata npm; dasar-dasar yang Anda perlukan untuk mengaudit rantai pasokan insiden tanpa menginstal perpustakaan lain. Satu kunci API, 5 persyaratan/mnt pada tingkat gratis, tidak memasang kait. Telusuri dokumen interaktif atau kawat server MCP ke dalam Kode Claude atau Kursor untuk memanggil titik akhir yang sama dari editor Anda saat Anda mengerjakannya daftar periksa.
FAQ
- Versi LiteLLM mana yang terpengaruh dan bagaimana cara mengonfirmasi bahwa saya bersih?
- Rilisan berbahaya ini muncul pada bulan Maret 2026 dan berada di PyPI cukup lama hingga mendarat di cache CI dan laptop pengembang di seluruh dunia. Jalankan pip show litellm untuk mencetak versi terinstal Anda, lalu rujuk silang versi tersebut dan unggah stempel waktu terhadap penasihat keamanan LiteLLM dan riwayat rilis PyPI. Jika mesin menjalankan pip install litellm selama jendela, perlakukan mesin tersebut sebagai telah disusupi: putar setiap kunci cloud yang ada di shell tersebut, terapkan ulang dari image yang bersih, dan hapus ~/.aws, ~/.config/gcloud, dan ~/.ssh token yang mendahului rotasi.
- Apakah ini kesalahan PyPI atau kesalahan LiteLLM?
- Keduanya, dan itulah pelajarannya. LiteLLM adalah perpustakaan sah dengan pengelola nyata; penyerang menggunakan saluran rilis yang disusupi, bukan kesalahan ketik. PyPI masih tidak memerlukan rilis yang ditandatangani atau 2FA wajib pada token untuk setiap proyek, sehingga kredensial unggahan yang dicuri berubah menjadi malware yang dikirimkan dalam hitungan menit. Penandatanganan paket melalui Sigstore dan token lingkup pengelola akan menghentikan serangan saat pengunggahan.
- Apakah saya perlu merotasi setiap kunci AWS atau hanya kunci yang disentuh pada mesin yang terpengaruh?
- Putar semuanya. Penyerang beralih melalui STS, rantai peran, dan kebijakan kepercayaan lintas akun saat mereka memiliki satu kunci yang berumur panjang. Jika laptop atau pelari CI yang melihat rilis buruk memiliki kredensial IAM apa pun di memori atau pada disk, perlakukan seluruh grafik utama yang dapat dijangkau dari identitas tersebut sebagai panas. Logika yang sama untuk akun layanan GCP dan perwakilan layanan Azure.
- Apakah Bun atau Deno mengubahnya untuk alat JavaScript AI?
- Sedikit, tidak banyak. Deno menjalankan kode dengan izin eksplisit (--allow-net, --allow-env), sehingga perpustakaan yang tiba-tiba mencoba membaca ~/.aws/credentials ditolak kecuali Anda memberikan akses sistem file. Bun memiliki flag --frozen-lockfile dan tidak menjalankan skrip instalasi secara default pada rilis terbaru. Keduanya merupakan penyempurnaan dari default npm, namun tidak menghentikan pustaka untuk mengekstraksi data setelah kode aplikasi Anda menyerahkan kredensialnya saat runtime.
- Apa yang membedakan risiko rantai pasokan AI-toolchain dengan risiko npm atau PyPI biasa?
- Perpustakaan AI sangat dekat dengan rahasia. Pembungkus LLM seperti LiteLLM memerlukan kunci API untuk 10+ penyedia dalam satu file env. Agen LangChain membaca kredensial AWS sehingga dapat memanggil S3 sebagai alat. Claude SDK menyentuh GITHUB_TOKEN karena Anda memintanya untuk membuka PR. Radius ledakan per instalasi lebih tinggi dari perpustakaan utilitas pada umumnya; satu rilis yang dikompromikan memberi Anda dompet kunci penyedia ditambah kredensial cloud plus akses kode sumber dalam satu kesempatan.
Mulai membangun dengan botoi
150+ endpoint API untuk pencarian, pemrosesan teks, pembuatan gambar, dan utilitas developer. Paket gratis, tanpa kartu kredit.