FlawOpen

flawopen.com/Teardowns/cve-2026-105697-langflow-mcp-stdio-command-injection

● CVE-2026-105697 · CVSS 9.9[1] · Kritis
Riset Keamanan · FlawOpen

CVE-2026-105697: injeksi perintah MCP Langflow

Sebelum versi 1.10.3, Langflow meneruskan konfigurasi MCP stdio ke proses yang dijalankan melalui shell. Pada instance yang terekspos dengan LANGFLOW_AUTO_LOGIN=true, penyerang dapat memperoleh token tanpa kredensial; saat auto-login dinonaktifkan, pengguna terautentikasi non-admin tetap dapat mencapai eksekusi perintah pada host. Versi 1.10.3 memvalidasi setiap jalur hingga tepat sebelum proses dimulai dan menjalankan program tanpa shell.[1], [2], [3]

Vektor CVSSCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H[1]
💡 Penjelasan Sederhana (ELI5)

Bayangkan seorang petugas menerima kalimat yang tanda bacanya dapat mengubah tugas: satu tanda bisa mengubah instruksi pengiriman menjadi perintah kedua. Langflow meneruskan perintah yang dikonfigurasi ke shell yang menafsirkan sintaks tersebut sebagai kendali, alih-alih memperlakukan program dan argumennya sebagai data terpisah. Perbaikan memvalidasi perintah yang diizinkan lalu menjalankan program secara langsung tanpa shell.[1], [2]

Konsep Kunci & Istilah

Transport MCP stdio
Menjalankan server MCP sebagai proses anak lokal dan bertukar pesan melalui input serta output standar.[1], [2]
Injeksi perintah (CWE-78)
Teks yang dipengaruhi pihak luar mengubah perintah sistem operasi yang diberikan ke shell atau peluncur proses.[1], [5]
Titik eksekusi
Jalur kode terakhir yang membuat proses; validasi harus berlaku di sini meskipun API sudah memeriksa sebelumnya.[1], [2]
Konfigurasi flow/tweak tertanam
Pengaturan MCP yang dibawa di dalam flow atau override runtime, bukan dibuat melalui API pengaturan.[1], [2]

Pemetaan kerangka kerja

  • Referensi CWE untuk kelemahan yang dijelaskan dalam panduan ini: CWE-78

Analisis Akar Masalah (Root Cause)

Sebelum versi 1.10.3, konfigurasi MCP stdio menggabungkan perintah dan argumen menjadi string, lalu menjalankannya dengan bash -c. API pengaturan mendapat daftar izin serta pemeriksaan argumen dan lingkungan pada versi 1.9.0, tetapi konfigurasi MCP Tools di dalam flow atau tweak dapat melewati validasi model karena titik eksekusi tidak menerapkan kebijakan bersama. Langflow 1.10.3 memusatkan validasi pada lfx.base.mcp.security.validate_mcp_stdio_config, menerapkannya pada API, flow, tweak, komponen lama, dan tepat sebelum proses dimulai, lalu menghapus shell perantara. CVE-2026-105697 adalah CWE-78 dengan CVSS 3.1 sebesar 9.9. Jika auto-login dinonaktifkan, penyerang tetap memerlukan pengguna terautentikasi non-admin yang dapat mengonfigurasi atau menjalankan jalur MCP terkait; auto-login bawaan dapat membuat instance pengembangan yang terekspos dapat dijangkau tanpa kredensial.[1], [2], [4], [5]

Alur Serangan Langkah demi Langkah

Langkah 1

Pengguna mencapai jalur konfigurasi MCP

Advisori menjelaskan akses melalui pengaturan server MCP atau flow yang memakai komponen MCP Tools. Pada instance yang terekspos dengan nilai default pengembangan LANGFLOW_AUTO_LOGIN=true, penyerang dapat memperoleh token tanpa kredensial. Jika auto-login dinonaktifkan, pengguna terautentikasi non-admin masih dapat mencukupi.[1]

Langkah 2

Konfigurasi mencapai persiapan proses

Perintah dan argumen menjadi command_str saat Langflow menyiapkan koneksi MCP stdio.[1]

Langkah 3

Shell menafsirkan string

Sebelum 1.10.3, jalur peluncuran memakai bash -c; perintah berjalan saat percobaan koneksi, sebelum handshake MCP berhasil.[1]

Langkah 4

Pemeriksaan jalur masuk belum lengkap

Versi 1.9.0 memvalidasi pengaturan REST, tetapi konfigurasi flow dan tweak dapat melewati validasi model tersebut.[1]

Langkah 5

Proses host berjalan dengan hak Langflow

Perintah berjalan sebagai pengguna layanan Langflow. UI masih dapat melaporkan bahwa server MCP gagal dimulai.[1]

Langkah 6

Versi 1.10.3 menutup batas eksekusi

Kebijakan bersama memvalidasi setiap jalur masuk dan tepat sebelum proses dimulai; program dijalankan tanpa shell.[1], [2]

Kode Sumber: Rentan vs Aman

Cuplikan rentan menunjukkan pola peluncuran melalui shell yang dijelaskan dalam advisori; ini bukan exploit yang dapat dijalankan. Cuplikan perbaikan merangkum desain 1.10.3: kebijakan bersama memvalidasi konfigurasi pada setiap jalur masuk dan sekali lagi tepat sebelum proses dibuat, sedangkan API menerima executable dan argumen secara terpisah. Peluncuran langsung menghilangkan interpretasi shell, tetapi tidak otomatis membuat semua executable atau paket yang diizinkan aman; operator juga perlu menerapkan kontrol sumber paket dan isolasi yang sesuai.[1], [2]

Cuplikan sumber: lfx/base/mcp/util.py — cuplikan kode terarah

IMPLEMENTASI RENTAN
# Bentuk peluncuran terdampak dalam advisori (cuplikan terfokus):
server_params = StdioServerParameters(
    command="bash",
    args=["-c", f"exec {command_str}"],
    env=env_data,
)
PERBAIKAN AMAN & KUAT
# Ringkasan berbasis sumber 1.10.3: validasi kebijakan, lalu jalankan proses secara langsung.
command_parts = shlex.split(command_str)
if not command_parts:
    raise ValueError("MCP stdio command is required")
command, args = command_parts[0], command_parts[1:]
validate_mcp_stdio_config(command, args, env_data)  # Repeat at the execution boundary.
server_params = StdioServerParameters(
    command=command,
    args=args,
    env=env_data,
)  # No shell wrapper. The shared validator rejects disallowed configurations.

Daftar Periksa Penguatan Sistem Rekayasa

Sumber