🔥 Paket LiteLLM diretas. Jika Anda bekerja dengan API LLM, inilah saatnya untuk waspada.

Kemarin di ekosistem Python terjadi serangan rantai pasokan yang sempurna. Paket litellm dikompromikan — sebuah pustaka dengan 97 juta unduhan per bulan, yang saat ini menjadi tulang punggung banyak proyek AI.

Versi terinfeksi 1.82.8 telah diunggah ke PyPI. Di dalamnya terdapat file litellm_init.pth dengan muatan base64 yang melakukan satu hal sederhana: menyedot semua rahasia dari mesin Anda dan mengirimkannya ke server jarak jauh, sambil mereplikasi dirinya sendiri.

Daftar yang "dicuri" mencakup semua yang dapat dijangkau oleh skrip:
▫️ Kunci SSH
▫️ Kredensial AWS/GCP/Azure
▫️ Konfigurasi Kubernetes
▫️ File .env (halo, token OpenAI Anda)
▫️ Riwayat terminal dan kata sandi database
▫️ Kunci SSL pribadi dan dompet kripto

Anda bahkan tidak perlu menulis pip install litellm untuk menyerahkan kunci produksi Anda. Cukup dengan menginstal atau memperbarui alat apa pun yang menariknya sebagai dependensi transitif. Misalnya, Anda memperbarui dspy yang populer (yang memiliki litellm>=1.64.0 di requirements-nya) — selamat datang di klub yang diretas.

Tapi ada satu nuansa menakjubkan dalam seluruh cerita ini.

Industri terselamatkan dari bencana global karena peretasnya adalah programmer yang buruk. 🤡
Malware ditulis dengan sangat kacau sehingga menyebabkan kebocoran memori. Seseorang menggunakan plugin di Cursor yang secara latar menarik litellm terbaru. Skrip tersebut menghabiskan semua RAM dan membuat sistem crash. Berkat ini, versi terinfeksi hanya bertahan kurang dari satu jam di PyPI sebelum dihapus.

Jika penyerang telah menguji kodenya dengan benar, eksploitasi bisa bertahan selama berminggu-minggu. Setengah dari startup AI akan tutup besok karena basis klien yang bocor dan anggaran cloud yang terkuras.

Andrej Karpathy memberikan pendapat tentang hal ini: paradigma pengembangan klasik "kita membangun piramida dari bata dependensi" dalam realitas modern menjadi kerentanan yang fatal. Selama beberapa dekade kita diajari pola akademis: "jangan menemukan kembali roda, gunakan kembali, ambil pustaka yang sudah jadi".
Dalam realitas rantai pasokan saat ini, ini seperti bermain rolet Rusia. Setiap kali Anda menarik dependensi baru ke dalam proyek, Anda menarik seluruh pohonnya hingga kedalaman sepuluh tingkat. Dan di suatu tempat di sana mungkin ada pemelihara yang tersinggung atau akun yang diretas.

Paradigma berubah. Alih-alih menarik pustaka besar hanya untuk beberapa fungsi utilitas, sekarang lebih aman dan pragmatis untuk hanya menyalin (atau menghasilkan melalui LLM) potongan kode yang diperlukan dan menguncinya di repositori Anda sendiri. 🤷‍♂️