flawopen.com/AI Security/litellm-mcp-preview-command-injection-cve-2026-42271
Injeksi Perintah MCP LiteLLM: CVE-2026-42271
GTIG mengonfirmasi eksploitasi CVE-2026-42271: kunci LiteLLM valid dapat menjalankan perintah lewat pratinjau MCP. Perbarui ke 1.83.7+.[1], [6], [8]
Bengkel mengizinkan pengunjung mencoba alat sebelum menambahkannya. Meja pratinjau dapat menyalakan mesin bengkel yang kuat, jadi hanya pengawas yang boleh memberinya instruksi. Pada versi LiteLLM yang rentan, siapa pun dengan kartu akses yang diterima dapat mencapai meja itu. Cacat Starlette yang terpisah juga dapat mengecoh penjaga yang menentukan akses dari URL yang dibangun ulang. Setiap batas ini perlu diperbaiki sendiri. Di loket lain, pengunjung dapat menulis garis miring atau tanda tanya pada label paket. Petugas menempelkan teks itu saat menyusun ulang alamat dan mengiranya sebagai rute baru, padahal paket tetap melewati lorong semula. Inilah kebingungan Host dan path yang terpisah pada Starlette.[1], [3], [5]
Konsep Kunci & Istilah
Model Context Protocol (MCP)- Protokol yang memungkinkan aplikasi seperti gateway AI terhubung ke alat dan sumber data eksternal. Endpoint pratinjau LiteLLM menguji konfigurasi server MCP sebelum disimpan.[1]
Transport stdio- Mode koneksi MCP yang memulai proses anak lokal dan bertukar pesan melalui masukan serta keluaran standar. Proses berjalan pada host proxy LiteLLM dengan hak sistem operasi milik layanan proxy.[1], [2]
Otorisasi berbasis peran- Pemeriksaan di sisi server yang hanya mengizinkan identitas dengan peran yang disyaratkan untuk menjalankan operasi.
CVE-2026-42271tidak menerapkan pemeriksaan PROXY_ADMIN pada rute pratinjau, padahal pemeriksaan itu ada pada operasi penyimpanan.[1], [2] CVE-2026-48710 (Starlette BadHost)- Cacat Starlette yang terpisah: header Host yang tidak valid dapat membuat request.url.path berbeda dari path yang dipakai perutean. Horizon3 melaporkan bahwa hal ini dapat melewati autentikasi berbasis path LiteLLM pada kombinasi dependensi tertentu; ini bukan bagian dari
CVE-2026-42271.[3], [5], [4] Allowlist perintah MCP stdio- Kumpulan basename executable yang diterima LiteLLM untuk transport stdio. Daftar ini diperiksa saat validasi konfigurasi dan sekali lagi sebelum membuat klien untuk catatan lama. Ini bukan sandbox karena runtime yang diizinkan dapat menafsirkan argumen yang diberikan.[8]
Pemetaan kerangka kerja
- Referensi CWE untuk kelemahan yang dijelaskan dalam panduan ini: CWE-78
- CISA KEV — ditambahkan 2026-06-08 — CVE-2026-42271
Alur Serangan Langkah demi Langkah
Pastikan versi LiteLLM dan paparan endpoint
Advisory maintainer menyebut LiteLLM >=1.74.2 dan <1.83.7 terdampak serta mensyaratkan API key proxy yang valid; sebelum patch, semua pemegang key terautentikasi, termasuk key pengguna internal berhak rendah, dapat mengakses endpoint pratinjau. GTIG memasukkan CVE-2026-42271 dalam daftar eksploitasi terkonfirmasi; untuk prasyarat CVE ini, gunakan model ancaman terautentikasi dari advisory maintainer.[1], [6]
Kunci berhak rendah mencapai operasi pratinjau administratif
Endpoint menerima konfigurasi server MCP lengkap, termasuk perintah stdio, argumen, dan variabel lingkungan. Server mengautentikasi kunci tetapi tidak memeriksa peran PROXY_ADMIN, sehingga pemegang kunci terautentikasi mana pun dapat menjalankan pratinjau.[1]
Cacat Starlette yang terpisah dapat melemahkan batas autentikasi
Horizon3 melaporkan CVE-2026-48710 dapat membuat autentikasi berbasis path melihat request.url.path yang berbeda dari rute yang dipilih Starlette ketika versi terdampak digunakan. Peneliti melaporkan menggabungkannya dengan CVE-2026-42271 untuk menghapus prasyarat kunci API pada deployment terdampak. Atribusikan rantai ini kepada peneliti; akar masalah dan patch kedua CVE berbeda.[5], [3], [4]
Perbaiki kedua batas dan verifikasi paket yang benar-benar terpasang
LiteLLM 1.83.7 memperbaiki endpoint pratinjau: keduanya kini memerlukan PROXY_ADMIN dan tools/list memiliki autentikasi eksplisit. Patch juga memvalidasi allowlist perintah pada permintaan pembuatan/pembaruan dan mengulanginya di _create_mcp_client untuk menangani konfigurasi lama. Allowlist bukan sandbox; runtime yang diizinkan tetap dapat menafsirkan argumen. Starlette secara terpisah memperbaiki CVE-2026-48710 pada 1.0.1; verifikasi kombinasi paket yang benar-benar terpasang dan nilai rantai yang dilaporkan secara terpisah.[1], [8], [4], [7]
Konteks kampanye terbaru (dilaporkan 7 Oktober 2026)
Black Lotus Labs melaporkan bahwa sampel malware PoeLLM kemungkinan menargetkan /mcp-rest/test/connection; BleepingComputer juga melaporkan upaya eksploitasi CVE-2026-42271 dalam kampanye tersebut. Laporan itu tidak membuktikan bahwa semua host yang terinfeksi dikompromikan melalui CVE ini atau bahwa setiap target LiteLLM rentan. Perlakukan ini sebagai bukti penargetan terkini, bukan jumlah korban yang dapat dikaitkan dengan celah ini.[9], [10]
Analisis Akar Masalah (Root Cause)
Masalah LiteLLM berasal dari tidak adanya pemeriksaan peran pada kedua rute pratinjau MCP: setiap kunci API proxy yang valid dapat memanggilnya tanpa peran PROXY_ADMIN. Pratinjau koneksi menerima konfigurasi stdio dari pemanggil dan menjalankan perintah dengan hak proses proxy. Kerentanan Starlette yang terpisah memungkinkan header Host yang cacat membuat request.url.path berbeda dari jalur yang dirutekan Starlette; Horizon3 melaporkan bahwa validasi kunci API berbasis jalur dapat dilewati jika perilaku ini dirangkai dengan LiteLLM. Keduanya merupakan kerentanan terpisah: perbaiki batas otorisasi dan eksekusi perintah LiteLLM, lalu perbarui Starlette ke versi 1.0.1 atau yang lebih baru.[1], [8], [3], [4], [5]
Kode Sumber: Rentan vs Aman
Cuplikan ini menunjukkan patch LiteLLM yang sudah digabung pada batas eksekusi: basename perintah diperiksa sebelum klien stdio dibuat, sehingga catatan DB/konfigurasi lama juga melewati pemeriksaan. Patch juga memvalidasi permintaan pembuatan dan pembaruan server serta membatasi kedua endpoint pratinjau untuk PROXY_ADMIN; /test/tools/list juga mendapat dependensi user_api_key_auth secara eksplisit. Allowlist bukan sandbox: runtime yang diizinkan tetap dapat menafsirkan argumennya. Batasi pratinjau untuk admin dan jalankan proxy dengan hak minimum.[1], [2], [8]
Cuplikan sumber: Cuplikan validasi klien stdio LiteLLM
# _create_mcp_client sebelum pemeriksaan perintah stdio ditambahkan.
if server.command and server.args is not None:
stdio_config = MCPStdioConfig(
command=server.command,
args=server.args,
env=resolved_env,
)
# _create_mcp_client: validasi ulang catatan DB/konfigurasi lama.
if server.command:
base_command = os.path.basename(server.command)
if base_command not in MCP_STDIO_ALLOWED_COMMANDS:
raise HTTPException(
status_code=403,
detail="MCP stdio command is not in the allowlist",
)
if server.command and server.args is not None:
stdio_config = MCPStdioConfig(
command=server.command,
args=server.args,
env=resolved_env,
)
Daftar Periksa Penguatan Sistem Rekayasa
- ✓Inventarisasi deployment proxy LiteLLM dan pastikan versi yang benar-benar terpasang; perbarui rilis terdampak ke 1.83.7 atau lebih baru.[1], [8]
- ✓Periksa lockfile atau image deployment dan pastikan Starlette 1.0.1 atau lebih baru jika versi FastAPI yang terpasang mendukungnya; jangan memaksakan override dependensi tanpa pengujian.[3], [7]
- ✓Sebelum LiteLLM diperbarui, blokir POST /mcp-rest/test/connection dan POST /mcp-rest/test/tools/list pada reverse proxy atau gateway API sesuai rekomendasi advisori pemelihara.[1]
- ✓Pastikan kedua rute mewajibkan user_api_key_auth dan menolak semua peran selain PROXY_ADMIN sebelum membuat klien MCP.[1], [8]
- ✓Tambahkan pengujian yang membuktikan permintaan tanpa autentikasi dan kunci non-admin yang valid tidak dapat mencapai operasi pratinjau, sementara admin yang berwenang dapat memakai alur yang didukung.[8]
- ✓Untuk Starlette, uji penanganan Host yang cacat dan pastikan middleware akses memakai path ASGI kanonis atau URL yang divalidasi framework.[3], [4]
- ✓Tinjau log proxy dan telemetri proses anak untuk penggunaan endpoint pratinjau MCP yang tidak wajar; rotasi kredensial yang disimpan proxy jika penyelidikan menemukan kemungkinan akses host.[1], [8]
- ✓Pisahkan catatan kedua kerentanan:
CVE-2026-42271adalah eksekusi perintah LiteLLM;CVE-2026-48710adalah parsing Host dan kebingungan path Starlette.[1], [3] - ✓Tinjau LITELLM_MCP_STDIO_EXTRA_COMMANDS di setiap lingkungan; entri khusus memperluas batas kepercayaan executable dan tidak mengamankan penanganan argumen.[8]
Sumber
- LiteLLM security advisory GHSA-v4p8-mg3p-g94g / CVE-2026-42271
- LiteLLM pull request #25343: MCP stdio endpoint authorization and command validation fix
- Starlette advisory GHSA-86qp-5c8j-p5mr / CVE-2026-48710
- Starlette commit 764dab0: ignore malformed Host when constructing request.url
- Horizon3: CVE-2026-42271 chained with CVE-2026-48710
- Google Threat Intelligence Group: Vulnerability Discovery and Exploitation Trends in the AI Era
- LiteLLM issue #28993: FastAPI constraint and Starlette CVE-2026-48710 dependency resolution report
- LiteLLM merged PR #25343 — command allowlist, execution guard, role checks, and tests
- Lumen Black Lotus Labs: malware PoeLLM menargetkan layanan yang terekspos
- BleepingComputer: serangan PoeLLM terhadap server AI yang terekspos