Hubungi saya

Ketika paket yang kamu install yang menyerang

Rilis resmi LiteLLM di PyPI, Docker Hub, dan GHCR sempat berisi pencuri kredensial. Tidak ada bug yang perlu dieksploitasi; cukup pip install. Beberapa kebiasaan kecil yang sekarang saya pegang.

Kebanyakan celah keamanan butuh penyerang yang aktif mencari pintu. Serangan rantai pasok terbalik: korbannya sendiri yang membukakan pintu, dengan perintah yang diketik ribuan kali sehari.

pip install litellm

Bulan lalu, perintah itu sempat memasang pencuri kredensial.

Apa yang terjadi

LiteLLM adalah proxy open source yang banyak dipakai untuk mengakses berbagai model AI lewat satu API. Pada 21 Oktober, timnya mengumumkan bahwa penyerang berhasil menyuntikkan kode jahat ke artefak rilis mereka, dan artefak itu terbit di tiga tempat sekaligus: PyPI, Docker Hub, dan GitHub Container Registry.

Muatannya dua: pencuri informasi yang mengincar kredensial cloud, password, dan API key layanan AI, serta remote access trojan. LiteLLM sudah menarik rilis dan image yang tercemar, lalu menerbitkan panduan pemulihan.

Yang membuat saya berhenti sejenak: targetnya pas sekali. Orang yang memasang LiteLLM hampir pasti punya API key AI yang mahal, dan sering juga akses cloud. Penyerang tidak menebak; mereka tahu persis siapa yang akan menginstal.

Kenapa ini lebih sulit dari bug biasa

Untuk bug biasa, ada nomor versi yang rentan dan versi yang aman. Update, selesai.

Untuk paket yang disusupi, pertanyaannya lain: kapan kamu menginstal, dan dari mana. Kalau CI kamu menarik versi terbaru setiap build, mungkin ada satu build di jendela waktu yang salah. Satu build sudah cukup untuk mengirim semua secret di environment itu ke orang lain.

Menghapus paketnya juga tidak cukup. Kredensial yang sudah dicuri tetap dicuri. Langkah yang benar adalah mengganti (rotate) semua secret yang pernah ada di mesin itu.

Kebiasaan yang saya pegang sekarang

Tidak ada yang canggih di sini, dan itu intinya:

  1. Kunci versi. Pakai lockfile (package-lock.json, Cargo.lock, uv.lock, poetry.lock) dan commit ke repo. Deploy memasang persis versi yang sudah dites, bukan "yang terbaru saat itu".
  2. Jangan update di hari rilis. Untuk dependensi yang tidak terkait keamanan, saya tunggu beberapa hari. Paket yang disusupi biasanya ketahuan dan ditarik dengan cepat. Ini kebalikan dari tambalan keamanan, yang justru harus dipasang cepat.
  3. Secret sesedikit mungkin di satu tempat. Mesin build tidak perlu memegang semua kunci. Server yang hanya menyajikan halaman statis tidak perlu API key AI.
  4. Tahu cara rotate sebelum butuh. Kalau besok harus mengganti semua API key, apakah saya tahu di mana saja kunci itu dipakai? Jawaban jujurnya: belum lengkap. Daftar itu yang sedang saya susun.

Situs ini sendiri hanya punya satu dependensi saat build, dan nol dependensi saat berjalan. Bukan karena saya anti-library, tapi setiap baris di daftar dependensi adalah seseorang yang saya percayai untuk tidak pernah diretas.


Sumber: TechCrunch, 21 Oktober 2026